錯誤:can't determine target's VM version

Java 8html

Eclipse Version: 2021-03 (4.19.0)java

---eclipse

 

使用Eclipse啓動了一個Spring Boot項目,在使用 j*(jstat jmap jinfo...)命令調試時,出現了下面的異常:jvm

Attaching to process ID 1872, please wait...
Error attaching to process: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
sun.jvm.hotspot.debugger.DebuggerException: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
        at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:435)

 

查看了一些文檔,可能緣由有:ide

一、JDK版本不對工具

命令 和 運行程序 使用的 JDK版本不對學習

二、仍是版本不對,不過,是JDK8 和 JDK9 不匹配fetch

三、缺乏Debug相關的軟件環境ui

openjdk-8-dbg 參考文檔5spa

 

檢查了本身的JDK命令版本:

>java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

 

再檢查Eclipse中項目啓動使用的JDK:

Eclipse的plugins下面的jre

 

喲!果真和我環境中配置的不同啊!

 

疑問:

難道這個版本的Eclipse安裝的時候有本身的JDK了?

除了使用JDK8,是否是還能夠選擇 更高版本的Java來建項目呢?

是否是不須要本身在Windows安裝JDK,也可使用 Eclipse來作Java項目了?

 

解決辦法:

更改Eclipse中項目使用的JDK版本(JDK、或 JRE 都行)。

 

修改後,再次啓動項目,再次使用 j* 命令,結果正常

- jps、jinfo

- jmap

- jstat

- jstack

 

合理使用 j* 命令,能夠提升Java程序的 故障分析效率,也能夠提高 Java底層和高級知識學習的能力。

這些命令存在於 JDK的bin目錄下,還有好多好多,另外兩個經常使用的就是 jconsole、jvisualvm.exe。

 

探索Eclipse的內置JRE

D:\eclipse21\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.2.v20210201-0955 目錄

其中 fragment.properties 的部份內容以下:

providerName = Eclipse JustJ
pluginName = JustJ OpenJDK Hotspot JRE Complete for Windows x86 64 bit

看來是一個 基於 OpenJDK 給Windows使用的 JRE 。

 

參考文檔

一、使用jinfo出現「can't determine target's VM version」問題解決方法

二、jvm(四)——JVM自帶內存分析工具詳解

三、一個jinfo使用問題的解決 can’t determine target’s VM version

四、JRE和JDK的區別是什麼?

五、如何解決Linux環境下使用jinfo命令和jmap命令時出現的異常

六、java jdb 命令行調試程序

七、

相關文章
相關標籤/搜索