2016 - 2024

感恩一路有你

jdk自带的dump分析工具 jdk13是什么?

浏览量:1948 时间:2023-06-17 12:43:31 作者:采采

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内存泄漏定位的理解。欢迎大家积极讨论,共同学习成长~

内存 CDS jstat JVM

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。