深入JVM 原理(二)Java对象访问模式

目录

深入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:

  1. SUN 公司最早改良的HotSpot;
  2. BEA 公司的: JRockit; (最初三个SUN公司的老员工创立)
  3. 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中都是直接进行的引用处理,没有句柄池的概念。因为它能更快的进行对对象的操作。


未完待续

猜你喜欢

转载自blog.csdn.net/qq_39827935/article/details/81285038