深度了解Jvm原理和GC回收(一万字)

GC垃圾回收机制总结 本文参考(https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/java/jvm/JVM-垃圾回收机制.md) (https://blog.youkuaiyun.com/u013630349/article/details/78342645)文章,如若侵权请通知删除。 最近面试一直会被问到关于GC的... 阅读详情

带你全面了解Jvm原理GC回收

什么是Jvm

JVM是Java虚拟机。它是由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域组成。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,由于不同系统都有对应相同版本的Java虚拟机,各自系统的虚拟机都可以识别并编译自己的字节码文件,这也就实现了Java的跨平台这一大特性。

JRE/JDK/JVM的关系

  • JRE称为Java运行环境。这就表明了,所有的Java程序都要在有JRE的情况下才能运行。

  • JDK称为Java开发环境。是程序开发者用来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。

  • JVM是JRE的一部分。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

JVM原理

Jvm是Java的核心和基础,在Java编译器和Os平台之间的虚拟处理器。它是利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行Java的字节码程序。

在这里插入图片描述

Jvm的体系结构

在这里插入图片描述

  • 类装载器:用来装载.class文件
  • 执行引擎:执行字节码,或者本地方法
  • 运行时数据区:内存空间中的方法区,堆,Java栈,Pc寄存器和本地方法栈。
  • 方法区:称为“永久代”,“非堆”,用于存储虚拟机加载的类信息,常量,静态变量,是各个线程共享的区域,是*线程共享*的
  • 运行时常量池:方法区的一部分,Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息就是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。
  • 虚拟机栈:当每个方法被执行的时候,都会创建一个栈用于存储局部变量,参数,操作栈,方法出口等信息。每个方法被调用到执行完成的过程,就对应着一个栈在虚拟机中从入栈到出栈的过程。生命周期和线程相同,是*线程私有*的
  • 本地方法栈:与虚拟机栈基本类似,是为本地方法服务的,是*线程私有*的
  • 堆:又称为GC堆,是JVM内存模块中最大的一块内存区域,是线程共享的,在Jvm启动时创建。存放了所有的实例对象以及数组值,既所有刚new的对象都在堆里。由于堆是线程共享的,因此在进行对象内存的分配的时候都要进行加锁,这也就导致了new对象的开销是比较大的
  • 程序计数器:这是内存区域中最小的一块内存,他的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,异常处理,线程恢复等基础功能都需要依赖计数器完成,是*线程私有*的。

对象是否存活的判定算法

由于方法区和堆是线程共享的,并不像虚拟机栈,程序计数器和本地方法栈是线程私有的。所以方法区和堆可以和GC回收扯上关系。

由于在堆中存在在所有的对象,所以在Gc回收之前都要考虑,哪些对象还活着,哪些对象已经死了,活着就让他继续活着,死了就让回收他。这时候就存在了某些算法来通过判断对象的存活状态从而判断是否该被回收。

1. 引用计数算法

给对象中添加一个引用计数器,每当一个地方应用了对象,计数器就加一;当引用失效的时候,计数器就减一;通过这样的加加减减,当计数器变为0的时候就表示该对象已死,可以进行回收操作。

  • 缺点:很难解决两个对象之间相互循环引用的情况
2. 可达性分析算法

通过一系列称为“GC Roots"的对象作为起点,从这些节点开始向下搜索,搜索所走过的路劲称为引用链,当一个对

JVM垃圾回收(GC)深度解析:原理、调优与问题排查 垃圾回收是JVM自动识别并释放"无用对象"所占用内存的过程。"无用对象"指的是不再被任何存活对象引用的对象,这些对象占据的内存若不及时释放,最终会导致OOM(OutOfMemoryError)。JVM垃圾回收是Java应用性能的核心影响因素,除了常见的频繁YGC和Full GC,GC停顿过长、元空间异常等问题同样可能成为系统瓶颈。理解GC原理、掌握各类问题的排查方法是高级Java工程师的必备技能。面对GC问题时,需结合监控工具、日志分析和代码审查,精准定位问题根源——是参数配置不合理,还是代码存在内存泄漏。 阅读详情

相关推荐

[Java JVM] Hotspot GC研究- 什么是GC Root

GC RootGC Root全称是garbage collection root, 即垃圾回收的根. 回到我们的葡萄比喻上来, 也就是一串葡萄的柄. 实际上JVM中的GC Root不只一个, 也就是多个这样的 “柄”. 来看看hotspot网站的解释: garbage collection root A pointer into the Java object heap from ou

lqp276的博客 2222

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1179

什么!!!寒假就要准备暑期实习

介绍暑期实习,从作用,时间线,投递渠道,技术准备,常见问题,经验教训几个方面介绍暑期实习

今天不coding的博客 1725

解决windows10下无法安装.net framework 3.5(包括.net2.0和3.0)

入域电脑,win10系统中安装 .net framework 3.5(包括.net2.0和3.0)

God_me_1的博客 4万+

面试篇 - LoRA(Low-Rank Adaptation) 原理

输出示例:trainable params: 262,144 || all params: 6,742,016,000 || trainable%: 0.0039。论文实验显示:零初始化 BB 可使初始损失与预训练模型相差不足0.1%,而非零初始化可能差50%+。若初始 ΔW≠0,模型可能立即偏离预训练学到的知识(如GPT-3突然忘记如何造句)。:如同汽车改装,先保持原厂配置(W),再逐步加装新部件(ΔW),避免直接飙车失控。:大模型的权重变化矩阵 ΔWΔW 通常是低秩的(少数主成分主导变化)。

qq_60245590的博客 1152

【实战指南】利用CAN适配器高效调试CAN总线通信

本文提供了一份利用CAN适配器高效调试CAN总线通信的实战指南。文章从硬件连接、终端电阻配置、软件参数设置等基础环节入手,详细解析了CAN适配器作为关键调试工具的工作原理与使用方法,并针对常见的通信故障提供了系统化的问题排查思路,帮助工程师快速打通通信链路,提升调试效率。

weixin_28285943的博客 412

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。

fydar的博客 2169

[QMT量化交易小白入门]-七十一、十年回测ETF动量策略,超额年化收益率为10.6%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1854

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 394

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: JavaWeb之Servlet介绍
下一篇: Mybatis多表联合查询,嵌套查询,动态SQL
Debug_EDM
博客等级 码龄8年 21粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值