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

目录

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

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


未完待续

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SokachWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值