jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部

jvm 内存镜像

开发人员:Takipi会告诉您何时新代码在生产中中断– 了解更多

我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面,它使我们使用的库可以与我们的代码进行交互,而无需对其进行硬编码的知识。 但是我们对反射的使用仅限于在JVM中运行的Java和Scala代码。 如果我们可以使用反射不仅在运行时查看我们的代码,而且还查看JVM的代码怎么办? Java反射

当我们开始构建Takipi时 ,我们寻求一种有效地分析JVM堆内存以启用一些低级优化的方法,例如扫描托管堆块的地址空间。 我们遇到了许多有趣的工具和功能来检查JVM状态的各个方面,其中之一就是这样做的。

它是Java最强大,最底层的调试工具之一-Java Serviceability Agent 。 HotSpot JDK附带了这个功能强大的工具,使我们不仅可以查看堆中的Java对象,还可以查看组成JVM本身的内部C ++对象,这才是真正的魔力所在。

反射成分 。 当处理任何形式的反射以在运行时动态检查和修改对象时,需要两个基本要素。 第一个是要检查的对象的引用(或地址)。 第二个是对对象结构的描述,其中包括对象字段所在的偏移量及其类型信息。 如果支持动态方法调用,则该结构还将包含对类的方法表(例如vtable)的引用以及每个人期望的参数。

Java反射本身非常简单。 您将获得对目标对象的引用,就像对其他对象一样。 通过通用Object.getClass方法(最初从类的字节码加载)可以使用其字段和方法结构。 真正的问题是您如何反映JVM本身?

城堡的钥匙 。 足够令人惊奇的是,JVM通过一组公开导出的符号公开了其内部类型系统。 这些符号为Serviceability代理(或与此有关的任何其他代理)提供对内部JVM类系统的结构和地址的访问权限。 通过这些,可以检查最低级别的JVM内部工作的几乎所有方面,包括诸如原始堆地址,线程/堆栈地址和内部编译器状态之类的内容。

在行动中反思 。 为了了解各种可能性,您可以通过启动Serviceability Agent的HotSpot Debugger UI来查看其中的一些功能。 您可以通过使用sun.jvm.hotspot.HSDB作为主类参数启动sa-jdi.jar来完成此操作。 您将看到的功能与帮助支持JVM最强大的调试工具(例如jmap,jinfo和jstack)的功能相同。

汇丰银行

HSDB和它提供给目标JVM的某些极低级别的检查功能。

怎么做的 。 让我们仔细研究一下JVM如何实际提供这些功能。 这种方法的基础是由jvm库公开导出的gHotSpotVMStructs结构。 该结构公开了内部JVM类型系统以及我们可以从中开始反映的根对象的地址。 可以像通过JNI或JNA与任何公开导出的OS库符号动态链接一样访问该符号。

然后,问题就变成了如何解析gHotSpotVMStructs符号公开的地址中的数据? 如下表所示,JVM不仅公开其类型系统的地址和根地址,还公开了其他符号和值,这些符号和值为您提供了解析数据所需的值。 这些包括类描述符和类类中每个字段所在的二进制偏移量。

依赖行者

* jvm.dll暴露的符号的依赖项遍历屏幕截图

清单gHotSpotVMStructs结构指向类及其字段的列表。 每个类都提供一个字段列表。 对于每个字段,结构都提供其名称,类型以及其静态字段还是非静态字段。 如果它是静态字段,则该结构还将提供对其值的访问。 在静态对象类型字段的情况下,该结构将提供目标对象的地址。 此地址是一个根,我们可以从中开始反映内部JVM系统的特定组件。 这包括诸如编译器,线程或收集的堆系统之类的东西。

您可以在此处检出Serviceability代理用来解析Hotspot JDK代码中的结构的实际算法。

实际例子 。 现在,我们对这些功能可以做什么有了一个广泛的了解,让我们看一下此接口公开的数据类型的一些具体示例。 构建SA代理的人员在围绕gHotSpotVMStructs表提供的大多数类创建Java包装程序时遇到了很多麻烦。 它们提供了一种非常干净和简单的API,以既安全类型又隐藏访问和解析数据所需的大多数二进制工作的方式访问内部系统的大部分。

为了让您大致了解此API提供的一些强大功能,以下是对它提供的低级类的一些引用-

VM是单例类,它公开了许多JVM的内部系统,例如线程系统,内存管理和收集功能。 它是许多JVM子系统的切入点,并且是探索此API的良好起点。

JavaThread让您从内部了解JVM如何从内部看到Java线程,并深入了解框架位置和类型(编译,解释,本机…)以及实际本机堆栈和CPU寄存器信息。

CollectedHeap使您可以浏览收集到的堆的原始内容。 由于HotSpot包含多个GC实现,因此这是一个抽象类,具体的实现(例如ParallelScavengeHeap)从该抽象类继承。 每个提供一组内存区域,其中包含Java对象所在的实际地址。

当您查看每个类的实现时,您会发现它实际上只是一个硬编码包装器,使用类似于反射的API来查看JVM的内存。

C ++中的反射 。 这些Java包装器中的每一个都被设计为JVM中内部C ++类的几乎完整的镜像。 众所周知,C ++没有本机反射功能,这引发了如何创建该桥的问题。

答案在于JVM开发人员所做的非常独特的事情。 通过一系列C ++宏和大量艰苦的工作,HotSpot团队手动将数十个内部C ++类的字段结构映射并加载到全局gHotSpotVMStructs中。 这个过程使它们可用于从外部反射。 实际的字段偏移量值和布局是在JVM编译时生成的,有助于确保导出的结构与JVM的目标OS兼容。

进程外连接 。 Serviceability代理还有一个更强大的方面值得一看。 SA框架提供的最酷的功能之一是能够从进程外反映外部实时JVM。 这是通过将Serviceability代理作为操作系统级别的调试器附加到目标JVM来完成的。 由于这取决于操作系统,因此对于Linux,SA代理框架将利用gdb调试器连接。 对于Windows,它将使用winDbg(这意味着将需要Windows调试工具)。 调试器框架是可扩展的,这意味着可以通过扩展抽象DebuggerBase类来使用另一调试器 。

建立调试器连接后,会将gHotSpotVMStruct的返回地址值传递回调试器进程,该进程可以(借助OS)开始检查甚至修改目标JVM的内部对象系统。 HSDB正是通过这种方式,您可以连接和调试目标JVM(包括Java和JVM代码)。

HSDB接口

* HSDB的界面公开了SA代理反映目标JVM进程的能力

我希望这引起了您的兴趣。 从我个人的角度来看,该体系结构是我最喜欢的JVM之一。 在我看来,它的优雅和开放绝对令人赞叹。 当我们构建Takipi的一些实时编码部分时,这对我们也非常有帮助,因此对于设计它的优秀人员来说,这是一个很大的窍门。

参考: Mirror Mirror –来自Takipi博客的JCG合作伙伴 Tal Weiss在运行时使用反射在JVM内部进行查看 。

翻译自: https://www.javacodegeeks.com/2014/01/mirror-mirror-using-reflection-to-look-inside-the-jvm-at-run-time.html

jvm 内存镜像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 微信平台开发与应用 形成性考核 (2)

选择题 题目: 以下哪些功能是属于微信的? 题目: 认证过的订阅号的底部是否可以直接链接到外部链接? 题目: 下面哪些属于页面前端开发技术? 题目: 那种情况下的公众号可以申请微信支付&#xff1…

php微信小程序获取用户信息,微信小程序获取openid及用户信息的方法

本文主要介绍微信小程序如何获取openid及用户信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。1. 获取openid1.1 获取code调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid…

【渝粤题库】广东开放大学 服务标准化 形成性考核

​👉关注我,看答案👈 选择题 题目:以下关于本课程终考的描述正确的是? 题目:以下哪种方式能判断已发布的形考是否都做了? 题目:作为专业方向课,本课程最后的总成绩应该达到多少才不影…

谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!

有没有想过圣诞老人如何为世界各地的孩子们送上节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着每个孩子平均需要43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我会透露这个秘密…

php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本

$ttime();echo date("Y-m-d H:i:s",$t);第一个参数的格式分别表示:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"D - 星期几…

【渝粤题库】广东开放大学 物业财税管理基础 形成性考核

选择题 题目:企业将资金以购买债券、提供借款或商业信用等形式出借给其他单位,这是一种( )的财务关系。 题目:( )是指买卖双方成交后,在双方约定的未来某一特定的时日才交割的交易市…

【渝粤题库】广东开放大学 统计基础 形成性考核

选择题 题目: 对某城市工业企业未安装设备进行普查,总体单位是( )。 选择一项: 题目: 某地"国内生产总值”这一统计指标属于( )。 选择一项: 题目&…

java无符号 uuid,java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

package com.hongyuan.test;import java.security.messagedigest;import java.security.nosuchalgorithmexception;import java.util.random;import java.util.uuid;/** 杂项(无符号数转换,字符串补齐,md5,uuid,随机数)*/public class sundrytest {//转成…

【渝粤题库】广东开放大学 质量管理 形成性考核

​👉关注我,看答案👈 选择题 题目:可以通过哪些形式登陆学校的课程平台进行学习? 题目:以下关于课程勋章的说法,哪些是“正确”的? 题目:在“疑难解答区”发帖时,哪种类型…

play框架配置 拦截器_如何使用Play框架为https配置SSL证书

play框架配置 拦截器我花了几个小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 当我尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException&a…

【渝粤题库】陕西师范大学100141大学英语(三)作业 (专升本、高起本)

交际与对话 针对每个对话中未完成的部分有4个选项,请从A、B、C、D四个选项中选出正确选项。 a. What do you think of the speech given by Professor Smith? b. . But I’m not particularly interested in the topic. A. Let me think about it. B. Not bad. C.…

webmin升级php,Webmin php-lib.pl修改

我已经将PHP版本更新到5.5.26。使用PHP 5.4,我使用FCGI的Apache配置是:AddHandler fcgid-script .phpAddHandler fcgid-script .php5使用新版本的PHP我需要把其他配置工作:SetHandler fcgid-script没关系,它的工作。我的问题是与W…

【渝粤题库】陕西师范大学151211 税法与纳税会计 作业(专升本)

《税务与纳税会计》作业 一、单选题 以下关于纳税主体的表述中正确的是( )。 A. 纳税会计纳税主体和财务会计中的“会计主体”相同 B. 会计主体都是纳税主体 C. 纳税主体不一定是会计主体 D. 纳税主体一定是会计主体 下列项目中属于纳税人权利的是&…

java代码上传exel,excle上传服务器并解析!求excel上传到服务器的java代码

如何将数据上传给服务器医嘱以形式发送过来? 办法有很多,最简单的,就是在机器里,建立2个数据库A,B,假如A是外务器。 在数据库中,以A数据库做发布,让B数据库订阅,弄好以后&#xff0c…

Java中的Fork / Join框架的简要概述

Fork / Join框架是使用并发分治法解决问题的框架。 引入它们是为了补充现有的并发API。 在介绍它们之前,现有的ExecutorService实现是运行异步任务的流行选择,但是当任务同质且独立时,它们会发挥最佳作用。 运行依赖的任务并使用这些实现来组…

【渝粤题库】陕西师范大学163106旅游心理学 作业【专升本】

陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 《旅游心理学》作业 一、单选题 1、旅游心理学是心理学的一个分支学科,这句话正确与否?( &#x…

【渝粤题库】陕西师范大学164204 供应链与物流管理 作业

《供应链与物流管理》作业 一、单选题 1、是围绕核心企业,通过对信息流、物流、资金流的控制,从采购原材料开始,制成中间产品以及最终产品,最后由销售网络把产品送到消费者手中的将供应商、制造商、分销商、零售商、直到最终用户…

matlab 球坐标绘图,MATLAB绘制地图

1使用向量绘制地图1.1绘制全球海岸线向量数据可以表示一个地图。这种向量存在的形式是一系列的经纬度或投影坐标对,它们代表一个点集、一个线条或者多边形。例如,描绘出行政区域边界的点、公路系统、城市的中心或者以上三个集合放在一起,都可…

【渝粤题库】陕西师范大学165210 国际人力资源管理 作业(专升本)

一、【单项选择题】 1.以下属于道林观点的是( ) A.更多的事物 B.更复杂的管理 C.考虑更多的人力资源因素 D.存在高瞻远瞩的考虑、较大的范围与活动等差异 2.管理人员母国化策略属于( ) A.本国中心模式 B.多中心模式 C.全能模式 D.…

【渝粤题库】陕西师范大学200371 拓扑学 作业 (专升本、高起本)

《拓扑学》作业 单项选择 1.关于笛卡儿积,下面等式成立的是 (A) (B) (C) (D)当且仅当 2.设是映射,,,则下面结论…