• JVM学习笔记:JVM的体系结构与JVM的生命周期


    1 JVM在java平台中的位置

    1.1 Java平台组成

    Java平台主要由Java虚拟机和Java API这两部分组成。参考Oracle官网


    1.2 java平台结构图

    JDK1.2开始,迫于Java运行始终笔C++慢的压力,JVM的结构也慢慢发生了一些变化,JVM在某些场景下可以操作一定的硬件平台,一些核心的Java库甚至也可以操作底层的硬件平台,从而大大提升了Java的执行效率。JDK1.2之后的整个java平台如下图所示:

    1.3 JVM与JRE、JDK的关系

    参照Oracle官网的介绍可知,JVM与JRE、JDK的关系如下:

    JVM:负责执行符合规范的Class文件。

    JRE:包含JVM与类库。

    JDK:包含JRE与一些开发工具,如javac、javap等。

    1.4 java虚拟机在整个程序流程中的位置

    2 JVM的体系结构

    2.1 什么是虚拟机

    模拟执行某种指令集体系绌构的软件。有多种分类,比如进程虚拟机(高级语言虚拟机),系统虚拟机,协设计虚拟机。

    2.2什么是Java虚拟机

    (1)有多层含义:

    • 一套规范:Java虚拟机规范,定义概念上Java虚拟机的行为表现。
    • 一种实现:例如HotSpot、J9、JRockit。需要实现JVM规范,但具体实现方式不需要与“概念中”的JVM一样。
    • 一个运行中的实例:某个JVM实现的某次运行的实例。

    (2)只要输入符合规范的Class文件即可执行。

    (3)并非一定要执行“Java”程序,可以支持其他语言,比如Groovy,Jython等。

    2.3 概念中JVM体系结构

    2.4 JVM的内部体系结构分为三部分

    (1)类装载器(ClassLoader)子系统

    作用:用来装载.class文件。

    (2)执行引擎

    作用:执行字节码,或者执行本地方法。

    (3)运行时数据区

    方法区,堆,java栈,PC寄存器,本地方法栈。

    3 JVM的生命周期

    3.1 两个概念:JVM实例和JVM执行引擎实例

    (1)JVM实例对应了一个独立运行的java程序,它是进程级别。

    (2)JVM执行引擎实例则对应了属于用户运行程序的线程,它是线程级别的。

    3.2 JVM的生命周期

    (1)JVM实例的诞生

    当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点。

    (2)JVM实例的运行

    main()作为该程序初始线程的起点,任何其他线程均由该线程启动。

    JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程。

    (3)JVM实例的消亡

    当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出。

    4 Class文件

    4.1 Class文件所记录的信息

    (1)结构信息

    • Class文件格式版本号
    • 各部分的数量与大小

    (2)元数据

    • 类/ 继承的超类/ 实现的接口的声明信息
    • 域与方法声明信息
    • 常量池
    • 用户自定义的、RetentionPolicy为CLASS或RUNTIME的注解
    • ——对应Java源代码中“声明”与“常量”对应的信息

    (3)方法信息

    • 字节码
    • 异常处理器表
    • 操作数栈与局部变量区大小
    • 操作数栈的类型记录(StackMapTable,Java 6开始)
    • 调试用符号信息(如LineNumberTable、LocalVariableTable)
    • ——对应Java源代码中“语句“与“表达式”对应的信息

    4.2 class文件不只是字节码

    字节码只代表程序逻辑,只是Class文件众多组成部分其中之一。

    参考资料

    莫枢JVM技术分享PPT。

    淘宝应届生培训 JVM工作原理PPT。

    http://yhjhappy234.blog.163.com/blog/static/3163283220122204355694/

  • 相关阅读:
    Redis-命令-脚本
    Redis-命令-事务
    Redis-命令-发布订阅
    Redis-命令-HyperLogLog
    Redis-命令-有序集合(sorted set)
    Redis-命令-集合(Set)
    Redis-命令-列表(List)
    Python实例浅谈之三Python与C/C++相互调用
    python调用(运行)外部程序
    Sublime Text3 配置设置攻略
  • 原文地址:https://www.cnblogs.com/tsiangleo/p/4403548.html
Copyright © 2020-2023  润新知