Arnold's Blog Arnold's Blog
🏠首页
  • Java
  • Python
💻前端
🕸️周边技术
🗒️札记
  • Tips
  • 读书
  • 友情链接
🧑‍💻关于
🔖收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Arnold Shu

知人者智,自知者明。胜人者有力,自胜者强。
🏠首页
  • Java
  • Python
💻前端
🕸️周边技术
🗒️札记
  • Tips
  • 读书
  • 友情链接
🧑‍💻关于
🔖收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java

    • Java注解以及自定义注解
    • 函数式编程(JAVA)
    • 记一次GC 排查及优化
    • JVM浅析总结(JVM的生命周期)
      • JVM(本文章以jdk8为基础)
        • JDK,JRE,JVM关系
        • JVM的指令集(java编译器)架构模型
        • JVM的生命周期
        • Java代码简单执行流程
        • JVM结构体系图(记住这个图,以此展开拓展)
    • JVM浅析总结(类加载器)
    • JVM浅析总结(运行时数据区)
    • JVM浅析总结(执行引擎)
    • JVM浅析总结(垃圾回收)
    • JVM浅析总结(Class文件结构)
    • JVM浅析总结(JAVA监控与调优工具)
    • 程序设计中SPI和API
  • Python

  • Spring

  • SpringBoot

  • backend
  • Java
Arnold Shu
2021-11-13
目录

JVM浅析总结(JVM的生命周期)

# JVM(本文章以jdk8为基础)

# JDK,JRE,JVM关系

项目 说明
JDK(Java Development Kit) 是Sun微系统针对Java开发人员发布的免费软件开发工具包(SDK (opens new window),Software development kit)作为Java语言的SDK,普通用户并不需要安装JDK来运行Java程序,而只需要安装JRE(Java Runtime Environment)。而程序开发者必须安装JDK来编译、调试程序。JDK包含了一批用于Java开发的组件(eg:javac,java,jar,javadoc等),还包括完整的JRE(Java Runtime Environment),Java运行环境,也被称为private runtime。包括了用于产品环境的各种库类,如基础类库rt.jar,以及给开发人员使用的补充库,如国际化与本地化的类库、IDL库等等
JRE(Java Runtime Environment) 是一个软件,由Sun微系统所研发,JRE可以让电脑系统运行Java应用程序(Java Application),JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)
JVM(Java Virtual Machine) 一种能够运行Java bytecode的虚拟机,以堆栈结构机器来进行实做。最早由Sun微系统所研发并实现第一个实现版本,是Java平台的一部分,能够运行以Java语言写作的软件程序,java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。通过对中央处理器(CPU)所执行的软件实现,实现能执行编译过的Java程序码(Applet与应用程序),作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件符合JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行

三者的关系图示:

JDKJREJVM关系图

# JVM的指令集(java编译器)架构模型

主流的两种架构特点比较

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

所以JVM的指令集(java编译器)架构模型是基于栈的指令集架构

# JVM的生命周期

流程 说明
jvm启动 通过引导类加载器(bootstrap class loader)创建一个初始类(inital class),初始化类根据不同的虚拟机(eg: Classic VM,Exact VM,HotSport,JRockit,j9)类型来决定其实现
jvm执行 执行java程序,程序开始虚拟机执行,程序结束虚拟机结束执行,java程序在jvm中相当于虚拟机到的一个进程
jvm退出 包含正常退出,异常退出,可调用java api主动退出eg:Runtime类或者exit方法,halt方法
通俗三个流程概述 启动:任何class文件的main函数都可认为是jvm示例的起点。
运行:以main函数为起点,后续的线程都由它启动,包括守护线程和用户线程。main方法启动的线程是用户线程,守护线程是JVM自己使用的线程如GC线程。
退出&异常退出:用户线程完全退出了,jvm示例结束生命周期。

# Java代码简单执行流程

Java代码简单执行流程

# JVM结构体系图(记住这个图,以此展开拓展)

JVM结构体系图

#JVM#GC
上次更新: 2023/12/18, 11:52:57
记一次GC 排查及优化
JVM浅析总结(类加载器)

← 记一次GC 排查及优化 JVM浅析总结(类加载器)→

最近更新
01
《领域驱动设计:软件核心复杂性应对之道》书摘
12-26
02
Linux 的常用命令
10-22
03
程序设计中SPI和API
10-22
更多文章>
Theme by Vdoing | Copyright © 2017-2024 Arnold Shu | CC BY-SA 4.0 License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式