JVM知识框架
2021-10-02 12:29:53 15 举报
AI智能生成
针对JVM常见知识总结、及面试问题总结!
作者其他创作
大纲/内容
GC种类
minor GC
Eden区满了,则触发Minor GC
Survivor区满了不会触发Minor GC
引发STW,暂停其他用户线程,
等待垃圾回收结束,用户线程才恢复运行
等待垃圾回收结束,用户线程才恢复运行
major GC
永久代(元空间)满,则触发major GC
Full GC
老年代空间不足
方法区空间不足
调用System.gc()
Minor GC后进入老年代的平均大小>老年代的可用空间
Eden区向Survivor区复制存活对象时,Survivor区存放不下,
则把该对象放入老年代,则老年代可用空间<该对象大小
则把该对象放入老年代,则老年代可用空间<该对象大小
垃圾收集器与内存分配策略
判断对象存活方式
引用技术法
存在相互引用问题,JVM没有选用了!
可达性分析
GC Roots可以是哪些
虚拟机栈中引用的对象
类静态属性引用的对象
如:类中的静态变量
常量引用的对象
如:字符串常量池(String Table)的引用
被同步锁持有的对象
在本地方法栈中Native方法引用的对象
垃圾收集算法
标记复制
Eden区,form区和to区
总结
优点:可保证内存的连续性,不会出现碎片问题
缺点:浪费空间,需要两倍空间
Tips
在新生代,一次通常可回收70~90%的空间,回收性价比高
因此一般商业虚拟机都是采用的复制算法回收新生代
标记清除
标记——>清除
总结
需等完全标记完才开始进行回收的,效率不是很高
在进行GC时,需停止整个应用程序,用户体验较差
内存不连续,产生内存碎片,需维护空闲列表
标记整理
标记
从根节点开始标记所有被引用的对象
压缩
将所有的存活对象压缩到内存一端,按排序排放,
之后清理界外所有的空间
之后清理界外所有的空间
总结
优点
相对标记清除算法,内存消耗占用减少
相对复制算法,消除了内存减半的代价
缺点
效率低下
移动对象时,若对象被其他对象应引用,需调整引用的地址
总结
从效率来说,复制算法最快,但浪费了很多内存
垃圾回收相关概念
System.gc()的理解
显示触发Full GC,同时对老年代和新生代进行回收
并不是立即调用生效的
内存溢出
代码中创建了大量的大对象,且长时间不能被垃圾收集器收集
java虚拟机的堆内存设置不够
内存泄漏
定义
对象是可达的,但对象不会再被程序使用到了,所以导致GC无法回收的情况
案例
单例的生命周期和应用程序一样长,
若单例对象持有引用,则这个持久的对象是不会被垃圾回收器回收的,
则导致内存泄漏产生
若单例对象持有引用,则这个持久的对象是不会被垃圾回收器回收的,
则导致内存泄漏产生
数据库连接,网络连接和IO连接,必须手动close(),否则不能回收!
引用
强引用
可以直接访问的对象
强引用所指向的对象在任何时候都不会被垃圾回收期回收
JVM宁愿抛出OOM异常,也不会回收强引用所指向的对象
弱引用
在进行垃圾回收时,只要是弱引用,不管系堆空间是否使用,都会被回收掉
软引用
当内存不足时,再回收软引用的可达对象
内存足够时,不会回收软引用的可达对象
虚引用
主要用来追踪对象的回收情况
垃圾回收器
评估垃圾回收器的性能指标
吞吐量
运行用户代码的时间占总运行时间的比例
暂停时间
执行垃圾收集时,程序的工作线程被暂停的时间
内存占用
java堆区所占用的内存大小
主要的GC算法
引用计数
几乎不用,无法解决循环引用问题
复制拷贝
新生代
标记清除
老年代
标记整理
老年代
主要的垃圾收集器
Serial(串行回收)
-XX:+UseSeriallGC
Parallel(并行回收)
-XX:+UseParallelGC
CMS
并发标记清除
G1
将堆内存分割成不同区域、然后并发的进行垃圾回收
ZGC
JAVA 11出现的
七种垃圾收集器
按线程数划分
串行回收器(UserSerialGC)
UserSerialGC
串行垃圾收集器
UserSerialOldGC
串行老年代垃圾收集器(已经被移除)
并行回收器(UserParallelGC)
UseParNewGC
年轻代的并行垃圾回收器
UseParallelOldGC
老年代的并行垃圾回收器
UserParallelGC
并行垃圾收集器
并发回收器(UseConcMarkSweepGC)
UseConcMarkSweepGC
(CMS)并发标记清除
UseG1GC
G1垃圾收集器
垃圾收集器与分代关系
新生代(Young Gen)
Serial Copying
UserSerialGC,串行垃圾回收器
Parallel Scavenge
UserParallelGC,并行垃圾收集器
ParNew
UserParNewGC,新生代并行垃圾收集器
老年代(Old Gen)
Serial Old
UseSerialOldGC,老年代串行垃圾收集器
Parallel Compacting(Parallel Old)
UseParallelOldGC,老年代并行垃圾收集器
CMS
UseConcMarkSwepp,并行标记清除垃圾收集器
各区都能使用
G1
UseG1GC,G1垃圾收集器
垃圾回收器总结
垃圾回收器总结
垃圾收集器如何选择
0 条评论
下一页