JVM学习之对象访问模式

6 篇文章 0 订阅

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,此文件夹下有三个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值