欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

JVM相当于 劳务派遣信息管理系统 服务端

点击: 次  来源:劳务派遣管理系统 时间:2018-01-18

原文出处: 占小狼

当处事产生GC问题时,一般会利用jmap东西举办阐明,jmap东西很强大,所以有须要相识它的方方面面。

jmap可以做什么?

1、jmap -histo[:live] <pid>

通过histo选项,打印当前java堆中各个工具的数量、巨细。
假如添加了live,只会打印活泼的工具。

JVM相当于 劳务调派信息打点系统 处事端

2、jmap -dump:[live,]format=b,file=<filename> <pid>

通过-dump选项,把java堆中的工具dump到当地文件,然后利用MAT举办阐明。
假如添加了live,昆山软件开发,昆山软件开发,只会dump活泼的工具。

3、jmap -heap <pid>

通过-heap选项,打印java堆的设置环境和利用环境,尚有利用的GC算法。

4、jmap -finalizerinfo <pid>

通过-finalizerinfo选项,打印那些正在期待执行finalize要领的工具。

5、jmap -permstat <pid>

通过-permstat选项,打印java堆永久代的信息,包罗class loader相关的信息,和interned Strings的信息。

jmap实现道理

通过jmap和jvm之间举办通信,有两种实现方法:attach 和 SA。

attach

attach方法,简朴来说就是客户端和处事端之间的通信,客户端发送请求,主要逻辑在处事端执行,jmap相当于客户端,JVM相当于处事端。

在JVM中,有一个叫”Attach Listener”的线程,专门认真监听attach的请求,并执行对应的操纵。

好比此刻执行”jmap -histo:live 5409″,一步一步的实现如下:

  1. 在Jmap.java类的main函数中,对参数举办理会。
  2. 理会出来参数中有“-histo:live”,则执行histo要领:
JVM相当于 劳务调派信息打点系统 处事端

attach要领成立了jmap历程和JVM之间的socket毗连,成立进程可以查察笨神的文章JVM Attach机制实现,后续基于该毗连举办通信。

因为呼吁行中添加了[:live]选项,这里的live参数是true。

再看看heapHisto要领

JVM相当于 劳务调派信息打点系统 处事端

executeCommand要领基于之前的socket毗连向JVM发送了一条”inspectheap”呼吁,虽然了,尚有参数。

虚拟机的”Attach Listener”线程当发明有新的呼吁时,就拿出来处理惩罚它。

呼吁和详细的函数对应干系如下:

JVM相当于 劳务调派信息打点系统 处事端

和”inspectheap”对应的是heap_inspection要领,实现如下:

JVM相当于 劳务调派信息打点系统 处事端

live_objects_only的值取决于请求中是否有”-live”,再jmap中,取决于是否有”:live”,所以不管是不是添加了”:live”,城市有STW进程,时间是非罢了。

在VM_GC_HeapInspection的doit要领中

JVM相当于 劳务调派信息打点系统 处事端

_full_gc的值就是live_objects_only,假如为true,大概会执行一次full gc,清空非活泼的工具,可是大概会因为GC locker,导致跳过本次的GC。

“jmap -dump”实现的道理和”jmap -histo”雷同,都是通过attach的方法实现,
attach API的实现方法是:

  1. 客户端毗连到方针JVM,向其发出一个雷同“inspectheap”呼吁;
  2. 方针JVM吸收到呼吁,执行JVM内相关函数,将收集到的功效以文本形式返回;
  3. 客户端吸收到返回的文本并将其显示出来;

SA

如果执行”jmap -heap 5409″,就不会利用attach方法实现了。