1. Object obj = new Object(); 分析
-
Object obj:描述的是保存在栈内存之中,而后保存有堆内存的引用,这个数据会保存在本地变量表中(变量表描述有哪些对象,保存对象栈的位置,栈对应着堆内存地址,所以这也是java变量不允许重名的原因)
-
new Object():一个真正的对象,保存在堆内存之中。
-
直观操作
- 新定义的对象名称保存到本地变量表中,而后在这块区域中需要确定与之对应的栈内存空间。
- 通过变量表中的栈地址可以找到堆内存。
- 利用堆内存的对象进行本地方法的调用(方法区)。
2. 访问引用类型数据的模式
-
通过句柄访问(连接最稳定)
-
Java通过直接指针访问——HotSpot虚拟机
- Java中使用的是对象保存模式,也就是说堆内存中不需要保存句柄,而直接保存具体的对象。省略了句柄到对象间的查找。而后这个对象可以直接进行Java方法区的调用。
3. JVM历史简介
-
三种JVM
- SUN公司最早改良的HotSpot
- BEA公司的JRockit
- IBM JVM's
-
Oracle收购了SUN和BEA之后,得到了业内的两个虚拟机版本。
4. 范例
-
取得当前的JVM版本
java -version
java version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
- mixed mode:所谓的混合模式就是适合于编译和执行。
-
使用纯解释模式启动
java -Xint -version
java version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, interpreted mode)
-
使用纯编译模式启动
java -Xcomp -version
java version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, compiled mode)
5. 总结
- 引用数据类型在HotSpot中都是直接进行的引用处理,没有句柄池的概念。