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”问题解决方法
三、一个jinfo使用问题的解决 can’t determine target’s VM version
五、如何解决Linux环境下使用jinfo命令和jmap命令时出现的异常
七、