错误:can't determine target's VM version

Java 8

Eclipse Version: 2021-03 (4.19.0)

---

使用Eclipse启动了一个Spring Boot项目,在使用 j*(jstat jmap jinfo...)命令调试时,出现了下面的异常:

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)

查看了一些文档,可能原因有:

1、JDK版本不对

命令 和 运行程序 使用的 JDK版本不对

2、还是版本不对,不过,是JDK8 和 JDK9 不匹配

3、缺少Debug相关的软件环境

openjdk-8-dbg 参考文档5

检查了自己的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:eclipse21pluginsorg.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 。

参考文档

1、使用jinfo出现“can't determine target's VM version”问题解决方法

2、jvm(四)——JVM自带内存分析工具详解

3、一个jinfo使用问题的解决 can’t determine target’s VM version

4、JRE和JDK的区别是什么?

5、如何解决Linux环境下使用jinfo命令和jmap命令时出现的异常

6、java jdb 命令行调试程序

7、

原文地址:https://www.cnblogs.com/luo630/p/15102273.html