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

目录

深刻JVM 原理(一)Java内存模型:http://www.noobyard.com/article/p-vcuxafar-mx.html
深刻JVM原理(二)Java对象访问模式:http://www.noobyard.com/article/p-kshslmnp-ma.html
深刻JVM原理(三)JVM 垃圾收集:http://www.noobyard.com/article/p-ztnmzyos-kr.html
深刻JVM原理(四)JVM垃圾回收流程:http://www.noobyard.com/article/p-anmqpmkm-cy.html
深刻JVM原理(五)Java堆内存调整参数(调优关键):http://www.noobyard.com/article/p-eltveokx-mg.html
深刻JVM原理(六)年轻代:http://www.noobyard.com/article/p-atmiidnt-ks.html
深刻JVM原理(七)老年代、永久代和元空间:http://www.noobyard.com/article/p-vaxbmhqe-ea.html
深刻JVM原理(八)JVM垃圾回收策略:http://www.noobyard.com/article/p-adodzhii-ds.html
深刻JVM原理(九)JVM垃圾回收策略参数配置:http://www.noobyard.com/article/p-yopfenvx-mg.html
深刻JVM原理(十)G1收集器:http://www.noobyard.com/article/p-olmrbdgd-mw.html
深刻JVM原理(十一)Java引用类型:http://www.noobyard.com/article/p-hsennvkb-ks.htmljava

咱们已经知道了java内存模型,而只靠内存模型,没法进行调优,由于jvm中充满了各类算法,其中就包括了java对象访问模式。算法

Java的引用类型是最为重要的数据处理模型,而整个的数据引用类型数据处理之中会牵扯到:堆内存、栈内存、方法区。服务器

以一个最简但的程序代码为主: 
“Object obj = new Object()”,实例化了一个Object类对象。 
“Object obj”:描述的是保存在栈内存之中,而保存有堆内存的引用,这个数据会保存在本地变量表中; 
“new Obect()”:一个真正的对象。保存在堆内存之中;jvm

直观的思路整个引用的操做: 
1. 新定义的对象的名称保存在本地变量表, 
2. 然后在这块区域里面须要肯定好与之对应的栈内存; 
3. 经过变量表中的栈地址能够找到堆内存。 
4. 利用堆内存的对象进行本地方法的调用(方法区);ui

对于全部引用数据类型的访问实际是有两种模式的。.net

这里写图片描述

而java中是没有句柄的,但这种模式的准确度很高,但过程较为繁琐。 
因此,java中直接利用的对象保存模式,也就是说堆内存中,不须要保存句柄,而直接保存具体的对象。就至关于省略了句柄到对象之间的查找。然后这个对象能够直接进行Java方法区的调用。 
这里写图片描述设计

当今在实际上有三种JVM:3d

  1. SUN 公司最先改良的HotSpot;
  2. BEA 公司的: JRockit; (最初三个SUN公司的老员工创立)
  3. IBM的JVM’S;

而Oracle在收购SUN 和 BEA 两件公司以后,获得了两个虚拟机的版本。便将其合二为一,在JDK 1.8 开始,HotSpot和JRockit二者结合成如今的HotSpot;server

范例:取得当前的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的启动有两种模式: 
一、“-server”:服务器模式,占用的内存大、启动速度慢,默认模式 
二、“-client”:本地单机运行模式,启动速度快

查询启动模式: 
打开jdk\jre\lib\amd64\jvm.cfg文件。

-client KNOWN 
-server KNOWN

对象的引用数据类型在HotSpot中都是直接进行的引用处理,没有句柄池的概念。由于它能更快的进行对对象的操做。


未完待续