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

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


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

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

  3. 直观操做3d

    • 新定义的对象名称保存到本地变量表中,然后在这块区域中须要肯定与之对应的栈内存空间。
    • 经过变量表中的栈地址能够找到堆内存。
    • 利用堆内存的对象进行本地方法的调用(方法区)。

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


  1. 经过句柄访问(链接最稳定)指针

    句柄访问

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

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

    Java运行流程图

3. JVM历史简介


  1. 三种JVM对象

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

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

    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中都是直接进行的引用处理,没有句柄池的概念。
相关文章
相关标签/搜索