1.JVM体系结构

写在最前 JVM所有参数官方列表 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
资料参考 尚硅谷宋红康老师B站视频教程笔记整理 与 <<深入理解java虚拟机>>

JVM和Java体系结构

  1. JVM运行于操作系统之上,没有和硬件的直接交互,一次编译到处运行

  2. 方法区和堆在所有线程共享内存区域

  3. java栈,本地方法栈和程序计数器是线程私有的内存区域

  4. 方法区在JDK8中成为元空间Metaspace

  5. 方法区存在了虚拟机加载的类信息,常量,静态变量,即时编译器(JIT)编译后的代码

  6. 大致执行流程 .java文件->编译 .class字节码文件 -> 类状态子系统生成反射类存入方法区->运行时数据区->执行引擎->解释执行+编译执行JIT->操作系统

  7. 栈的指令集架构和寄存器架构

      • 设计实现简单 适用于资源受限的系统
      • 避开了寄存器的分配难题,使用零地址指令方式分配
      • 指令流中的指令大部分是零地址指令,其执行过程依赖操作栈,指令集更小,编译器容易实现
      • 不需要硬件支持,可移植性好,更好实现跨平台
    1. 寄存器 指令少 性能高
      • 典型的应用是x86二进制指令集 比如传统的PC和 Android的Davlik虚拟机
      • 指令集架构则完全依赖硬件,可移植性差
      • 性能优秀执行更高效
      • 花费更少的指令去完成一项操作
      • 在大部分情况下,基于寄存器架构的指令集往往都以一地址指令,二地址指令和三地址值指令为主,基于栈式架构的指令集则是以零地址质量为主
  8. 简单的反编译命令

    javap -v XXXX.class
    
  9. 由于跨平台的设计,java的指令都是根据栈来设计的。不同的平台CPU架构不同,所以不能使用基于寄存器来设计,优点是跨平台,指令集小,编译器容易实现,缺点在于性能下降,实现同样的功能需要更多的指令

JVM的生命周期

  1. 虚拟机的启动
    • java虚拟机启动是通过引导类加载器boostrap class loader创建一个初始类initial class 来完成,该类由虚拟机具体实现
  2. 虚拟机的执行
    • 一个运行的java虚拟机有清晰的任务执行java程序
    • 程序开始执行他才运行,程序结束他就停止
    • 真正执行的是java虚拟机的进程
  3. 虚拟机的退出
    • 程序正常执行结束
    • 程序在执行过程中遇到了异常或者错误 异常终止
    • 由于操作系统出现错误导致java虚拟机进程终止
    • 某线程调用Runtime类或者System类中的exit方法 或者Runtime#halt方法,并且java安全管理器也允许这次exit或者halt操作
    • JNI(Java Native Interface)规范描述了用JNI Inovcation API来装载和卸载java虚拟机,java虚拟机退出的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值