中的引用只有引用和没有引用两种情况,但是在开发过程中,我们往往需要更加复杂的场景,例如当我们内存空间足够的时候,我们就讲对应的对象存储在内存中,当我们内存不足的时候我们就把它进行回收,所以JDK1.2之后...,因为堆空间比方法区会更加消耗内存.但是对于方法区而言也是有两种东西需要回收的,一种是废弃常量,另一种是无用的类.相对的废弃常量判定方法比较简单,没有对它的引用,就说明该常量已经废弃,但是对于无用的类判定的方法就比较复杂...:GC在方法区当中的回收对废弃常量来说还算比较划算,但是对于无用的类则是性价比比较低的,因为本来类加载器就是根据该类是否被用到,从而来将该类加载到内存当中的,然而如果该类已经不存在任何引用了,那么说明这部分的程序也已经基本跑到头了...:更有利于程序的长时间运行,分配大对象时不会因为无法找到连续的内存空间而提前触发了GC
4.可预测的停顿:可以设置垃圾收集的时间最大值不超过N毫秒
5.GI的执行过程
初始标记
并发标记
最终标记
筛选标记...对象分配原则
1.优先分配在新生代Eden区中,当Eden区当中空间不足时,触发Minor GC
2.大对象或者是长期存活调用频繁的对象会进入到年老代,当年老代空间不足时会触发Major GC,Major