Java执行原理

jopen 10年前

先记录参考的文档,谢谢他们

 http://qing.blog.sina.com.cn/2494474521/94aea91933002vg2.html

http://www.importnew.com/1486.html 这个强烈推荐看


看个java文件编译和执行全程:

Java执行原理

虚拟机是一种通过模拟方式来实现物理计算机体系架构的软件。

Java虚拟机是保障Java程序能跨平台运行的虚拟计算机。

Java虚拟机规范是对异构硬件、多样os 的 抽象、是一种 软件层次的计算机体系架构的约定描述,你可以依照该规范实现自己的java虚拟机。

通常的物理计算机体系架构是经典的冯诺依曼,基于寄存器的计算架构,能执行有限的机器指令码

jvm有自己的指令系统,jvm是基于堆栈的计算架构

Java堆栈要求Java程序执行中的每个线程都有一个独立的堆栈,每个当前执行的方法是当前线程堆栈的一个片断(Frame)
, 最终还是jvm将自己的指令翻译为物理计算机的机器指令才能执行的


不直接写机器指令码是因为难懂难记难看难维护

□ JVM和其它任何虚拟机一样,都是完成资源的封装,从而提高资源的利用率和可管理性。 
□ JVM是Java平台体系的核心基础设施。Java语言编写的程序在JVM上被解释和执行。 
□ JVM在JSR-924中进行了规范,在JSR-202中维护更新。JVM规范使JVM的具体实现和建立在JVM之上的应用之间耦合性降低。
 □ JVM规范主要从Java字节码规范、基本的执行过程、JVM指令集和抽象架构四个层面进行描述。 
 □ JVM实现中的关键问题是内存管理和垃圾回收、JVM指令到机器指令翻译方法、多线程支持

Java虚拟机根据jvm规范将Java源程序编译为jvm操作指令的Java字节码,这种指令不是机器码指令

在装有jvm的机器上,运行Java程序实际是jvm加载编译好的java字节码文件,然后将字节码文件中的指令翻译为机器码执行。

Java执行原理


首先大概看一下JVM的抽象架构

Java执行原理

可以看出jvm进程占用的物理内存 主要分为 三大块:

1、类加载器      :从入口处开始按需加载字节码文件,填充这些数据到运行时数据区

2、运行时数据区:核心区,运行的时候操作所分配的内存区

3、执行引擎     :jvm的cpu,不断地取指令,JIT编译翻译,执行

外围

1、编译好的字节码文件,一般为.class

2、native功能库

java字节码.class 文件结构

Java执行原理

类加载器 怎么加载类文件的,jvm的类加载采用父类委托制,子加载器能查询父加载器已缓存类,反之不行。

Java执行原理

运行时数据区,公有:对象实例都在 heap里,方法区还包括常量池,

每个线程私有 程序计数器,jvm 栈 本地方法栈

Java执行原理

jvm栈中压入的是栈帧Frame这个frame包含了很多数据:局部变量、操作数栈、常用引用

除了pc计数器区 其他区都有可能产生oom,栈区还有可能stackoverflow

Java执行原理

执行引擎,将字节码即时编译 优化 为本地代码, 然后执行

Java执行原理




执行命令: java Test  背后到底做了什么

Java执行原理