002. 深入JVM学习—JVM对象访问模式

痴心易碎 提交于 2019-11-27 01:07:24

1. Object obj = new Object(); 分析


  1. Object obj:描述的是保存在栈内存之中,而后保存有堆内存的引用,这个数据会保存在本地变量表中(变量表描述有哪些对象,保存对象栈的位置,栈对应着堆内存地址,所以这也是java变量不允许重名的原因)

  2. new Object():一个真正的对象,保存在堆内存之中。

  3. 直观操作

    • 新定义的对象名称保存到本地变量表中,而后在这块区域中需要确定与之对应的栈内存空间。
    • 通过变量表中的栈地址可以找到堆内存。
    • 利用堆内存的对象进行本地方法的调用(方法区)。

2. 访问引用类型数据的模式


  1. 通过句柄访问(连接最稳定)

    句柄访问

  2. Java通过直接指针访问——HotSpot虚拟机

    • Java中使用的是对象保存模式,也就是说堆内存中不需要保存句柄,而直接保存具体的对象。省略了句柄到对象间的查找。而后这个对象可以直接进行Java方法区的调用。

    Java运行流程图

3. JVM历史简介


  1. 三种JVM

    • SUN公司最早改良的HotSpot
    • BEA公司的JRockit
    • IBM JVM's
  2. Oracle收购了SUN和BEA之后,得到了业内的两个虚拟机版本。

4. 范例


  1. 取得当前的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:所谓的混合模式就是适合于编译和执行。
  2. 使用纯解释模式启动

    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)
    
  3. 使用纯编译模式启动

    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中都是直接进行的引用处理,没有句柄池的概念。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!