GC算法https://www.cnblogs.com/smyhvae/p/4744233.html
引用计数法(无法解决循环引用的问题,不被java采纳)
根搜索算法
现代虚拟机中的垃圾搜集算法:
标记-清除
复制算法(新生代)
标记-压缩(老年代)
分代收集
Stop-The-World
垃圾回收器https://www.cnblogs.com/smyhvae/p/4810168.html
stop the world系列
Serial收集器:(串行收集器)
ParNew收集器:Serial收集器的多线程版本(使用多条线程进行GC)
ParNew Scanvenge收集器 类似ParNew,但更加关注吞吐量。目标是:达到一个可控制吞吐量的收集器。
G1收集器:是当今收集器发展的最前言成果之一,jdk1.7,商用程度。对垃圾回收进行了划分优先级的操作,这种有优先级的区域回收方式保证了它的高效率。
牛逼系列
CMS收集器:(老年代收集器)并发标记清除
初始标记和重新标记时,需要stop the world。整个过程中耗时最长的是并发标记和并发清除,这两个过程都可以和用户线程一起工作。
疑问:既然标记-清除算法会造成内存空间的碎片化,CMS收集器为什么使用标记清除算法而不是使用标记整理算法:
答案:CMS收集器更加关注停顿,它在做GC的时候是和用户线程一起工作的(并发执行),如果使用标记整理算法的话,那么在清理的时候就会去移动可用对象的内存空间,那么应用程序的线程就很有可能找不到应用对象在哪里。
ZGC?
GC分为两种:Minor GC和Full GC
Minor GC是发生在新生代中的垃圾收集动作,采用的是复制算法。
Full GC是发生在老年代的垃圾收集动作,采用的是标记-清除/整理算法。
内存划分
年轻代 一大块Eden和两块Survivor
老年代
永久代
类加载机制
加载
类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,作为方法区这个类的数据访问的入口。
链接
链接指的是将Java类的二进制文件合并到jvm的运行状态之中的过程。在链接之前,这个类必须被成功加载。(验证,准备,解析)
初始化
到了初始化阶段,才真正执行类中定义的Java程序代码(或者说是字节码)
网友评论