第26讲 | 如何监控和诊断JVM堆内和堆外内存使用?
该思维导图由 AI 生成,仅供参考
典型回答
- 深入了解
- 翻译
- 解释
- 总结
JVM内存监控与诊断方法详解 本文深入介绍了监控和诊断JVM堆内和堆外内存使用的方法,包括常见工具和命令行工具的使用,以及堆内存结构和堆外内存的详细分析。作者通过介绍JVM参数和特性,系统地分析了堆内和堆外内存结构,为读者提供了对JVM内存管理的基础实践和相关工具的了解。 文章内容涵盖了堆内存的结构、堆外内存的包括内容、NMT特性对JVM的分析以及JVM参数对内存大小的影响等方面。通过本文的阅读,读者可以深入了解JVM内存结构,对定制Java运行时或处理OOM等问题有更清晰的思路。 本文的亮点在于深入剖析了JVM内存监控和诊断的方法,涵盖了堆内和堆外内存的结构、相关工具的使用以及对JVM参数和特性的分析。读者通过阅读本文可以获得对JVM内存管理的基础实践和相关工具的了解,为定制Java运行时或处理OOM等问题提供了清晰的思路。
《Java 核心技术面试精讲》,新⼈⾸单¥59
全部留言(25)
- 最新
- 精选
- Loading...今天阿里面试官问了我一个问题,我想了很久没想通,希望得到解答。为什么在标记垃圾的时候,需要stop the world
作者回复: 对方问得有点含糊,不知道是否故意的,以cms为例,它有不同的mark: initial mark,conc mark, remark;conc时候不需要stw;其他需要短暂stw,这样引用关系才不变,另外效率也高
2018-07-051258 - 小文同学班门弄斧,为老师补充一些关于Eden、两个Survivor的细节。 1、大部分对象创建都是在Eden的,除了个别大对象外。 2、Minor GC开始前,to-survivor是空的,from-survivor是由对象的。 3、Minor GC后,Eden的存活对象都copy到to-survivor中,from-survivor的存活对象也复制to-survivor中。其中所有对象的年龄+1 4、from-survivor清空,成为新的to-survivor,带有对象的to-survivor变成新的from-survivor。重复回到步骤2 这是我看这边文章也有的疑问,通过查阅资料理解的,希望可以帮到其他同学
作者回复: 非常感谢,下一章有配图详解,受制于一章的篇幅限制
2018-07-07355 - 铁拳阿牛-XX:NewRatio=value 默认是2 这里说是3面试官还说我记错了😣
作者回复: 是我记错了,非常抱歉
2018-07-18221 - 北溟鱼汤java.lang.Runtime类有freeMemory()、totalMemory()等方法可以获取到jvm内存情况,看了一下是本地方法。
作者回复: 是的
2018-07-0519 - xhkk老师,请问如何判断是否有内存泄露
作者回复: 泄露可以对比不同时间点内存分配,一般看用户类型的分配情况,什么在增加。具体,比如用jmap -histo:live 多次快照,然后对比差异,或者用jmc之类profiling工具,都可以进行,对比会更加流畅一些
2018-07-2414 - clz1341521java.lang.Runtime类有freeMemory()、totalMemory()等方法可以获取到jvm内存情况,看了一下是本地方法。 另外看到有同学说jmc,jconsole在linux上用不了的问题,其实1可以远程连接,2可以使用xshell
作者回复: 不错
2018-08-0912 - L.B.Q.Yjmx可以做到通过代码而不是工具去监控,其实jdk安装包的工具也是对jmx的一个薄层的封装。
作者回复: 是的
2018-07-0510 - 陈道恒当然,也有特殊情况,我们知道普通的对象会被分配在 TLAB 上;如果对象较大,JVM 会试图直接分配在 Eden 其他位置上;如果对象太大,完全无法在新生代找到足够长的连续空闲空间,JVM 就会直接分配到老年代。 杨老师你好,大对象直接分配到老年代,这里是指多大?有没什么衡量标准?
作者回复: 这个要看具体什么GC,如果cms是PretenureSizeThreshold,G1本身就有homongous object的概念,region大小的一半
2018-08-159 - ethanjar包发生冲突,如何定位是哪些jar包发生问题
作者回复: 出错信息应该包含具体类的名字等信息;mvn依赖树
2018-07-096 - 李二木还有一个就是jstat,可以实时查看gc信息,这个也还是没有工具直观,
作者回复: 是的,文中简单提了下
2018-07-054