JVM内存模型及垃圾回收机制

JVM完整详解:内存模型+垃圾回收算法+垃圾收集器+GC参数等 当然,随着可以使用的CPU的数量增加,它对于GC时系统资源的利用还是很有好处的。在我们垃圾回收的时候,我们往往将堆内存分成新生代和老生代(大小比例1:2),新生代中由Eden和Survivor0,Survivor1组成,三者的比例是8:1:1,新生代的回收机制采用复制算法,在Minor GC的时候,我们都留一个存活区用来存放存活的对象,真正进行的区域是Eden+其中一个存活区,当我们的对象时长超过一定年龄时(默认15,可以通过参数设置),将会把对象放入老生代,当然大的对象会直接进入老生代。 阅读详情
JVM内存模型
1、栈
Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。存储局部变量、引用、方法、返回值等。
StackOverflowError:如果在线程执行的过程中,栈空间不够用,那么JVM就会抛出此异常,这种情况一般是死递归造成的。
2、堆

Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。


2.1堆的分代
JVM堆一般分为三个部分:
Young:年轻代
Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Young区间变满的时候,minor GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。
Tenured:年老代
Tenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。
Perm:持久代
Perm代主要保存class,method,filed等对象,这部门的空间一般不会溢出。

java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这种情况下,一般重新启动应用服务器可以解决问题。


2.2堆的大小
-Xmx:指定JVM堆得最大内存,在JVM启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全部使用,JVM会根据-Xms参数来调节真正用于JVM的内存
-Xms :指定了JVM初始启动以后初始化内存

-Xmx -Xms之差就是三个Virtual空间的总大小(年轻代、年老代、持久代)

3、栈与堆的比较:
栈是运行时的单位,而堆是存储的单位。
栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。
对象存放在堆中,对象引用和基本类型存放在栈中;对象的属性存放在堆中,对象的方法存在栈中。

程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题。不会直接传对象本身。

在JVM中,静态属性保存在Stack指令内存区,动态属性保存在Heap数据内存区



JVM垃圾回收机制
分代垃圾回收
不同的对象生命周期不同。与业务信息有关的对象生命周期较长,如Http请求中的session对象、线程、socket连接。程序运行过程中的临时变量生命周期较短,如String对象。
把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。JVM中共划分为三个代:年轻代、年老代和持久代,其中持久代主要存放Java类的类信息,与垃圾收集要收集的Java对象关系不大,年轻代和年老代的划分是对垃圾收集影响较大的。
年轻代 :存放所有新生成的对象;
年老代 :在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;
持久代 :用于存放静态文件,如Java类、方法等。(持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。)

新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为"Full Gc 或者Major GC".其中用System.gc()强制执行的是Full Gc.

转自:http://blog.youkuaiyun.com/zhangpengju999/article/details/11773183

Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题 在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和. 阅读详情

相关推荐

手撕Java系列--JVM内存模型及垃圾回收机制详解

不同的垃圾回收算法和收集器适用于不同类型的应用场景。选择合适的垃圾回收策略和参数配置,可以显著提升应用程序的性能和稳定性。理解每种算法的工作原理和优缺点,有助于更好地进行调优和故障排除。CMS:适合对响应时间有较高要求的应用,但可能会产生内存碎片。G1:适合大规模应用,能够高效管理大内存,减少停顿时间,但实现复杂。ZGC:适合对响应时间要求极高的应用,能够实现极低的停顿时间,但相对较新,还在发展中。选择合适的垃圾收集器需要根据具体的应用场景和性能需求进行综合考虑。

横竖撇折点 1357

JVM内存模型以及垃圾回收(详细总结)

一个完整的JAVA执行流程如下所示: 以.java文件结尾的称作源代码文件,它经过编译器编译之后形成了.class文件(字节码文件),然后由JVM中的类加载器进行加载各个类的字节码文件,加载完毕之后,由JVM执行引擎执行.在整个执行的过程中,JVM会用一段空间来存储期间所用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。 这一部门的结构如下所示: 方法区:是线程所共享的区域,主要是用于存储类相关的信息,常量和静态变量。当方法区无法满

weixin_43586713的博客 855

深入理解JVM内存模型与垃圾回收机制:从原理到实战调优

本文由王文峰撰写,深入探讨了JVM内存模型与垃圾回收机制,旨在帮助Java开发者解决生产环境中的内存管理问题。文章首先解析了JVM内存结构,包括Metaspace、堆内存分代和直接内存分配,接着详细介绍了对象分配与晋升机制,并对比了不同垃圾回收器的适用场景。随后,文章通过源码级解析G1收集器的内存布局、并发标记流程和记忆集优化,并结合电商平台订单系统的调优案例,展示了如何通过JVM参数调整和代码修复解决Full GC问题。最后,文章提供了性能优化进阶技巧,如逃逸分析和Shenandoah收集器的使用,并展望

王大师企业官方博客 1313

jvm内存模型、垃圾回收机制

自动垃圾回收是查看堆内存、识别哪些对象正在使用、哪些对象未使用以及删除未使用对象的过程。正在使用的对象或引用的对象意味着程序的某些部分仍保留指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此,可以回收未引用对象使用的内存。在像 C 这样的编程语言中,分配和取消分配内存是一个手动过程。在 Java 中,释放内存的过程由垃圾回收器自动处理。基本流程可以描述如下。

Gefangenes的博客 919

jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

对jvm内存模型&垃圾收集算法&类加载机制进行了整理,读者可以作为参考进行学习和探讨,,

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1033

jvm内存模型及垃圾回收机制

jvm内存模型,类加载器,垃圾回收算法和垃圾回收器。

qq_14946371的博客 465

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 253

【JVM】垃圾回收策略

垃圾回收策略: 主要针对线程共享内存(堆,方法区) 1. 判断哪些对象需要回收: 在回收前先需要判断对象是否存活 引用计数法(Python,C++智能指针都用到了这些) 给每个对象附加一个引用计数器,每当有一个引用指向当前对象,计数器 + 1,每当有引用不再指向当前对象,计数器值 - 1,任意时刻引用计数器值为 0 的对象就被标记为不再“存活”。 缺点:无法解决循环引用问题(我中有你,你中有我...

学习笔记。 1059

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 268

自动驾驶车辆纵向控制实战:基于CARLA与ROS2的PID算法实现

本文详细介绍了基于CARLA与ROS2的自动驾驶车辆纵向控制实战,重点讲解了PID算法的实现与应用。通过搭建仿真环境、实现定速巡航和自适应巡航功能,帮助开发者掌握自动驾驶核心技术。文章还分享了系统集成、仿真验证及常见问题的调试技巧,为自动驾驶开发提供实用指导。

weixin_33728708的博客 355

Java 内存模型与垃圾回收机制:深入理解 JVM

Java 虚拟机(JVM)是 Java 语言的核心,它将编译后的字节码文件(.class文件)解释或编译为底层机器码,以便运行在各种操作系统上。通过 JVM,Java 实现了“编译一次,运行多处”的跨平台能力。字节码执行:加载、解析、执行 Java 字节码文件。内存管理:包括对象内存分配和垃圾回收。线程管理:为多线程 Java 程序提供运行环境。安全性:通过类加载器和运行时检查保障程序安全。了解 JVM 的工作原理是深入学习 Java 的基础,尤其是在性能优化和问题排查方面。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1899

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 835

JVM内存模型与垃圾回收机制分析

JVM内存模型涉及运行代码,即运行代码产生的垃圾数据需要回收,堆是对象生存的核心战场,GC 主要在此区域运作,GC解决内存有限性、避免手动管理风险、动态回收垃圾、保障性能与稳定性,**让开发者从内存管理中解放,专注于业务逻辑实现**

837

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 294

【嵌入式 – GD32开发实战指南(ARM版本)】第1部分 基础篇 - 第1章 开发环境搭建

开发环境: MDK:Keil 5.30 MCU:GD32F207IK 1.1 GD32F207I-EVAL开发板简介 笔者使用的开发板是兆易创新设计的GD32F207I-EVAL开发板。 GD32F207I-EVAL开发板使用 GD32F207IK作为主控制器,主频120MHz、集成3MB Flash、256KB SRAM、通用定时器*10、Adv. TM*2、Basic TM*2、系统时钟*1、看门狗*2、RTC*1、USART*4、UART*4、I2C*3、SPI*3、I2S*1、SDIO*1、CAN

不问归期的博客 9991

JVM 内存模型与垃圾回收机制深度解析

面试中,需结合具体场景(如 “线上出现 Full GC 频繁,如何排查?避免永久代内存溢出(如 Spring 动态代理生成大量类时),元空间大小可动态扩展,且字符串常量池(String Table)从永久代移至堆内存,减少 Full GC 压力。A:对象泄漏(如集合未正确释放)、大对象批量创建(如加载超大文件到内存)、内存分配策略不合理(新生代过小导致频繁 Full GC)。移除永久代(PermGen),类元数据(如类名、方法信息、常量池)存储在本地内存(Native Memory),由。

闫磊磊 892

视觉Transformer实战 | Vision Transformer(ViT)详解与实现

在计算机视觉领域,卷积神经网络 (CNN) 长期以来一直是处理图像任务的主流架构。然而,随着 Transformer 在自然语言处理领域的巨大成功,研究人员开始探索将这种基于自注意力机制的架构应用于视觉任务。Vision Transformer (ViT) 是这一探索的重要里程碑,它首次证明了纯 Transformer 架构在图像分类任务上可以超越最先进的 CNN 模型。本文将详细介绍 ViT 的技术原理,并使用 PyTorch 从零开始构建 ViT 模型用于图像分类任务。

盼小辉丶的博客 4万+

JVM内存模型、垃圾回收机制及简单调优方式

不同点时,当调用native修饰的方法时,其产生的数据会存储在本地方法栈中。jdk1.7之后,取消了方法区名称,改为元空间、方法区也叫元空间也叫永久区。用来存放调用方法及方法执行的过程中产生的临时数据的(临时变量,参数列表)用来存放类加载的信息,同时存放静态属性 和 方法(静态方法和普通方法)方法区中的数据,可以被多线程共享。堆区中的数据,可以被多线程共享。栈帧分为:局部变量表, 操作数栈,返回地址,动态链接。方法栈是线程独享的,也就是每一个线程都会有一个方法栈。这些数据是以栈帧结构存入方法栈(压栈)

weixin_53755148的博客 1362

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JVM 内存模型与垃圾回收机制全解析:架构、算法、调优实践

本文深度剖析 JVM 内存模型与垃圾回收机制,涵盖内存区域划分(堆、栈、方法区等)、对象分配与回收流程、核心算法(标记-清除、复制、分代收集)及主流 GC 器(G1/ZGC)原理。结合性能调优实践(内存泄漏排查、GC 日志分析、参数配置),提供从理论到落地的系统性指南,助力开发者优化 Java 应用性能,提升稳定性与资源利用率。

大模型全栈工程师 · Thanks_ks 1348

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jvm内存模型和垃圾回收机制

jvm内存模型和垃圾回收机制一、Java虚拟机组成部分执行流程二、jvm内存模型1.本地方法栈2.程序计数器3.方法区4.栈5.堆三、jvm内存中各个区的作用与联系1.例一:1.1 内存中的栈帧结构栈帧数据结构栈帧的内存分配当前栈帧(Current Stack Frame)1.2 代码执行过程中栈的变化1.3 代码执行过程中各个区域的联系1.4 垃圾回收算法1.4.1 标记-清理算法:1.4.2 ...

qq_41534252的博客 966

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JVM 及内存管理:掌握 Java 8 的内存模型与垃圾回收机制

本文从 JVM 内存模型到垃圾回收机制进行了全面解析,并介绍了 Java 8 中的重要改进。掌握这些知识不仅有助于提升代码性能,还能帮助你更好地定位和解决内存问题。在实际项目中,建议结合具体场景选择合适的垃圾回收器并进行调优,以最大化系统性能。

qq_36534560的博客 2179

JVM虚拟机内存模型和GC垃圾回收机制小结

JVM内存模型是什么?可能百度的时候有一堆答案,但是死记硬背过一阵就忘了,无法真正的渗透自己的大脑,特别是像我一样非科班出身的,对于计算机还比较笼统,没有一个特定的概念,那么我这篇博客,就是通过自主学习,然后通过自己的理解,然后去理解JVM虚拟机,和内存模型等一些列概念,虽然可能对于一些人来讲说的比较浅显,但是也算自身的一种进步吧,由浅入深,逐渐的去理解就好了,嘿嘿。。。。 首先我们看一张图: ...

wuhongji2017的博客 477
上一篇: 使用NDK移植开源项目,JNI的使用技巧
下一篇: java.lang.Object中getClass()方法的用途
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值