八股文 --- JVM(一)

常见的java八种数据类型

  1. byte:字节型,占用1个字节。
  2. short:短整型,占用2个字节。
  3. int:整型,占用4个字节。
  4. long:长整型,占用8个字节。
  5. float:单精度浮点型,占用4个字节。
  6. double:双精度浮点型,占用8个字节。
  7. char:字符型,占用2个字节。
  8. boolean:布尔型,只能取两个值之一:true 或 false。

JVM虚拟机

是什么?

在Java中,JVM指的是Java虚拟机(Java Virtual Machine)。它是Java编程语言的核心,负责在运行Java程序时将字节码(即Java源代码经过编译后生成的.class文件)转换为机器码并执行。JVM提供了跨平台的能力,使得一次编写的Java程序可以在不同的操作系统上运行而无需修改。JVM还负责内存管理、垃圾回收等任务,以确保Java应用程序的稳定性和高性能。

就是支持JAVA运行的虚拟机

特点

一次编写到处运行 : 所有JAVA代码不考虑操作系统适配, 全部是在JVM虚拟机上运行

自动内存管理和垃圾回收机制

就是自动释放用例, 不必手动释放

大体运行流程

PC程序计数器

每个线程都有一份

内部保存字节码的行号, 记录正在执行的字节码地址

基本类似计算机组成原理里面的PC

JAVA堆

是一个线程共享区域, 存储对象, 数组

年代就是存储对象, 对象的生命周期

防止内存溢出

元空间: 存储的是类信息, 静态变量, 常量

虚拟机栈

每个线程运行时所需要的内存就是虚拟机栈

 弹出栈后自动释放

栈默认1024k. 栈帧过大导致线程数变少

栈过多会导致内存溢出

直接内存

虚拟机的系统内存

不由JVM管理, 用于数据缓冲区域

读写迅速

JVM垃圾回收

回收目标

主要回收的是堆内存

堆中的变量, 数据等

对象什么时候被回收

当对象没有任何引用指向, 则定位为垃圾对象

有可能被回收

引用计数法

一个对象引用了一次, 就在当前对象头上递增一次引用

引用为0代表可回收

问题是循环引用就会内存泄漏

循环引用引用不可能为0, 无法回收指定对象

可达性分析算法

从根节点(GC root)进行搜索, 如果再扫描树里面找不到, 那就是垃圾

java垃圾清除的核心算法就是可达性分析算法

可作为GC roots的对象
  • 虚拟机栈/本地方法栈引用的对象
  • 静态成员引用的对象
  • 常量引用的对象

JVM垃圾回收算法

三色标记算法

并发的可达性标记算法

对象可能有三种颜色:

  • 黑色: 根对象, 对象和它的子对象均被扫描 [ 绝对不会被清除 ]
  • 灰色: 对象本身被扫描, 但是子对象未被扫描 [ 类似叶子节点, 灰色后的对象会被清除 ]
  • 白色: 未被扫描, 可达性分析最终为白色的对象就会被视为垃圾对象清除

JVM分代

在JVM中, 有新生代和老年代, 比例是 1:2

JVM垃圾回收器

串行,并行垃圾回收器 [ 但不是真并发 ]

GMS垃圾回收器
  • 最大特点是垃圾回收时, 应用仍然可以运行
  • 阻塞很短
  • 主要作用老年代
  • 过程
    1. 初始标记, 标记与GC roots 直接关联的对象 [ 进入STW, 造成阻塞 ]
    2. 并发标记, 遍历整个对象图, 标记所有存活对象
    3. 重新标记, 标记在并发标记阶段产生的垃圾, [ 进入STW, 造成阻塞 ]
    4. 并发清除, GC线程和应用线程并发进行

G1垃圾回收器

在jdk9 后默认垃圾回收器就是 G1

新生代eden, 老年代old, 幸存者区surviver和巨大区humonqous

动态变化区块

过程:

  1. 初始划分eden区,生成对象,
  2. 执行eden的垃圾回收[ 新生代回收, 保留对象到幸存者区, 触发STW ]

                再次执行新生代回收时, 把之前幸存者区的对象再次移动, 和其他eden区的对象一起移动到新的幸存者区中

在幸存者区中超过阈值达到老年区

  1. 3. 执行并发标记 [ 老年代占用超过内存45% ]

找到存活对象, 加上标记, 并发执行

  1. 4. 混合收集

逐步回收未存活对象较多的老年代, 不是瞬间回收, 而是每次只回收几个区域

这次回收包含新时代, 幸存者代, 老年代

新生代, 幸存者代中还存活的对象移动到新幸存者代中

老年代中存活的对象移动到新老年代中\

  1. 5. 混合收集结束,

内存清理完成, 重新回到初始状态

GMS和G1的缺点

  1. GMS采用标记清除算法, 会产生空间碎片
  2. GMS可能出现并发模式失败
  3. G1采用标记整理算法
  4. GMS和G1均会产生浮动垃圾

ZGC垃圾回收器

  1. 支持大堆 [ 最大10msSTW, TB级别堆 ]
  2. 单代
  3. 区域大小划分不相等 [ G1是划分等区块 ]
  4. 存在颜色指针: GC信息存于对象指针而不是对象头中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值