JVM

本文介绍Java虚拟机(JVM)的优点及工作原理,包括内存管理、垃圾回收机制、对象生命周期等核心概念,并详细解析了不同垃圾收集器的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jvm优点

write once run everywhere!

HelloWorld.java
| jvm编译
HelloWorld.class
| jvm翻译成机器认识的机器码

1.机器码翻译
2.内存管理

缺点

我们把内存管理交给了jvm做,那么就会产生内存相关的问题(内存溢出、内存泄露),
这时,我们就需要优化

运行时数据区

内存模型

新生代 1
老年代 2
永久代(<1.8)
meta space(1.8)

判断对象是否可以被回收(gc)

1.引用计数法(缺点:循环引用回收不了)
2.GC ROOTS,可达性分析
什么样的对象可以作为GC ROOTS ???

  • 虚拟机栈中本地变量表引用的对象
  • 方法区中:
    类静态变量应用的对象
    常量引用的对象
    为什么他们可以作为GC ROOTS呢?不能被回收的对象
    不可达是不是一定会被回收?
    finalize()方法,再做一次挽救

引用

强引用 Object obj = new Object();
软引用 SoftRefence
弱引用 只要回收,就会被回收
虚引用 回收前会被通知

回收算法

标记清除法

  • 效率不高
  • 产生空间碎片

复制算法

  • 空间利用率不高

标记整理法

  • 不会产生空间碎片

分代收集

垃圾收集器(垃圾回收算法的具体实现)

STW stop the world

Serial收集器(串行)

  • 只有一个gc线程,其他业务线程挂起

ParNew (并行)

  • 多线程gc

Parallel Scavenge 收集器(并行)

  • 吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)

Serial Old

  • cms的备用方案

Parallel Old 收集器(标记整理算法)

CMS收集器(标记清除算法)

  • 减少回收停顿的时间
  • 1.初始标记
  • 2.并发标记
  • 3.重新标记
  • 4.并发清除
  • 产生空间碎片,当到达一定程度时,启用Serial Old

G1收集器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值