jdk自带的dump分析工具 jdk13是什么?
jdk13是什么?
目前JDK13处于发布候选阶段,将于9月17日正式发布。目前,该版本包含的所有功能都已修复,主要包括以下五项:
ZGC: JEP 350,动态CDS归档J:开关表达式(预览)JEP 355,文本块(预览)
让 让我们逐一介绍这五个重要特性。
动态CDS档案
这个特性是在JEP 310:应用类-数据共享的基础上扩展的,动态CDS档案中的CDS指的是类-数据共享。
那么,这个JEP310是什么?
我们知道,在同一个物理机/虚拟机上启动多个JVM时,如果每个虚拟机单独加载自己需要的所有类,启动成本和内存占用都比较高。因此,Java团队引入了CDS的概念。通过在JVM之间共享一些核心类,每个JVM只需要加载自己的应用程序类,这样就减少了启动时间。另外,核心类是共享的,所以JVM的内存占用也减少了。
CDS只能应用于引导类加载器加载的类,不能应用于App类加载器或自定义类加载器加载的类。
在Java 10中,CDS被扩展为AppCDS。顾名思义,AppCDS不仅可以在Boot类加载器上工作,还可以在App类加载器和自定义类加载器上工作,大大扩展了CDS的应用范围。换句话说,开发定制类也可以由多个JVM加载和共享。
Java 10中包含的JEP310通过在不同的Java进程之间共享公共的类元数据,减少了内存占用并缩短了启动时间。
但是,在JEP310中,使用AppCDS的过程仍然很复杂,需要三个步骤:
1.决定转储哪个类。
2.将类的内存转储到归档文件中。
3.使用转储中的归档文件来加速应用程序的启动。
这次是JDK 13的JEP 350在JEP310的基础上做了一些扩展。允许在Java应用程序执行结束时动态归档类。存档的类将包括默认基础层CDS(类数据共享)存档中不存在的所有加载的应用程序类和库类。
如何用jstat快速监控JAVA程序内存溢出?
Jstat (Java虚拟机统计监控工具)。
首先,我们要明确jstat的作用:JVM的统计监控,和实时。那么,您为java虚拟机监控哪些数据呢?
让 让我们看看jstat在linux下是如何使用和执行的:
jstat-帮助
jstat-ltoptiongt[-t][-hltlinesgt]ltvmidgt[ltintervalgt[ltcountgt]]
让 让我们看看有哪些选择:
jstat-选项
比如(其他参数可以自己练习,看看输出什么数据):
jstat -gc -t -h10 27691 2000 10
看看这一堆数字。你觉得无聊吗?很恶心吗?你有心情看吗?能否通过这些数据快速分析内存泄漏问题?
以上是对jstat的基本介绍。你应该可以看到,通过jstat监控内存健康状态是没有问题的,但是你也要清楚地了解JVM的相关知识,搞清楚年轻一代、永久一代、YGC和FGC,根据这些数据判断是否存在内存泄漏问题或风险。
然而,它 它并不快,如果在网上出了问题,你可以 受不了,所以我个人认为jstat可以作为监控amp预警工具,而不是问题排查工具。(如有不同意见,可在评论区讨论~)
在这里,我建议的方法是:
如果您认为您的应用程序中存在内存泄漏,不要 t重启或停止应用程序,并保留第一个站点(这是第一步。如果第一步没有出现内存泄漏,等待下一次内存泄漏~考虑通过slb将本机摘下,以免影响用户)
使用java 自己的工具jmap转储站点文件: jmap-dump : formatb,ltpidgt。
用MAT工具分析堆转储文件,得到站点文件。剩下的就是学会用MAT分析文件了。事实上,你不知道。;不需要分析。MAT做了你需要做的一切,你可以通过MAT分析出吃内存的对象是什么,这样就可以定位内存泄露的问题。。
以上是我个人对java内存泄漏定位的理解。欢迎大家积极讨论,共同学习成长~
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。