JVM详解(超详细)

本文详细介绍了JVM的工作原理,包括其简介、执行流程、运行时数据区的组成(堆、栈、方法区等)、类加载机制(双亲委派模型)以及垃圾回收策略(如标记清除、复制、标记整理和分代回收)。重点讨论了类加载的五个阶段和垃圾收集的两种主要判断算法(引用计数和可达性分析)。
摘要由CSDN通过智能技术生成

目录

JVM 的简介

JVM 执行流程

JVM 运行时数据区

由五部分组成

JVM 的类加载机制

类加载的过程(五个)

双亲委派模型

类加载器

双亲委派模型的优点 

JVM 中的垃圾回收策略  GC

GC 中主要分成两个阶段

死亡对象的判断算法

引用计数算法

可达性分析算法

垃圾回收算法

标记清楚算法

复制算法

标记整理算法

分代回收算法

一个对象的一生


JVM 的简介


Java Virtual Machine(Java虚拟机)

JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

虚拟机介绍: 通过软件模拟的具有完整硬件的功能, 运行在一个完全隔离的环境中的完整计算机系统.

常见的虚拟机: JVM, VMwave, Virtual Box.....

JVM 与其他两个虚拟机之间的区别:

  • VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;
  • JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进
    行了裁剪。 

JVM 的初心:

就是为了让 Java 程序员能够比较简单的, 感知不到 系统层面的一些内容

还可以说让程序员只关注业务逻辑, 不要关注底层的实现细节

JVM 执行流程


JVM 是 java 运行的基础, 也是实现一次编译到处运行的关键, 下面就来说说 JVM 是怎么执行的~

以下是JVM详细的执行流程:

程序在执行之前先要把 java 代码转换为字节码 (class 文件), JVM 首先需要把字节码通过一定的方式类加载器(类加载器 ClassLoad) 把文件加载到内存中 运行中 运行是数据区 (Runtime Data Area), 而字节码文件是 JVM 的一套指令集规范, 并不能直接交给底层操作系统去执行, 云溪需要特定的命令解释器执行引擎 (Execution Engine) 将字节码翻译成底层系统指令再交由 CPU 去执行, 而这个过程中需要顶哦用其他语言的接口 本地库接口 (Native Interface)  来实现整个程序的功能, 这就是这四个只要组成部分的职责和功能

主要是四个部分来执行 java 程序的 :

  1. 类加载器 (ClassLoader)
  2. 运行时数据区 (Runtime Data Area)
  3. 执行引擎 (Execution Engine)
  4. 本地库接口 (Native Interface)

JVM 运行时数据区


  • JVM 运行时数据区域也叫作内存布局, 和 java 内存模型 (Java Memory Model, 简称 JMM) 完全不同
  • JVM 就是一个 Java 进程, Java 进程会从操作系统这里申请一大块区域,  给 Java 代码使用进一步划分, 给出不同的用途

由五部分组成

1. 堆: new 出来的对象 (成员变量)

        堆的作用: 程序中创建的所有对象都保存在堆中

        堆中分为两个区域:

                1. 新生代: 放新建的对象

                2. 老生代: 当经过一定 GC 次数之后还存活的对象会放入老生代 

2. 栈: 维护方法之间的调用关系 (局部变量)(两个栈放到了一起)

  • Java 虚拟机栈 : Java 虚拟机栈的生命周期和线程相同,Java 虚拟机栈描述的是 Java 方法执行的
    内存模型:每个方法在执行的同时都会创建一个栈帧(Stack
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值