总结一下运行<<深入理解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虚拟机>>