JVM与Java体系结构

-  JVM整体结构(上图主要针对hotspot虚拟机) - 类加载器: 
    - 将字节码文件加载进去,并不一定是java字节码文件,很多语言都会编译成字节码文件使用JVM
 
- 运行时数据区: 
    - 方法区和堆:使用了同一种颜色,这俩对所有线程共享
- java栈、本地方法区、PC计数器:每个线程独有一份
 
- 执行引擎: 
    - 解释器:用于解释运行
- JIT及时编译器:编译器的后端(相较,编译成字节码文件的那个编译器成为编译器的前端),字节码指令翻译成机器指令。
- 垃圾回收器
 
 
- 类加载器: 
    
-  Java代码执行流程 

-  JVM架构模式: - Java编译器输入的指令流基本是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 
    - 基于栈式架构的特点:跨平台性、指令集小、指令多;执行性能比寄存器差 
      - 设计简单,适用于资源受限的系统
- 避开了寄存器的分配难题:使用零地址指令
- 指令中大部分是零地址指令,器执行过程依赖于操作栈。指令集更小(8位),编译器容易实现
- 不需要硬件支持,可移植性更好,可跨平台
 
- 基于寄存器架构的特点: 性能更好,但是和硬件耦合度高,指令集大 
      - 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
- 指令集架构则完全依赖硬件,可移植性差
- 性能优秀和执行更高效
- 花费更少的指令完成一项操作(不需要频繁的出入栈)
- 更大的指令集,更多的指令,一般都为一地址或多地址指令
 
 
- 基于栈式架构的特点:跨平台性、指令集小、指令多;执行性能比寄存器差 
      
 
- Java编译器输入的指令流基本是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构 
    
-  JVM生命周期: - 启动: 
    - 启动是由引导类加载器(bootstrap class loader)创建的一个初始类完成,类是由虚拟机的具体实现(规范)指定的。
 
- 执行: 
    - 执行java程序是他的任务
- 程序开始执行时他才运行,程序结束他就停止
- 执行一个所谓的java程序时,真正执行的是一个叫做java虚拟机的进程
 
- 退出: 
    - 正常结束
- 异常终止
- 操作系统错误导致退出
- 某线程调用exit方法
 
 
- 启动: 
    



















