首页 > 代码库 > JVM-垃圾收集器与内存分配策略
JVM-垃圾收集器与内存分配策略
- 判断对象是否存活
- 引用计数法:强引用->软引用(内存溢出异常前第二次回收)->弱引用->虚引用
- 可达性分析算法:一个对象到GC Roots没有任何引用链(Reference Chain),则证明此对象不可用
- 无用的类标准
- 该类所有的实例都已回收
- 加载该类的ClassLoader已被回收
- Class没有在任何地方被引用,及反射
- 垃圾收集算法:标记-清除算法(CMS)、复制算法(新生代)、标记整理算法
- HotSpot算法
- 枚举根节点:通过一组OopMap,在类加载完成的时候,把对象内什么偏移量是什么类型的数据计算出来,也会在特定位置记录下栈和寄存器中哪些位置是引用
- 安全点:
-
-
- 没有为所有指令都生成OopMap,程序并发所有地方都能停下来执行GC,只有到了安全点才能暂停
- 主动式中断:GC需要中断线程时,设置一个标志,线程执行时主动去轮询这个标志,再中断挂起
-
- 垃圾收集器
- Young generation:Serial、ParNew、Parallel Scavenge
- Tenured generation:CMS、Serial Old、Parallel Old
- Serial在Client模式下是很好的选择
- ParNew:-XX:ParallelGCThreads来限制垃圾收集的线程数
- Parallel Scavenge:达到一定可控制的吞吐量。-XX:GCTimeRatio
- Serial Old:在并发收集发生Concurrent Mode Failure时使用
- 停顿时间组合:ParNew+CMS
- 吞吐量优先:Parallel Scavenge+Parallel Old
- CMS:a、默认线程数(CPU数量+3)/4;b、运行期间内存无法满足程序要求会出现Concurrent Mode Failure;c、碎片压缩与频度可以设置
- 常用参数
-XX:+PringGCDetails:打印内存回收日志
-XX:MaxTenuringThreshold=1:晋升到老年代的年龄
-XX:PretenureSizeThreshold:直接晋升到老年代的对象大小
-XX:+HandlePromotionFailure:空间分配担保,避免Full GC过于频繁
-XX:+HeapDumpOnOutOfMemoryError
JVM-垃圾收集器与内存分配策略
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。