上一篇文章中已经大概解释了一下我们的java有的内存管理的内容和垃圾方面的内容。
上篇文章地址https://blog.csdn.net/weixin_46635575/article/details/122797073
1、垃圾标记阶段的算法之引用计数算法
(1)复习一下内存模型
(2)对象存活的判断
(2.1)垃圾标记阶段算法之引用计数算法
- 我们java是没有采用这种方式【看下面案例分析】
设置参数
我们发现根本没有发生什么GC
当手动的System.gc()时候看到,再次运行
由此证明我们java没有使用引用计数算法
Python则是通过如下来解决的。
(2.2)垃圾标记阶段算法之可达性分析算法
(2.3)常见的GC Roots对象
2、对象finalization机制
(1)方法使用介绍
用protected修饰的方法:它是可以被子类重写的。
(2)具体过程
java虚拟机内置了finalize线程,由它来触发我们的finalize()方法,优先级比较低,所以我们自己调用了,也很难启用,后面继续写到为什么不要主动去调用
(3)演示可复活对象
3、MAT查看GC Roots
(1)获取dump文件
如果要用MAT查看GC Roots则需要dump文件。我们怎么获得dump文件呢?
- 第一种方式(使用jmap)
- 第二种方式是通过JVisualVM导出
可能我此篇文章是第一次看到我写JVM笔记,可能不太知道JVisualVM,它是JDK自带的可视化工具,在如下目录
- 第一步选择我们的对应进程
- 第二步
- 第一步选择我们的对应进程
(2)使用MAT打开
4、jprofiler查看GC Roots
(1)jprofiler分析OOM
有这个参数设置,就如果出现了OOM的时候,就会生成一个heap的dump文件,就在你当前模块里面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。