深入理解JAVA虚拟机

  • 作者:新网
  • 来源:新网
  • 2018-05-11 15:05:00

对于Java,我们首先需要知道Java的体系结构,总体来说,它由4部分组成1、java程序设计语言:这就是我们通常编码时写的代码。2、java class文件:源码编译后的二进制字节码文件,后缀名。class的文件。3、java API:就是JDK中自带的。。。

   对于Java,我们首先需要知道Java的体系结构,总体来说,它由4部分组成1、java程序设计语言:这就是我们通常编码时写的代码。2、java class文件:源码编译后的二进制字节码文件,后缀名.class的文件。3、java API:就是JDK中自带的那些java代码,其介于开发人员编写的代码与底层操作系统资源之间的中间层。4、java虚拟机:用来装载class文件并且执行其中的字节码。

458PICJ58PICAga_1024.jpg

  一、Java虚拟机
  前面讲到,java虚拟机的主要任务就是加载class文件并且执行其中的字节码,其与Java API合在一起就是我们所谓的“Java 平台”,或者"Java运行时环境"。
  Java虚拟机主要由类装载器子系统和字节码执行引擎两部分组成。
  1、类装载器子系统,顾名思义,就是用来负责定位并加载class文件的,目前依据继承层次主要分为:启动类装载器(BootstrapClassLoader)、标准扩展类装载器(ExtClassLoader)、类路径类装载器(AppClassLoader,也叫系统类装载器)以及用户自定义类装载器。类装载器装载类时,都是在JVM第一次需要执行该类字节码时发生,即我们所谓的"延迟加载"机制。
  2、字节码执行引擎,即将Java字节码翻译为本地机器码的模块。目前执行引擎主要分为四类:
  (1) 一次性解释字节码:即为当JVM执行某段字节码时,由执行引擎将其翻译为本地机器码,当再次执
  行到该段字节码时,再次由执行引擎翻译为本地机器码。
  (2) JIT(即时编译器):在(1)的基础上,将翻译后的本地机器码缓存起来,当再次执行时,就不需要再次
  翻译了。当然,该种执行引擎会占用更多的内存。
  (3) 自适应优化器:JVM会监视所有字节码的执行频率,将那些常用的字节码所对应的本地机器码缓存
  起来。
  (4) 硬件芯片:由本地方法执行Java字节码,但是这些本地方法是被固化在芯片中。
  二、类装载器
  前面已经提到过,Java类装载器主要分为四种:启动类装载器(BootstrapClassLoader)、标准扩展类装载器(ExtClassLoader)、类路径类装载器(AppClassLoader,也叫系统类装载器)以及用户自定义类装载器。那么这四类不同的装载器区别是什么?这里先不赘述。
  但是这里比较重要的一点就是,JVM对不同的类装载器[对象]定义了不同的命名空间,而且不同命名空间里的类对象是彼此不可见的,不能彼此相互访问(除非应用程序显示地要求这么做)。那么这句话到底怎么理解呢?假如类装载器A(对象)装载了类Hello A,并且类装载器B(对象)也装载了类Hello B,那么其实对于这两个Hello类对象而言,他们并不知道对方的存在,更不能相互访问,因为他们属于两个不同的命名空间A和B。而且,对于JVM来说,这两个Hello类对象也是属于两个完全不同的类对象,因为对于JVM来说,只能由 类装载器[对象](命名空间)和类完全限定名 才能唯一标识一个类对象。
  另外,需要我们记住的一点就是,同时依然是上面一句话的延伸,即:类及该类所引用的其他类必然属于同一个命名空间,即该类所引用的其他类必然会被装载第一个类的装载器[对象]来装载。比如类Hello A被装载器A装载到了JVM中,但是该Hello A类同时引用了类Hello B,那么Hello B类也同时会被装载器A加载到JVM中,如此以来,Hello A和Hello B之间才能可见,才能相互访问。换句通俗话来讲,当被装载的类引用了另外一个类,那么JVM就会用装载第一个类的装载器[对象]来装载被引用的类。
  如此设计的类装载器模型,可以有效地防止不同代码间的相互侵占,相互破坏。
  三、Java Class文件
  在Java Class文件中,字节顺序是 高位在前 ,这 一点希望大家要谨记。
  四、Java API
  Java API的class文件天然就是与平台相关的,其处于Java程序与本地代码中间这一层,但是正是由于有了Java API这一层,才致使我们编写的Java代码是与平台无关的。
  同时,Java API中提供了安全性模型。安全管理器正是这样一个为应用程序提供自定义安全策略的对象,例如,安全管理器可以禁止对本地磁盘的非法访问。然后在Java1.2中,安全管理器被访问控制器所取代,该类用来执行栈检验,以决定是否准许某种操作。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@bitegraph.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

增值电信业务经营许可证:B1-20140435 京B2-20070152 域名注册服务批文号:信部电函[2005]263号 京ICP证000012

Copyright©1993-2019 北京新网数码信息技术有限公司 版权所有 

亦博彩票平台 人人发彩票平台 凤彩网彩票平台 波音彩票平台 平安彩票 亿菲彩票平台 500万彩票 平安彩票 五百万彩票 106彩票平台