概述
1.确定哪些对象需要回收,即搜索算法
1)引用计数器算法(弃用,因为存在循环引用问题)
2)根搜索算法
2.确定好回收对象,进行对象垃圾回收的算法,即回收算法
1)标记-清除算法
2)复制算法, 适用于收集存活时间短的新生代
3)标记整理算法,适用于存活时间长的老年代
4)分代收集算法,分为新生代和老年代,结合了复制和整理算法
3.Java 的 GC 哪些内存需要回收
内存运行时 JVM 会有一个运行时数据区来管理内存。它主要包括 5 大部分:程序计数器(Program Counter Register)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap).而其中程序计数器、虚拟机栈、本地方法栈是每个线程私有的内存空间,随线程而生,随线程而亡。例如栈中每一个栈帧中分配多少内存基本上在类结构确定是哪个时就已知了,因此这 3 个区域的内存分配和回收都是确定的,无需考虑内存回收的问题。但方法区和堆就不同了,一个接口的多个实现类需要的内存可能不一样,我们只有在程序运行期间才会知道会创建哪些对象,这部分内存的分配和回收都是动态的,GC 主要关注的是这部分内存。
4.Java的GC什么时候回收
可达性分析,所有生成的对象都是一个称为"GC Roots"的根的子树。从 GC Roots 开始向下搜索,搜索所经过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链可以到达时,就称这个对象是不可达的(不可引用的),也就是可以被 GC 回收了。引用类型的不同,GC 回收时也会有不 同的操作:
1)强引用(Strong Reference):Object obj = new Object();只要强引用还存在,GC 永远不会回收掉被引用的对象
2)软引用(Soft Reference):描述一些还有用但非必需的对象。在系统将会发生内存溢出之前,会把这些对象列入回收范围进行二次回收(即系统将会发生内存溢出了,才会对他们进行回收。)
3)弱引用(Weak Reference):程度比软引用还要弱一些。这些对象只能生存到下次 GC 之前。当 GC 工作时,无论内存是否足够都会将其回收(即只要进行 GC,就会对他们进行回收。)
4)虚引用(Phantom Reference):一个对象是否存在虚引用,完全不会对其生存时间构成影响
最后
以上就是懦弱店员为你收集整理的Java虚拟机中的垃圾回收算法的全部内容,希望文章能够帮你解决Java虚拟机中的垃圾回收算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复