深入JVM学习笔记 Java技术体系结构

1、不同Java虚拟机执行引擎的实现不同,大体可分为三种
  第一种最简单,就是直接一次性解释字节码。
  第二种更快,但更消耗内存,叫即时编译器(JIT)。在这种情况下,第一次执行的字节码会被编译成本地机器代码,并缓存起来,当方法以后被调用的时候重用。
  第三种是自适应优化器,在这种方法里虚拟机刚开始解释字节码,但会监视运行中程序的活动,记录下使用最频繁的代码段。程序运行的时候,只编译那些最频繁的代码段成本低代码,其他继续保留为字节码。
 
2、Java方法和本地方法
  Java方法是用Java编写的方法,而本地方法则是用其他语言(C、C++或者汇编语言)编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专有的。本地方法是连接Java程序和底层主机操作系统的连接方法。使用本地方法一般是在希望使用特定主机上资源,又无法从Java API访问,所以写一个与平台相关的Java程序来调用本地方法。
 
3、一个Java应用程序可以有两种类装载器
  启动类装载器(bootstrap)和用户定义的类装载器。启动类装载器(在系统中是唯一的)是Java虚拟机实现的一部分,会使用某种默认的方式从本地磁盘装载类,包括Java API的类。
 
4、Java Class
  平台无关性方面的任务:为Java程序提供独立于平台的二进制形式服务
  网络移动性方面的任务:class文件设计紧凑,因此可以快速的在网络上传送。其次由于Java程序是动态连接和动态扩展的,class文件可以在需要的时候才下载。
 
5、Java的安全模型
  沙箱:对能做什么不能做什么做出了严格的规定。例外:本地方法不受控制。当线程调用本地方法时,它就跳出了这个沙箱,所以调用本地方法时必须确认它是可信的。
  安全模型四大部分:类装载器体系结构、class文件检验器、Java内置安全特性、安全管理器
  前三个部分一起达到一个共同的目的:保持Java虚拟机的实例和它正在运行的应用程序的内部安全性,使得它们不被下载的有恶意的或者有漏洞的代码侵犯。
  第四部分主要用于保护虚拟机的外部资源不被虚拟机内运行的恶意的或者有漏洞的代码侵犯。它是单独的对象,在运行的虚拟机中,它在访问控制中——对外部资源的访问控制——中起中枢作用。
 
6、字节码和栈帧的理解
  字节码代表了Java的方法,它是由被称为操作码的单字节指令组成的序列,每一个操作码后都跟着一个或多个操作数。操作数用于在Java虚拟机执行操作码指令时提供所需的额外的数据。执行字节码时,依次执行每个操作码,这就是Java虚拟机内构成了执行的线程。每一个线程被授予自己的Java栈,这个栈是由不同的栈帧构成的。每一个方法调用将获得一个自己的栈帧——栈帧其实就是一个内存片断,其中存储着局部变量和计算的中间结果。在栈帧中,用于存储方法的中间结果的部分被称为该方法的操作数栈。操作码和它的(可选的)操作数可能指向存储在操作数栈中的数据,或存储在方法栈帧中的局部变量中的数据。这样,在执行一个操作码时,除了可以使用紧随其后的操作数,虚拟机还可以使用操作数栈中的数据,或局部变量中的数据,或者两者都用。
 
7、Java的动态连接和动态扩展
  动态连接是指加载类的时候,只有到需要用到的时候JVM才去加载它,有一点类似于lazy-load。
  动态扩展是装载class的另一种方式(可能从网络上下载它们),可以延迟到Java程序运行时才装载。

你可能感兴趣的:(虚拟机)