HotSpot运行时

vm的概览
    HotSpot有3个主要组件:vm运行时、JIT编译器以及内存管理器。
  vm运行时环境担当许多职责,包括命令行的选项解析、vm生命周期管理,类加载、字节码
  解释、异常处理、同步、线程管理、本地接口、vm致命错误处理和c++(非java)堆管理
命令行选项
    vm运行时系统解析命令行选项、并据此配置HOTSpotVM。 其中一些选项供HotSpotvm启动时
例如指定那个JIT编译器、选择何种垃圾收集器等,还有一些经启动器处理后传给启动的
HotSpot vm,例如指定java堆大小。
命令行选项主要有3类:标准选项、非标准选项和非稳定选项。非标准选项以-X为前缀,不保证
也不要求所有的JVM实现。非稳定选项以-XX为前缀,通常是为了特定需要而对jvm的运行进行校正
并且可能需要有系统的访问权限。
vm生命周期管理
    vm运行时负责启动和停止hotspot vm。
启动Hotspot vm的组件是启动器。HotSpot VM有若干个启动器。linux最常用的是java,
windows 最长用的是javaws。也可以通过JNI接口JNI_ CreateJavaVN启动内嵌的jvm。
启动器启动hotspot vm时会执行一系列的操作
    1.解析命令行选项。
  启动器会直接处理一些命令行选项,例如-client或-server,它们决定加载哪个JIT
  编译器,其他参数则传给HotSpot VM。
    2.设置堆的大小和JIT编译器
        如果命令行没有明确指出设置堆的大小和jit编译器,启动器则通过自动优化进行设置。
    3.设置环境变量例如classpath
    4.如果是命令行有-jar选项,启动器则从指定jar的mainfest中查找Main-Class,否则
        从命令行读取main-class。
    5.使用标准的java本地接口(JNI)方法JNI_createJavaVm在新创建的线程中创建HOTSpot
   与后创建的线程相比,初始线程是启动新进程时操作系统内核分配的第一个线程,而新建
hotspot vm进程中运行的初始线程也是同样的道理。
    6.一旦创建并初始化好HotSpot Vm 就会加载Java Main-Class,启动器也会从javaMain-class
   中得到参数。
    7.hotspot vm 通过jni方法CallStaticVoidMeThod调用java Main-Class,启动器也会从javaMain-class
   并将命令行选项传给它。

猜你喜欢

转载自blog.csdn.net/yl_hahha/article/details/80316160