您的位置:首页 > 编程语言 > Java开发

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

2018-02-07 14:44 197 查看

目录

深入JVM 原理(一)Java内存模型:http://blog.csdn.net/qq_34707744/article/details/79278169

深入JVM原理(二)Java对象访问模式: http://blog.csdn.net/qq_34707744/article/details/79279979

深入JVM原理(三)JVM 垃圾收集:http://blog.csdn.net/qq_34707744/article/details/79281249

深入JVM原理(四)JVM垃圾回收流程:http://blog.csdn.net/qq_34707744/article/details/79281852

深入JVM原理(五)Java堆内存调整参数(调优关键):http://blog.csdn.net/qq_34707744/article/details/79287403

深入JVM原理(六)年轻代:http://blog.csdn.net/qq_34707744/article/details/79287900

深入JVM原理(七)老年代、永久代和元空间:http://blog.csdn.net/qq_34707744/article/details/79288787

深入JVM原理(八)JVM垃圾回收策略:http://blog.csdn.net/qq_34707744/article/details/79289110

深入JVM原理(九)JVM垃圾回收策略参数配置:http://blog.csdn.net/qq_34707744/article/details/79289556

深入JVM原理(十)G1收集器:http://blog.csdn.net/qq_34707744/article/details/79290595

深入JVM原理(十一)Java引用类型:http://blog.csdn.net/qq_34707744/article/details/79291451

我们已经知道了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中都是直接进行的引用处理,没有句柄池的概念。因为它能更快的进行对对象的操作。

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JVM虚拟机