目录
深入JVM 原理(一)Java内存模型:https://blog.csdn.net/qq_39827935/article/details/81285009
深入JVM原理(二)Java对象访问模式:https://blog.csdn.net/qq_39827935/article/details/81285038
深入JVM原理(三)JVM 垃圾收集:https://blog.csdn.net/qq_39827935/article/details/81285059
深入JVM原理(四)JVM垃圾回收流程:https://blog.csdn.net/qq_39827935/article/details/81285084
深入JVM原理(五)Java堆内存调整参数(调优关键):https://blog.csdn.net/qq_39827935/article/details/81285099
深入JVM原理(六)年轻代:https://blog.csdn.net/qq_39827935/article/details/81285115
深入JVM原理(七)老年代、永久代和元空间:https://blog.csdn.net/qq_39827935/article/details/81285133
深入JVM原理(八)JVM垃圾回收策略:https://blog.csdn.net/qq_39827935/article/details/81285156
深入JVM原理(九)JVM垃圾回收策略参数配置:https://blog.csdn.net/qq_39827935/article/details/81285175
深入JVM原理(十)G1收集器:https://blog.csdn.net/qq_39827935/article/details/81285207
深入JVM原理(十一)Java引用类型:https://blog.csdn.net/qq_39827935/article/details/81285227
我们已经知道了java内存模型,而只靠内存模型,无法进行调优,因为jvm中充满了各种算法,其中就包括了java对象访问模式。
Java的引用类型是最为重要的数据处理模型,而整个的数据引用类型数据处理之中会牵扯到:堆内存、栈内存、方法区。
以一个最简但的程序代码为主:
“Object obj = new Object()”,实例化了一个Object类对象。
“Object obj”:描述的是保存在栈内存之中,而保存有堆内存的引用,这个数据会保存在本地变量表中;
“new Obect()”:一个真正的对象。保存在堆内存之中;
直观的思路整个引用的操作:
1. 新定义的对象的名称保存在本地变量表,
2. 而后在这块区域里面需要确定好与之对应的栈内存;
3. 通过变量表中的栈地址可以找到堆内存。
4. 利用堆内存的对象进行本地方法的调用(方法区);
对于所有引用数据类型的访问实际是有两种模式的。
而java中是没有句柄的,但这种模式的准确度很高,但过程较为繁琐。
所以,java中直接利用的对象保存模式,也就是说堆内存中,不需要保存句柄,而直接保存具体的对象。就相当于省略了句柄到对象之间的查找。而后这个对象可以直接进行Java方法区的调用。
当今在实际上有三种JVM:
- SUN 公司最早改良的HotSpot;
- BEA 公司的: JRockit; (最初三个SUN公司的老员工创立)
- IBM的JVM’S;
而Oracle在收购SUN 和 BEA 两件公司之后,得到了两个虚拟机的版本。便将其合二为一,在JDK 1.8 开始,HotSpot和JRockit两者结合成现在的HotSpot;
范例:取得当前的JVM 版本(java -version)
java version “1.8.0_45”
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
mixed mode:混合模式:指适合于编译和执行。
范例:使用纯解释模式启动(java -Xint -version)’
java version “1.8.0_45”
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, interpreted mode)
interpreted mode:纯解释模式,不进行编译;
范例:使用纯编译模式启动(java -Xcomp -version)
java version “1.8.0_45”
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, compiled mode)
compiled mode:纯编译模式,不进行解释;
实际上现在JDK的设计都已经是开始为服务器准备的,因为对于JVM的启动有两种模式:
1、“-server”:服务器模式,占用的内存大、启动速度慢,默认模式
2、“-client”:本地单机运行模式,启动速度快
查询启动模式:
打开jdk\jre\lib\amd64\jvm.cfg文件。
-client KNOWN
-server KNOWN
对象的引用数据类型在HotSpot中都是直接进行的引用处理,没有句柄池的概念。因为它能更快的进行对对象的操作。
未完待续