性能优化和自动回收机制 | 青训营

89 阅读2分钟

性能优化

提高软件系统处理能力,减少不必要消耗,充分利用计算机算力

首先就是对于业务层的优化

  • 业务层优化

    • 针对特定的环境中进行优化
    • 通过业务层的优化进行收益的提升和性能的提升两者进行兼容
  • 运行时优化

    • 面对全公司层面进行优化
    • 解决性能问题进行分布式优化策略

在优化时需要根据数据驱动,比如使用自动化性能分析工具–pprof。

  • 软件质量
  • 保证接口稳定的情况下改进具体实现
  • 测试驱动:测试用例覆盖尽可能多的场景,方便回归
  • 文档:做了什么,没错什么,能达到什么效果
  • 隔离:通过选型控制是否开启优化
  • 可观测:必要的日志输出
自动回收内存机制

通过自动回收垃圾的方式进行内存的释放,解决了一些不必要的麻烦,避免了手动处理内存问题的繁琐,同时也能够保证数据的安全性。

自动内存管理通过为新对象进行内存空间的分配,找到当前存活的对象,回收当前无用对象的内存。

有以下分配算法

  • Serial GC算法:只有一个collector,mutator执行到一定位置需gc时,collector会中断mutator,转为执行collect的gc流程
  • Parallel GC算法:支持多个collectors同时回收的GC算法,也需要中断mutator
  • Concurrent GC:多个mutator和多个collector可以同时执行,也就是mutator不需要被中断。
追踪垃圾回收
  • 标记根对象

将静态变量、全局变量、常量、线程栈等标记为存活

  • 标记可达对象

求指针指向关系的传递闭包:从根对象出发找到可达对象

  • 清理不可达对象

    • 将存活对象复制到另外的内存空间 ,然后将原来的内存空间全部回收
    • 将死亡对象的内存标记为可分配,下次需要分配新空间时直接使用这些空间
    • 移动并且整理存活对象
引用次数

准确的说,一个程序是否被考虑进行垃圾回收当中是由引用次数决定的,如果当前被引次数为0证明为垃圾自动进行清理工作。

对象只有当引用数大于0的时候是存活的。也就对象没有被引用的时候就会被回收。

但也存在一定的弊端例如回收的压力较大,可能回收期间导致程序的崩溃等等。