成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM:有些內部信息我悄悄告訴你

云計算 虛擬化
對于 Java 的反射使用, 一般用戶都有所了解。特別是在開源框架里更是大量的使用。通過反射,我們能拿到一個Java Class 的信息。

[[361071]]

對于 Java 的反射使用, 一般用戶都有所了解。特別是在開源框架里更是大量的使用。通過反射,我們能拿到一個Java Class 的信息。那對于 JVM 的內部信息,像堆的使用情況、線程、甚至是創建對象的內存地址、加載的類的內容,該怎么辦呢?

其實在 JVM內,有許多內部的信息,比如上面提到的那些,就類似于生活中的內部消息一樣。你可以想像一些大型應用,一些用戶的數據我們只能通過 API 授權的方式拿到,普通用戶正常使用的時候,是不可能獲取到這些內容的。就像做為運行在 JVM 上的普通 Java應用,也很難拿到 JVM 的信息,畢竟 JVM 更底層,是C++ 開發的。

JVM 會把這些內部信息告訴咱們嗎?

JVM 提供了一些對外的接口,把它的內部信息披露了出來。通過這些接口SA 才得以訪問到 JVM 內部類的結構和地址,也才能從底層觀察到 JVM內部運行的細節。

你看在SA 圖形界面的HSDB內部,長長的菜單列表,大多都是通過普通Java 應用獲取不到的「內部信息」。

 

這些都是怎么實現的呢?說到這兒,就不得不提 gHotSpotVMStructs。

JVM 給提供的那些接口,核心是 gHotSpotVMStructs 這個結構。它對外暴露了JVM內部的大量信息,像原始的堆的地址,線程、棧的地址等等。

gHotSpotVMStructs結構指向了很多類以及這些類的字段信息。每個類都有一系列的字段,每個字段又有自己的名字,類型,是否靜態等等。如果是靜態字段這個結構還可以用來訪問它的值。對于一個靜態的對象字段,這個結構體還會提供目標對象的地址。通過這個根地址我們可以開始反查JVM內部的一些組件,包括編譯器,線程還有堆。

所以要獲取和理解JVM 這些內部信息的關鍵,是在如何解析這個gHotSpotVMStructs 結構里面的數據。JVM不僅暴露了它的內部類型系統的地址和根對象地址,還有用以解析這些數據的一些額外的符號和值。這包含類描述信息和每個字段在這個類里的偏移量,此外 JVM開發者又做了一系列的工作,手動把JVM內部的C++類的字段映射并加載到了全局的gHotSpotVMStructs結構里。

SA 就是解析這些信息最好的例子。通過圖形界面我們能直觀感受到解析這些信息了解到了什么,通過翻譯 gHotSpotVMStructs暴露出的這些信息,生成Java的包裝類。通過這些包裝類提供出來的接口讓訪問JVM內部系統的工作變的簡單和方便,和普通的Java 應用使用API 類似,解決了訪問和解析內部數據的煩惱。

甚至其它的一些調試工具,診斷工具也是基于這些信息來實現的。

通過我們使用SA的方式,其實是通過一個「ptrace」的系統調用,掛起目標JVM 進程,開始讀取 gHotSpotVMStructs 這些內存信息。

看到上面的內容,我們大致理解了SA 的工作原理。那你如果有這樣的需求,是禁止別人通過 SA 等工具來獲取你JVM 的信息呢?

看,打哪兒指哪兒。答案就是重置gHotSpotVMStructs。這樣工具就不能解析出來這些信息了。

Stackoverflow 上有個解決方案,是編譯一個 agent,在啟動JVM 的時候掛上去,并將gHotSpotVMStructs 設置為0。

  1. extern void *gHotSpotVMStructs; 
  2.  
  3. int Agent_OnLoad(void *vm, char *options, void *reserved) { 
  4.     gHotSpotVMStructs = 0; 
  5.     return 0; 

啟動的時候,掛接到JVM上。

  1. java -agentpath:/path/to/libnostructs.so ... 

再去執行SA 這些工具的時候,就會拋出異常提示信息有問題

  1. Exception in thread "main" java.lang.reflect.InvocationTargetException 
  2.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
  3.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
  4.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
  5.         at java.lang.reflect.Method.invoke(Method.java:498) 
  6.         at sun.tools.jstack.JStack.runJStackTool(JStack.java:140) 
  7.         at sun.tools.jstack.JStack.main(JStack.java:106) 
  8. Caused by: java.lang.RuntimeException: gHotSpotVMStructs was not initialized properly in the remote process; can not continue 
  9.         at sun.jvm.hotspot.HotSpotTypeDataBase.readVMStructs(HotSpotTypeDataBase.java:418) 
  10.         at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:91) 
  11.         at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:395) 
  12.         at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305) 
  13.         at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140) 
  14.         at sun.jvm.hotspot.tools.Tool.start(Tool.java:185) 
  15.         at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118) 
  16.         at sun.jvm.hotspot.tools.JStack.main(JStack.java:92) 
  17.         ... 6 more 

本文轉載自微信公眾號「Tomcat那些事兒」,可以通過以下二維碼關注。轉載本文請聯系Tomcat那些事兒公眾號。

 

 

責任編輯:武曉燕 來源: Tomcat那些事兒
相關推薦

2020-06-16 09:55:52

數據庫MySQL技術

2020-04-30 11:11:30

MySQLMGR數據庫

2022-02-15 20:08:41

JDKJavaWindows

2015-02-11 09:37:14

2016-06-27 16:29:04

戴爾閃存

2015-06-25 17:28:44

免費代理網絡安全

2022-04-27 07:37:42

ReactReact18

2022-08-08 20:33:12

VolatileJVM

2020-10-13 14:57:20

網絡安全數據技術

2020-10-13 11:04:11

賬戶密碼個人隱私網絡安全

2024-04-09 09:08:09

Kafka消息架構

2024-11-08 08:34:59

RocketMQ5.Remoting通信

2022-04-29 08:00:36

web3區塊鏈比特幣

2016-12-28 14:51:46

大數據應用

2022-04-01 08:00:00

項目經理加薪技能

2025-07-01 02:18:00

if-elif 鏈通配符代碼

2019-11-11 08:45:52

HTTPTCP數據

2009-07-29 17:12:56

光纖入戶光纖桌面

2023-10-07 08:41:42

JavaJVM

2012-07-03 16:56:12

Hadoop
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品 欧美精品 | 在线观看视频福利 | 美国av毛片| 一区二区三区四区不卡 | 国产黄色大片网站 | 国产高清精品一区二区三区 | 欧美激情精品久久久久久变态 | 天天干夜夜操 | 亚洲精品视频一区二区三区 | 中文字幕av一区二区三区 | 亚洲精品在线看 | 色精品 | 一区二区在线免费观看 | 精品久久香蕉国产线看观看亚洲 | 一级黄色毛片 | 久久国产日本 | 亚洲成人999| 欧美精品久久久久久久久久 | 日韩精品一区二区三区在线播放 | 超黄视频网站 | 日韩在线一区二区三区 | 特级做a爰片毛片免费看108 | 国产精品日日夜夜 | 国产成人高清在线观看 | 香蕉视频在线播放 | 中文字幕在线视频一区二区三区 | 日韩久久久久 | 天堂视频免费 | 亚洲美乳中文字幕 | 久久久久久免费毛片精品 | 国产综合网站 | 精品一区二区三区在线播放 | 91成人影院| 91免费在线看 | 国产无套一区二区三区久久 | 日韩日b视频 | 国产一区二区三区在线 | 精品久久国产 | 亚洲精品久久久久中文字幕欢迎你 | 久久久久久网站 | 色吧综合|