性能优化
提高软件系统处理能力,减少不必要消耗,充分利用计算机算力
首先就是对于业务层的优化
-
业务层优化
- 针对特定的环境中进行优化
- 通过业务层的优化进行收益的提升和性能的提升两者进行兼容
-
运行时优化
- 面对全公司层面进行优化
- 解决性能问题进行分布式优化策略
在优化时需要根据数据驱动,比如使用自动化性能分析工具–pprof。
- 软件质量
- 保证接口稳定的情况下改进具体实现
- 测试驱动:测试用例覆盖尽可能多的场景,方便回归
- 文档:做了什么,没错什么,能达到什么效果
- 隔离:通过选型控制是否开启优化
- 可观测:必要的日志输出
自动回收内存机制
通过自动回收垃圾的方式进行内存的释放,解决了一些不必要的麻烦,避免了手动处理内存问题的繁琐,同时也能够保证数据的安全性。
自动内存管理通过为新对象进行内存空间的分配,找到当前存活的对象,回收当前无用对象的内存。
有以下分配算法
- Serial GC算法:只有一个collector,mutator执行到一定位置需gc时,collector会中断mutator,转为执行collect的gc流程
- Parallel GC算法:支持多个collectors同时回收的GC算法,也需要中断mutator
- Concurrent GC:多个mutator和多个collector可以同时执行,也就是mutator不需要被中断。
追踪垃圾回收
- 标记根对象
将静态变量、全局变量、常量、线程栈等标记为存活
- 标记可达对象
求指针指向关系的传递闭包:从根对象出发找到可达对象
-
清理不可达对象
- 将存活对象复制到另外的内存空间 ,然后将原来的内存空间全部回收
- 将死亡对象的内存标记为可分配,下次需要分配新空间时直接使用这些空间
- 移动并且整理存活对象
引用次数
准确的说,一个程序是否被考虑进行垃圾回收当中是由引用次数决定的,如果当前被引次数为0证明为垃圾自动进行清理工作。
对象只有当引用数大于0的时候是存活的。也就对象没有被引用的时候就会被回收。
但也存在一定的弊端例如回收的压力较大,可能回收期间导致程序的崩溃等等。