当前位置: 首页 > news >正文

【JVM】一文掌握JVM垃圾回收机制

作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识。JVM调优是一个听起来很可怕,实际上很简单的事。
感到可怕,是因为垃圾回收相关机制都在JVM的C++层实现,我们在Java开发中看不见摸不着;而实际很简单,是因为它说到底,也只是JVM替我们实现的垃圾对象回收机制,也是普通的程序代码,只要理解了垃圾回收器的底层设计思想,掌握JVM调优并非难事!

jvm

一、JVM内存模型

JVM内存模型

元数据区:JDK8之前是方法区。存放虚拟机加载的:类型信息,域(Field)信息,方法(Method)信息,常量,静态变量,即时编译器编译后的代码缓存
虚拟机栈:虚拟机栈中保存了每一次方法调用的栈帧信息,栈帧中包含以下信息:

  • 局部变量表:保存函数 (即方法) 的局部变量
  • 操作数栈:保存计算过程中的结果,即临时变量
  • 动态链接:指向方法区的运行时常量池。字节码中的方法调用指令以常量池中指向方法的符号引用为参数。
  • 方法的返回地址

本地方法栈:和虚拟机栈功能上类似,它管理了native方法的一些执行细节,而虚拟机栈管理的是Java方法的执行细节。
程序计数器:程序计数器记录线程执行的字节码行号,如果当前线程正在运行native方法则为空。每个线程都有自己的计数器
:JVM中产生的实例对象的存储位置

所谓的垃圾回收,主要就是回收JVM中堆内存的区域

二、垃圾定义

  1. 引用计数(ReferenceCount):存在循环引用的问题,漏掉循环引用的垃圾
  2. 根可达算法(RootSearching):判断对象是否可通过引用寻到JVM的根节点,不能则是垃圾

三、垃圾回收算法

  1. 标记清除(mark sweep) - 位置不连续 产生碎片 效率偏低(两遍扫描)

标记清除

  1. 拷贝算法 (copying) - 没有碎片,浪费空间

拷贝算法

  1. 标记压缩(mark compact) - 没有碎片,效率偏低(两遍扫描,指针需要调整)

标记压缩

http://www.dtcms.com/a/5945.html

相关文章:

  • 计算机基础面试题 |04.精选计算机基础面试题
  • 微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132
  • uni-app tabbar组件
  • R_handbook_统计分析
  • ES应用_ES原理
  • 【c语言】飞机大战2
  • centos 安装 配置 zsh
  • Stable Diffusion WebUI制作光影文字效果
  • Android Studio 如何隐藏默认标题栏
  • 为即将到来的量子攻击做好准备的 4 个步骤
  • QT QPluginloader 加载失败,出现Unknown error 0x000000c1的问题
  • 1.3 FMEA 实施指南
  • 车路协同中 CUDA 鱼眼相机矫正、检测、追踪
  • Qt高质量的开源项目合集
  • 浏览器强缓存和协商缓存
  • HarmonyOS应用程序包快速修复
  • 在ClickHouse中使用聚合组合器
  • appium安装运行报错的解决方案
  • MATLAB中./和/,.*和*,.^和^的区别
  • 【STM32】SPI通信
  • Spring AOP—深入动态代理 万字详解(通俗易懂)
  • 再薅!Pika全球开放使用;字节版GPTs免费不限量;大模型应用知识地图;MoE深度好文;2024年AIGC发展轨迹;李飞飞最新自传 | ShowMeAI日报
  • Rust安装(Windows)
  • 【信息安全原理】——入侵检测与网络欺骗(学习笔记)
  • 【基础】【Python网络爬虫】【6.数据持久化】Excel、Json、Csv 数据保存(附大量案例代码)(建议收藏)
  • 掌握 C++ 中 static 关键字的多种使用场景
  • 《Spring Cloud学习笔记:微服务保护Sentinel + JMeter快速入门》
  • 【Java开发岗面试】HR面常见问题及答案汇总
  • 饥荒Mod 开发(二三):显示物品栏详细信息
  • linux 内核模块