Java - JVM内存模型及GC(垃圾回收)机制

Java GC(垃圾回收)机制知识总结 Java GC系列本部分来自Java GC系列(1):Java垃圾回收简介Java的内存分配与回收全部由JVM垃圾回收进程自动完成。与C语言不同,Java开发者不需要自己编写代码实现垃圾回收。这是Java深受大家欢迎的众多特性之一,能够帮助程序员更好地编写Java程序。下面四篇教程是了解Java 垃圾回收(GC)的基础: 垃圾回收简介 圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 这篇教 阅读详情

JVM内存模型 

JVM堆内存划分(JDK1.8以前) 

JVM堆内存划分(JDK1.8之后)

主要变化在于:

  • java8没有了永久代(虚拟内存),替换为了元空间(本地内存)。
  • 常量池:1.7又把他放到了堆内存中;1.8之后出现了元空间,它又回到了方法区。

年轻代:

新生成的对象都放在年轻代,主要存放一些生命周期比较短的对象
新生代一般分三个区:一个Eden区,两个 Survivor区:
大部分对象在Eden区中生成,当Eden区满时,还存活的对象将被复制到Survivor区,当这个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制到老年代(Tenured)。
同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

老年代:
在年轻代中经历多次垃圾回收后仍存活的对象会被放入老年代中,一般存放生命周期较长的对象

java7永久代:
用于存放静态文件,如Java类、方法等。永久带对垃圾回收没有显著影响,一般不做垃圾回收,在JVM内存中划分空间。

java8元空间:
类似于永久带,不过它是直接使用物理内存而不占用JVM堆内存。


 垃圾回收机制

Java不用像C++一样自己释放内存,通过垃圾回收器GC来进行内存的回收释放。

不需要进行垃圾回收:程序计数器、JVM栈、本地方法栈。
需要进行回收垃圾的区:堆和方法区

方法区,也不太需要被回收, 它存放的是类对象, 主要工作就是 "类加载", 但是很少会涉及到 "类卸载", 需要 GC 但不迫切。堆,才是 GC工作的主战场, 很多 new 出来的对象, 用完之后, 就需要被及时回收!!

什么时候进行垃圾回收?

该类的所有实例对象都已经被回收。
加载该类的ClassLoader已经被回收。
该类对应的反射类java.lang.Class对象没有被任何地方引用。

几种垃圾收集器:

Minor GC:新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,所以发生Minor GC的频率很高,虽然它会触发stop-the-world,但是它的回收速度很快。


Major GC:Tenured区GC,用于回收老年代,出现Major GC通常会出现至少一次Minor GC。

Full GC:是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC。Full GC不等于Major GC,也不等于Minor GC+Major GC,发生Full GC需要看使用了什么垃圾收集器组合,才能解释是什么样的垃圾回收。

垃圾回收机制流程

 

GC主要处理的是年轻代与老年代的内存清理操作,元空间(永久代)一般很少用GC。具体流程如下:

① 当一个新对象产生,需要内存空间,为该对象进行内存空间申请。

② 首先判断Eden区是否有有内存空间,有的话直接将新对象保存在Eden区。

③ 如果此时Eden区内存空间不足,会自动触发MinorGC,将Eden区不用的内存空间进行清理,清理之后判断Eden区内存空间是否充足,充足的话在Eden区分配内存空间。

④ 如果执行MinerGC发现Eden区不足,判断存活区,如果Survivor区有剩余空间,将Eden区部分活跃对象保存在Survivor区,随后继续判断Eden区是否充足,如果充足在Eden区进行分配。

⑤ 如果此时Survivor区也没空间了,继续判断老年区,如果老年区空间充足,则将Survivor区中活跃对象保存到老年代,而后存活区有空余空间,随后Eden区将活跃对象保存在Survivor区之中,在Eden区为新对象开辟空间。

⑥ 如果老年代满了,此时将产生MajorGC进行老年代内存清理,进行完全垃圾回收。

⑦ 如果老年代执行MajorGC发现依然无法进行对象保存,此时会进行OOM异常(OutOfMemoryError)。

上面流程就是整个垃圾回收机制流程,总的来说,新创建的对象一般都会在Eden区生成,除非这个创建对象太大,那有可能直接在老年区生成。

 


如何判断一个对象是否为 "垃圾"

引用计数方案:

引用计数非 Java, 别的编程语言中使用的方法, 此处也简单介绍一下, 因为在 <<深入理解 Java 虚拟机>> 这本书中, 这两种方法都提到了.

"引用计数": 是使用额外的计数器, 记录某个对象, 被多少个引用指向. 如果某一时刻, 计数器为 0 了, 就说明此时没有引用指向它了, 此时这个对象就可以视为 "垃圾" 了.

引用计数就类似上图, 每新产生一个引用, 引用计数就 + 1, 每销毁一个引用, 引用计数就-1,

销毁可以理解为如果引用是局部变量, 出了作用域就是销毁了. 如果引用是成员变量, 则该引用对应的对象被销毁时, 引用本身才被销毁.

"引用计数" 的缺陷

1. 在多线程中, 需要修改同一个引用计数, 需要考虑到线程安全问题.

2. 有可能会造成不必要的开销!!  如果本身是大的对象, 多引入一个引用计数器, 负担不大; 如果本身是小的对象, 并且数量还多, 引入引用计数器就会造成不小的空间开销.

3. 可能会带来循环引用的问题 (最致命的)

有一个 Test 类, 类中有一个 Test 类型的成员变量,  操作1 是将这个类实例化 2 个对象, 操作 2 是分别将两个对象中的引用类型的成员变量互相指向对方.

此时计数器为 2, 当 a, b 对象某一时刻被销毁时: 

此时, 当前这俩对象引用计数都不为 0, 因此就都不会被当成垃圾, 但是这俩引用的地址都在对方手里, 就导致无法使用这俩对象, 最终就成了既不能被回收, 又不能被使用, 非常类似于 "死锁". 正因为引用计数有上述三个缺陷, 所以在 Java 中就不太合适, 就没有采取这个方案.

可达性分析

Java 中真正采用判断对象是否为垃圾的方案就是 "可达性分析".

可达性分析: 以代码中一些特殊的变量作为起点(GCRoot), 然后以起点出发, 判断哪些对象能够被访问到. 如果对象能被访问到, 就标记为 "可达", 当所有能被访问到的对象都被标记成 "可达" 时, 剩下的对象就是 "不可达" 的了, 就需要被当做垃圾回收了.

>>> 什么样的变量可以被称作 "起点" - GCRoot

1. 局部变量表中的引用. (栈里面的局部变量)

栈有多个, 每个线程一个栈, 每个栈里面有很多栈帧, 每个栈帧里面有一个自己的局部变量表. 所有线程的所有栈的所有栈帧的所有局部变量表中的所有变量, 都可以视为起点 - GCRoot.

2. 常量池中对应的对象.

3. 方法区中, 静态引用类型的成员.

>>> 什么叫做能够被访问到

对于二叉树而言, 只要记住根节点, 就能判断其他结点能否被访问到了.

1. 如果在代码中写了 root.right.right = null , 那么 F 结点就不可达了, 就可以被回收了.

2. 如果在代码中写了 root.right = null, 那么 C 结点就不可达了, 同时  F 结点也被一起带走了(回收).

>>> 可达性分析相较于引用计数解决了两个缺陷: 

1. 可达性分析不需要引用计数器, 没有占用额外的空间;

2. 可达性分析不会涉及到循环引用的问题.


几种垃圾回收算法

标记-清除算法(Mark-Sweep):最基础的GC算法,将需要进行回收的对象做标记,之后扫描,有标记的进行回收,这样就产生两个步骤:标记和清除。这个算法效率不高,而且在清理完成后会产生内存碎片,这样,如果有大对象需要连续的内存空间时,还需要进行碎片整理。

复制算法(Copying):新生代内存分为了三份,Eden区和2块Survivor区,保证有一块Survivor区是空闲的,这样,在垃圾回收的时候,将不需要进行回收的对象放在空闲的Survivor区,然后将Eden区和第一块Survivor区进行完全清理,这样有一个问题,就是如果第二块Survivor区的空间不够大怎么办?这个时候,就需要当Survivor区不够用的时候,暂时借持久代的内存用一下。此算法适用于新生代。

标记-整理(或叫压缩)算法(Mark-Compact):和标记-清楚算法前半段一样,只是在标记了不需要进行回收的对象后,将标记过的对象移动到一起,使得内存连续,这样,只要将标记边界以外的内存清理就行了。此算法适用于持久代。

分代回收算法

分代回收算法是通过区域划分, 实现不同区域和不同的垃圾回收策略, 从而实现更好的垃圾回收。

分带算法给对象引入了 "年龄" 的概念, 此处的年龄单位不是年, 而是对象活过 GC 的轮次. 对象刚创建出来, 没经历过 GC 的洗礼, 就认为年龄是 0, 没经过一轮 GC, 如果没被回收, 年龄就 + 1.

>>> 它是将 "复制算法" 和 "标记-整理算法" 的方案综合起来了, 只是根据对象存活周期的不同将内存划分为 "新生代" 和 "老年代" 两块大的区域. (具体要经过多少轮 GC 才会变成老年代, 我们不关心, 我们只关注策略本身.)


1. 新创建的对象都放在伊甸区中. 伊甸区中的对象有个特点: 绝大部分对象都活不过一轮 GC ,

基本上就是 "朝生夕死" .

2. 经过一轮 GC 的考验, 还存活下来的对象就通过 "复制算法" 放到了 "幸存区".

3. 幸存区中的对象又会经过下一轮 GC 的考验, 且每经过一轮 GC 都会淘汰一部分对象, 没被淘汰的对象, 就继续通过 "复制算法" 拷贝到下一个幸存区中. (在 2 号幸存区考验时, 存活的又复制到 1 号幸存区) 这个过程, 既保留了复制算法的高效, 无内存碎片的优势, 又避免了过多的浪费空间, 因为此处浪费的幸存区的空间, 它相对整体空间来说, 微乎其微.

4. 当对象在幸存区中经历了多轮 GC , 仍然没有被销毁, 就认为该对象一时半会不会被销毁, 于是就把这个对象拷贝到 "老年代" 了.

5. 老年代的对象, 也要经历 GC 的考验, 只是考验的频率大大降低了, 如果老年代的对象即将要被回收, 就是用 "标记-整理" 算法, 因为老年代对象被回收的频率不高, 就可以接受 "标记-整理" 算法带来的时间开销.

6. 还要注意的是: 有一个小的例外, 如果当前有一个特别大的对象, 就不经历上述分代回收过程, 直接就进入老年代, 因为大的对象在复制算法中, 是不太友好的.

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

相关推荐

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

JVM内存模型 在JVM运行的时候所分配内存区的结构,分为程序计数器、虚拟机栈、本地方法栈、堆和方法区五部分。JVM占用的内存分为线程共享区 和线程私有区,线程共享区和JVM同生共死,所有线程均可访问此区域;而线程私有区顾名思义每个线程各自占有,与各自线程同生共死。 方法区:用于存储类信息、常量池、静态变量、JIT编译后的代码等数据,具体放在哪里,不同的实现可以放在不同的地方。 堆:Java堆是Java虚拟机所管理的内存中中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。

csdnlidd的博客 1704

JVM内存结构之堆(重要)

每个JVM进程有且只有一个堆,进程内的所有线程共享这块区域,堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM内存结构中最大的一块区域。由于线程共享,堆也就成了JVM内存管理的核心区域。

全栈行动派的博客 1203

Java垃圾回收机制全解析:从JVM内存模型到GC调优实战

Java垃圾回收(GC)是JVM自动管理内存的核心机制,它替代了手动释放内存的繁琐操作,有效避免内存泄漏、悬垂指针等问题。其底层原理依赖可达性分析算法,从GC Roots出发标记存活对象,并借助分代收集思想与标记-复制、标记-清除、标记-整理等算法,在不同区域采用差异化回收策略。GC机制的价值在于降低开发者心智负担,同时提升系统稳定性与吞吐量。在实际应用中,新生代Minor GC和老年代Full GC直接关联接口延迟,G1、ZGC等现代收集器通过区域化与并发标记大幅压低STW停顿,而jstat、jmap、G

weixin_30402231的博客 268

JVM堆内存详解

一、简介 JAVA堆内存管理是影响性能主要因素之一。 堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的。 先看下JAVA堆内存是如何划分的,如图: JVM内存划分为堆内存和非堆内存,堆内存分为年轻代(Young Generation)、老年代(Old Generation),非堆内存就一个永久代(Permanent Generation)。 年轻代又分为Eden和Survivor区。Survivor区由FromSpace和ToSpace组成。Ede

学Java,找哪吒 9350

Java垃圾回收的可达性判定、引用强度与经典回收算法解析

本文梳理 Java 垃圾回收的基础机制:从“找活人而非找垃圾”出发,讲清可达性分析、GC Roots 三类入口、OopMap 与安全点,并用实验说明引用计数在含环对象图上会漏掉七成的垃圾;解析强、软、弱、虚四种引用的语义、清除规则及用 Cleaner 替代 finalize 的做法;对比标记-清除、标记-复制、标记-整理的成本与碎片;结合模拟数据和 JDK 8 真实 GC 日志,剖析分代布局、动态年龄判定、分配担保、过早晋升与卡表写屏障,并梳理 JDK 8 到 25 的收集器演进与排查思路。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

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

在Java开发中,理解Java虚拟机(JVM)的内存模型和垃圾回收(GC)机制是非常重要的。JVM内存模型定义了Java程序在运行时所使用的内存结构,而垃圾回收机制则负责管理和释放不再使用的内存资源。本文将详细解析JVM内存模型和GC机制,并提供相关的源代码示例。

FvCode的博客 131

java gc回收机制种类_详解Java的垃圾回收机制(GC)

可以搜索微信公众号【Jet 与编程】查看更多精彩文章我们知道,程序在运行的时候,为了提高性能,大部分数据都是会加载到内存中进行运算的,有些数据是需要常驻内存中的,但是有些数据,用过之后便不会再需要了,我们称这部分数据为垃圾数据。为了防止内存被使用完,我们需要将这些垃圾数据进行回收,即需要将这部分内存空间进行释放。不同于 C++ 需要自行释放内存的机制,Java 虚拟机(JVM)提供了一种自动回收内...

weixin_30546683的博客 966

多视图学习 (Multi-View Learning)

多视角/多视图学习(Multi-view learning)是陶大成提出的一个研究方向。我们都知道,在机器学习中样本可以用不同的特征(如图片可以用LBP、SIFT等特征)来表示,或者从不同的角度进行观察(如从前后左右观察一个对象),甚至是采用不同的传感器来观测(如RGB摄像头,Depth摄像头),这些不同的观测手段、角度或特征在多视角学习中称为“视角”。多视角学习通过对不同的视角进行统一分析和研究,希望能够得到更好的分类或聚类等等的效果。

CarpeDiem 3万+

Java的JVM内存模型深度剖析:GC机制与性能调优

JVM内存模型深度剖析:GC机制与性能调优

微风不留尘 1283

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

PS/Ai/PR/AE等adobe出现正版弹窗提示:Your non-genuine Adobe app will be disabled soon解决办法

就是用专门的清理工具下载,清理工具在文章下方。然后新建三个空的记事本文件,重命名为 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。在该文件目录中,分别找到 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe,然后在防火墙入站规则里,阻止Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。

Q82556499的博客 1万+

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

Java内存模型(JMM)作为多线程编程的核心规范,明确定义了共享变量(包含对象字段与数组元素)的访问规则,以及线程间的数据交互机制。其核心目标是建立线程操作可见性、指令执行有序性的标准化模型,确保并发环境下的程序可预测性。Java内存模型通过happens-before规则与内存屏障技术,在编译器优化与硬件执行之间建立安全桥梁,为开发者提供可预测的并发编程模型。配合分代垃圾回收机制的多算法协同,实现从毫秒级到TB级内存的高效管理。

suran36的博客 887

别再只用LSTM了!用Temporal Fusion Transformer (TFT) 搞定多变量时序预测,附PyTorch实战代码

本文介绍了Temporal Fusion Transformer (TFT) 在多变量时序预测中的优势,并提供了PyTorch实战代码。TFT通过三重注意力机制解决了LSTM在特征交互、静态特征处理和解释性方面的不足,显著提升了预测精度和可解释性。文章详细讲解了TFT的核心组件构建、数据预处理、模型训练技巧及可解释性分析,帮助开发者快速掌握这一先进时序预测技术。

weixin_33712987的博客 279

JVM之垃圾回收机制(GC)

在做Java开发的过程中,我们会不断地创建很多的对象,这些对象数据会占用系统内存,如果得不到有效的管理,内存的占用会越来越多,甚至会出现内存溢出的情况,所以,我们需要进行对内存进行合理地释放,这个时候GC就派上大用场的。垃圾回收(GC)是由Java虚拟机(JVM)垃圾回收器提供的一种对内存回收的一种机制,它一般会在内存空闲或者内存占用过高的时候对那些没有任何引用的对象不定时地进行回收。1.对于强引用,平时在编写代码时会经常使用。第一次标记如果对象在进行可达性分析后发现没有与第二次标记。...

weixin_72753070的博客 1万+

5分钟搞定阿里云千问大模型API申请:手把手教你获取API Key

本文提供了一份高效的阿里云通义千问大模型API Key获取实战指南。通过清晰的步骤,帮助开发者在五分钟内完成从账号准备、精准导航控制台到创建并验证API Key的全过程,并强调了密钥安全管理和基础调用测试的重要性,助力快速集成AI能力。

ol789012345的博客 1343

32位快速加法器设计

32位快速加法器设计

好好学习,天天向上 3289

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

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

qq_36534560的博客 2179

华为OD机试 双机位A卷 - 流量波峰 (C++ & Python & JAVA & JS & GO)

华为OD机试双机位A卷 流量波峰,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1377

JVM内存模型,GC垃圾回收器与回收算法详解

以具体案例带你深入理解JVM内存模型,对象存储与回收

在路上 812

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2354

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

大模型全栈工程师 · Thanks_ks 1347

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java JVM基础:一篇文章彻底搞懂GC(JVM运行时数据区、GC回收算法、垃圾回收器)

Java相较于其他编程语言更加容易学习,这其中很大一部分原因要归功于JVM的自动内存管理机制。对于从事C语言的开发者来说,他们拥有每一个对象的「所有权」,更大的权力也意味着更多的职责,C开发者需要维护每一个对象「从生到死」的过程,当对象废弃不用时必须手动释放其内存,否则就会发生内存泄漏。而对于Java开发者来说,JVM的自动内存管理机制解决了这个让人头疼的问题,不容易出现内存泄漏和内存溢出的问题了,GC让开发者更加专注于程序本身,而不用去关心内存何时分配、何时回收、以及如何回收。

学亮编程手记 2543

Devexpress16.2.6破解工具

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java 垃圾回收器 GC

看过的觉得讲的比较好的文章,再总结下自己的想法

Javazzc123的专栏 642

为什么你的GC频繁?1024节深入剖析Java垃圾回收机制与优化路径

auto-generated

LogicShoal的博客 811

JVM 的垃圾回收机制

JVM垃圾回收(GC)机制是Java自动内存管理的核心,通过分代收集策略(新生代/老年代)和多种算法(标记-清除、复制、标记-整理)自动回收内存。它基于可达性分析判断对象存活,触发Minor GC或Full GC进行清理。调优可通过参数配置(堆大小、收集器选择)和工具监控(jstat、VisualVM)实现,解决内存泄漏、GC停顿等问题,确保应用性能。理解GC原理对Java开发至关重要。

weixin_73916358的博客 1158

JVM原理+GC自动垃圾回收机制原理(详细且通俗易懂)

什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),...

miroCyber的博客 1810
上一篇: Java - JVM内存区域的划分
下一篇: Java - Spring项目的统一功能处理
「已注销」
博客等级 码龄5年 413粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值