JVM学习之对象访问模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34560242/article/details/80999496

Java对象访问模式

一、引用数据类型

Java的引用数据类型是最为重要的数据处理模型,而整个的引用数据类型处理数据的时候会牵扯到:堆内存、栈内存、方法区。

以一个最简单的程序为主:实例化一个Object类对象

Object obj = new Object();
  • “Object obj”:描述的是在栈内存之中,保存的有堆内存的引用。严格来说,这个数据会保存在本地变量表中。
    表中会描述到底有哪个对象,这个对象对应是哪个栈内存,栈内存以对应某个堆内存,这也是为什么Java中变量名不允许重名的原因。如果变量表重名了,就无法准确定位对象了。
  • “new Object()”:一个真正的保存在堆内存中的对象。

直观思路下的引用操作:

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

对于引用数据类型的访问实际上有两种模式:

  • 1、通过句柄访问
    • 先确定对象位置,再通过对象找到类型,再通过类型找到操作方法。
    • 好处:连接稳定,能保证对象真实存在,都会执行操作。
      这里写图片描述
  • 2、直接通过指针访问(Java中目前使用的模式)
    • 堆内存里面不再需要保存句柄,而直接保存具体的对象。相当于省略了句柄到对象间的查找,而后这个对象可以直接进行Java方法区的调用。
    • 好处:更高效。
      这里写图片描述

总结:引用数据类型在HotSpot中都是直接进行的引用处理,没有句柄概念。

二、HotSpot虚拟机模式

  • 1、混合模式

    $ java -version
    
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
  • 2、纯解释模式

    $ java -Xint -version
    
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, interpreted mode)
  • 2、纯编译模式

    $ java -Xcomp -version
    
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, compiled mode)

实际上现在的JDK的设计都已经开始为服务器而准备了。JVM启动有两种模式:

  • “-server”:服务器模式,占用内存大、启动速度慢,默认启动模式。
  • “-client”:本地单机运行程序模式,启动速度快。

找到JDK安装目录找到此文件:C:\Program Files\Java\jdk1.8.0_131\jre\lib\amd64\jvm.cfg 可以看到

-server KNOWN
-client IGNORE

想要使用 -client 模式除更改jvm.cfg文件外,还要创建一个与之对应的配置文件夹,参照默认的 -server 模式:
C:\Program Files\Java\jdk1.8.0_131\jre\bin\server,此文件夹下有三个文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章