JVM理论:(二)垃圾收集器与内存分配策略

  Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。

、内存分配策略

  要了解堆空间内又分有哪几个内存区域(年轻代:eden、s1、s2,老年代),创建对象时按什么规则分配到堆。

  1)对象优先在Eden分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。

  2)大对象直接进入老年代。

  3)在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并且对象年龄设为1,当它的年龄增加到一定程度(默认为15岁),就会被晋升到老年代中。

         Survivor不能容纳,对象将直接通过分配担保进入老年代。

  4)Survivor空间中相同年龄的对象过半直接进入老年代。

二、回收分配给对象的内存

  Java内存运行时区域中的程序计数器、虚拟机栈、本地方法栈这3部分属于线程私有,生命周期随线程生和灭,其中,栈中的栈帧随着方法的进入和退出执行着入栈和出栈操作,且栈帧分配的内存在编译期间就会被确定。这几个区域的内存分配和回收都具备确定性,随着方法或线程的结束,内存自然就被回收,所以一般不过多考虑回收问题。垃圾回收一般考虑的是java堆和方法区的回收。

  1)判断对象是否已死

  可达性算法、对四种引用有不同的回收限制。

  2)垃圾收集算法、垃圾收集器

  三种垃圾算法,七种垃圾收集器、安全点

  3)理解GC日志

原文地址:https://www.cnblogs.com/zjxiang/p/9218193.html