總結一下運行<<深入理解Java 虛擬機>>書中的例子過程中遇到的問題。
環境準備
-
安裝JDK11
JDK 11下載地址
https://aws.amazon.com/cn/corretto/
點擊下載 Amazon Corretto 11
根據各自的平臺選擇相應的JDK,我是在win10上安裝,所以選擇的是Windowsx64
下載完成後安裝,安裝的過程比較簡單,不會的可以自行去網上查。 -
配置環境變量
新建JAVA_HOME環境變量,路徑爲JDK11安裝的根目錄
新建classpath環境變量,將路徑設置爲%JAVA_HOME%\lib
配置Path環境變量,新建一個環境變量將路徑設置爲%JAVA_HOME%\bin
- 編寫測試代碼
public class JHSDB_TestCase {
static class Test {
static ObjectHolder staticObj=new ObjectHolder();
ObjectHolder instanceObj=new ObjectHolder();
void foo() {
ObjectHolder objectHolder=new ObjectHolder();
System.out.println("done");
}
}
private static class ObjectHolder {
}
public static void main(String[] args) {
Test test=new JHSDB_TestCase.Test();
test.foo();
}
}
運行測試程序,使用jhsdb查看對象在堆中的分配
- 調試模式運行
配置JVM運行參數
運行程序提示 “無效的源發行版11”
修改Idea Project Structure中的Module SDK
再次debug運行測試程序
- 查看進程ID
運行 jps -l
- 使用jhsdb命令連接JVM進程
運行 jhsdb hsdb ---pid 23508 連接到JVM進程
提示不能確定我的JVM版本
- 查看JDK的版本
java -version
因爲的我的機器上安裝了多個JDK,雖然我配置的環境變量爲JDK11,但是程序使用的是JDK8,JDK11的環境變量沒有生效
解決辦法
- 查找java所在的目錄
運行 where java
從上圖中可以看出java.exe文件有三個,將JDK11中的java.exe替換ProgramData\Oracle\Java\javapath目錄下的java.exe
- 運行jps 查看進程ID
- 運行jhsdb
jhsdb hsdb --pid 28344
- 查看堆中的變量
選擇Tools->Heap Parameters,可以看到JVM堆新生代、老年代大小,已經使用及地址的範圍
未完待續
參考
https://www.cnblogs.com/blog-zy/p/9364159.html
<<深入理解Java虛擬機>>