句柄、直接指针
很多语言中都存在一个句柄的概念,这个概念的产生主要是在引用数据类型上,比如下面一段代码:
Object obj=new Object();
这段代码可以按照两个部分考虑
- “Object obj” 声明对象,此处表示的是一个本地引用,那么这个本地的引用一定会本身保留一个堆内存的地址,还会包含一个本地变量表的概念,也就是说,引用类型通过本地变量表才能找到一个堆内存的引用数据
- obj=new Object(); 实例化对象, 实例化对象就会开辟堆内存空间。
在进行引用设计的过程中,有两种途径
通过句柄访问
当发现需要的是一个引用类型,它会通过一个“对象实例的数据指针”找到一个“对象实例数据”,但是数据本身只是描述对象里的内容,它还需要一个“对象类型数据指针”去找到一个“对象类型数据”。
也就是说,数据和数据的类型是怎么存放的?通过不同的指针来进行不同的引用,这就是通过句柄访问。像C++就是通过句柄访问
直接指针访问
当发现需要的是一个引用类型,会指向“对象实例数据”,在“对象实例数据”中本身就包含了“对象类型数据指针”。不同于句柄,Java直接找的就是数据,当需要操作数据时再根据“数据类型指针”找方法区的“对象类型数据”
虚拟机规范
以上所见的是HotSpot虚拟机本身实现的引用类型的访问机制,但是对于Java虚拟机存在三种规范:
SUN公司出了一套虚拟的标准HotSpot。后来,SUN发展到90年代末的时候,有三位工程师出来了,他们创造了一个当时电子商务最伟大的神话BEA,BEA也有一套自己的虚拟机标准JRockit。
最后,Oracle将SUN和BEA都收购了,成为目前拥有虚拟机标准最多的公司,是最权威的。
IBM也拥有一套虚拟机规范JVM’s(别名J9)。
我们使用的虚拟机版本,可以使用java -version命令查看
C:\Users\John>java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
虚拟机模式
mixed mode:当前虚拟机采用的是混合模式(“解释与编译”)。该模式中编译是指在JVM运行时候编译处理,不是简单的*.java–>*.class转换那么容易。里面包含一个JIT(Just Is Time即时编译),当JVM启动时,只是对类文件做了一个加载,真正编译执行时是在JVM执行过程中动态完成的。
当然,也可以改变为非mixed模式,只需要追加一些参数:
例子 将Java程序转换为纯解释的模式
C:\Users\John>java -Xint -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, interpreted mode)
例子 将Java程序转换为纯编译的模式
C:\Users\John>java -Xcomp -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, compiled mode)
模式切换,对于我们意义不大,上面切换只是针对于HotSpot进行了一个简单扩展。可是真正核心问题在于JVM要以什么样的方式执行的问题。
运行的形式
JVM运行有两种启动模式:
- client:本地的客户端程序,单机版程序,占内存小启动快
- server:服务器模式,启动速度较慢,占用内存较大。
对于服务端,一定要将JVM运行模式设定好。实际上,已经不需要再去设定了。如果想要确定当前的JVM所采用的运行模式可以直接打开一个配置文件:
JDK的安装目录,找到JRE中的jvm.cfg文件,里面有两行配置
-server KNOWN
-client IGNORE
默认启动的是server模式已知启动的。
现在的Java开发已经不去考虑图形化界面,这一原则其实在现在的JVM上也是有所体现。
总结
JVM默认的运行模式:
- HotSpot虚拟机采用了混合模式来运行
- 运行的形式是server模式,该模式占用的内存大,启动的速度慢,处理的效率最高。
来源:CSDN
作者:CSDNo.1
链接:https://blog.csdn.net/weixin_44778952/article/details/103778665