垃圾回收器总结 GC日志分析
来源:互联网 发布:生化危机4 mac 编辑:程序博客网 时间:2024/05/21 12:52
1、垃圾回收器种类
2、回收算法
标记–清除:
原理:内存进行GC时,先把需要回收的对象标记出来,然后删除对象
缺点:效率低,回收后内存不连续
标记–复制–清除:
原理:内存分为Eden+From+To=8:1:1,先标记需要回收的对象,然后把需要保留的对象复制到From区, 最后删除回收对象
优点:内存连续,适用于频繁回收对象,因此新生代堆回收一般使用此方法
标记–整理:
原理:先标记需要回收的对象,然后把保留的对象移动到界内,最后把界外的对象删除
优点:适用老年代,回收量大,但不频繁
3、标记算法(什么对象应该标记为需要回收)
a.引用计数法
一个对象创建后就开始计数,保存它被引用的次数,单次数记为0时,表示可回收
缺点:循环引用无法解决
b.GC Roots链
我们认为一个对象,只要被使用,那么就会存在一个类似树状的结构种,链接引用,当可回收时,此时的对象不会GC roots链表中,关键在于怎么确定根节点:
1):栈里面的对象:栈的对象是线程正在使用的对象,因此不可回收
2):方法区的静态变量:此时也不可回收
3):其他,如native方法正在使用的对象
只要不在上述对象的GC Roots链中的对象,我们就认为是可回收对象
4、GC回收器的结合种类
单–多:Serial + CMS
单–单:Serial + Serial Old
多–多:ParNew + CMS,Paralell Scavenge+parall old
多–单:ParNew + Serial old, Paralell Scavenge+ Serial old
注:单指单线程,多指多线程,只有一个并发CMS
5、GC日志分析:
下面是比较常见的日志内容:
420484.626***(JVM启动时间到目前的时间戳,秒): [GC [PSYoungGen(Parlell Scavenge GC): 1332969K->39723K(1335296K)(Eden+from回收前的内存大小—>回收后的大小(总大小含未使用))] 4084270K->2827467K(4131840K)(堆回收前大小–堆回收后大小(堆总大小含未使用)), 0.0851340 secs] [Times: user=0.24(回收线程执行用户代码CPU时间CPU个数,秒) sys=0.00*(回收线程执行Linux内核代码CPU时间CPU个数,秒), real=0.09 secs*(回收线程用来I/O阻塞等待时间,秒)*]
420484.712: [Full GC [PSYoungGen: 39723K->0K(1335296K)] [ParOldGen: 2787743K->2727423K(2796544K)] 2827467K->2727423K(4131840K) [PSPermGen: 62745K->62692K(262144K)], 1.8042640 secs] [Times: user=6.78 sys=0.00, real=1.80 secs]
6、基础知识
需要对JVM堆栈信息有些了解,记住堆主要是对象及数组
堆=new+old=Eden+From+To+old
java内存=堆+栈+方法区=java进程的大小,依据不同系统有所不同
- 垃圾回收器总结 GC日志分析
- GC垃圾回收器
- 垃圾回收器GC
- GC垃圾回收算法总结
- JVM 垃圾回收,理解GC日志
- 浅谈GC垃圾回收器
- JVM--GC垃圾回收器
- JVM--GC垃圾回收器
- GC垃圾回收,垃圾收集器
- java中的GC垃圾回收机制分析
- java jvm gc 垃圾回收机制 总结
- Java JVM(二):垃圾回收概念 与 GC 日志
- JVM学习-java垃圾回收(二)-GC日志
- GC - 垃圾回收器相关参数汇总
- Java的垃圾回收器GC机制
- Java GC:垃圾回收器种类
- Android 垃圾回收器(GC)
- JVM GC垃圾回收器详解
- HBase-JvmPauseMonitor分析
- 解决 TortoiseGit 诡异的 Bad file number 问题
- HDU-1814-TwoSAT
- 图像处理经典图片Lena背后的故事
- Java switch case 报错
- 垃圾回收器总结 GC日志分析
- 食物链 洛谷p2024
- 串口通讯
- TensorFlow——训练自己的数据(五)模型评估
- 计算上传文件的MD5值
- 【NOIP2010】关押罪犯
- vim怎样进行块复制
- android PIE error: only position independent executables (PIE) are supported解决方法
- 垃圾对象的判定