首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >虚拟机

虚拟机

作者头像
Qwe7
发布于 2022-08-07 00:33:55
发布于 2022-08-07 00:33:55
8350
举报
文章被收录于专栏:网络收集网络收集

垃圾回收

Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配,堆区是垃圾收集器管理的主要区域。

开发者使用 System.gc() 方法可以提醒 JVM 进行垃圾回收,但不能强制。

分区回收

现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代。进一步划分的目的是更好地回收内存,或者更快地分配内存。

  • 新生代 GC (Minor GC) :新生代垃圾回收非常频繁,回收速度也比较快。
  • 老年代 GC (Major GC) :老年代垃圾回收次数较少,回收速度也明显更慢。

初次分配对象

新生代分为 eden 区和 survive 区, 其中 eden 区占用内存空间更大。

大多数情况下,对象在新生代 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC。

长期存活对象

虚拟机给每个对象设置一个年龄计数器。如果对象经过一次 Minor GC 后仍然能够存活,将从 eden 移动到 survive 空间中。对象每熬过一次 Minor GC,年龄就增加 1 岁。当它的年龄增加到一定程度(默认为 15 岁),就会晋升到老年代。

survive 区分为 from 区和 to 区两块大小相等的内存空间。Minor GC 执行时,会将 eden 区和 from 区中的存活对象复制到 to 区,清除 eden 区和 from 区内存。再把这些存活对象从 to 区移动回 from 区。

当老年代也没有足够空间进行分配时,虚拟机将发起一次 Major GC。

大对象

需要大量连续内存空间的对象(如字符串、数组)直接进入老年代,可以避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java虚拟机基础——4内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java的时候)和内存回收,和C不同,这方面读是由JVM来完成的,避免了C/C++直接操作的风险,同时也降低了学习Java的难度。虽然内存管理完全由JVM负责,但是如果程序员不了解内存分配,就会导致高耗内存、内存泄露等问题。所以Java程序员还是要学习JVM的内存回收机制。才能写出更高效的代码。
隔壁老李头
2018/10/10
5140
Java虚拟机详解(六)------内存分配
  我们说Java是自动进行内存管理的,所谓自动化就是,不需要程序员操心,Java会自动进行内存分配和内存回收这两方面。
IT可乐
2019/09/27
9701
Java 虚拟机系列二:垃圾收集机制详解,动图帮你理解
上篇文章已经给大家介绍了 JVM 的架构和运行时数据区 (内存区域),本篇文章将给大家介绍 JVM 的重点内容——垃圾收集。众所周知,相比 C / C++ 等语言,Java 可以省去手动管理内存的繁琐操作,很大程度上解放了 Java 程序员的生产力,而这正是得益于 JVM 的垃圾收集机制和内存分配策略。我们平时写程序时并感知不到这一点,但是如果是在生产环境中,JVM 的不同配置对于服务器性能的影响是非常大的,所以掌握 JVM 调优是高级 Java 工程师的必备技能。正所谓“基础不牢,地动山摇”,在这之前我们先来了解一下底层的 JVM 垃圾收集机制。
架构之家
2022/07/12
3950
Java 虚拟机系列二:垃圾收集机制详解,动图帮你理解
《深入理解 java 虚拟机》学习 -- 内存分配
当年轻代满时就会触发Minor GC,这里的年轻代满指的是 Eden 代满,Survivor 满不会引发 GC。
希希里之海
2019/08/24
7010
Java虚拟机:JVM内存分代策略
Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。
业余草
2019/01/21
6150
Java虚拟机:JVM内存分代策略
Java虚拟机知识点快速复习手册(上)
Csdn全复习手册文章导航:https://blog.csdn.net/qqxx6661/article/details/86775594
蛮三刀酱
2019/03/26
4060
Java虚拟机知识点快速复习手册(上)
Java虚拟机
程序计数器不会产生StackOverflowError和OutOfMemoryError.
知识浅谈
2022/01/01
1K0
Java虚拟机--对象回收
上一篇:Java虚拟机--Java堆中对象的创建和布局 哪些内存需要回收? 程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收问题,因为方法结束或线程结束时,内存自然就跟着回收了。而Java堆和方法区则不一样:一个接口的多个实现类需要的内存可能不一样,一个方法中多个分支需要的内存也可能不一样,只有在程序处于运行时才会知道要创建哪些对象,这部分内存的分配和回收都是动态的,垃圾回收器关注的是这部分内存。 怎么判断一个对象要被回收? 引用计数
SuperHeroes
2018/05/22
4570
Java虚拟机之垃圾收集算法
要想了解Java虚拟机的垃圾收集算法就要知道分代收集理论,因为当前大多数商用垃圾收集算法都是基于分代收集理论进行的。
@派大星
2023/06/28
1990
Java虚拟机之垃圾收集算法
Java虚拟机面试题(2021最新版)
我坚信,机会永远属于有准备的人,我们与其羡慕他人的成功,不如从此刻起,积累足够多的知识和面试经验,为将来进入更好的公司做好充分的准备!想让面试官在短短的几十分钟内认可你的能力?想在最短的时间内收获 Java 技术栈最核心的知识点?想要更全面更深入的了解 Java 技术?这篇文章给你想要的所有答案。
Java程序猿
2021/04/30
3.3K0
Java虚拟机知识点快速复习手册(上)
https://blog.csdn.net/o_nianchenzi_o/article/details/78629929
Rude3Knife的公众号
2019/08/07
5320
Java虚拟机知识点快速复习手册(上)
深入理解JVM—JVM垃圾回收机制[通俗易懂]
如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。
全栈程序员站长
2022/08/31
1.6K0
Java虚拟机:垃圾回收机制与垃圾收集器
JVM内存区域的程序计算器,虚拟机栈、本地方法栈的生命周期是和线程同步的,随着线程的销毁而自动释放内存,所以只有堆和方法区需要GC,方法区主要是针对常量池的回收和对类型的卸载,堆区针对的是不再使用的对象进行回收内存空间。我们常说的GC一般指的是堆区的垃圾回收,堆内存空间可以进一步划分新生代和老年代,新生代会发生Minor GC,老年代会发生Full GC。
全栈程序员站长
2021/04/13
4020
Java虚拟机:垃圾回收机制与垃圾收集器
深入浅出java虚拟机
我们都知道,当虚拟机执行Java代码的时候,首先要把字节码文件加载到内存,那么这些类的信息都存放在内存中的哪个区域呢?当我们创建一个对象实例的时候,虚拟机要为对象分配内存,Java虚拟机又是如何配分内存的呢?这些都涉及到Java虚拟机的内存划分机制,今天我们就来探究一下Java虚拟机的内存模型。
烂猪皮
2020/09/10
4490
深入浅出java虚拟机
虚拟机篇 之「垃圾收集与内存分配策略」
在 Java 对象被回收之前,首先需要判断该对象是否已经过期或者死亡?常见的判断一个对象是否过期的算法主要有两种,分别为:
CG国斌
2019/05/26
4330
Java虚拟机(JVM)面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
3.2K0
深入理解Java虚拟机(自动内存管理机制)
书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的。周志明老师的这本《深入理解 Java 虚拟机》我细读了不下三遍,每一次阅读都有新的收获,每一次阅读对 Java 虚拟机的理解就更进一步。因而萌生了将读书笔记整理成文的想法,一是想检验下自己的学习成果,对学习内容进行一次系统性的复盘;二是给还没接触过这部好作品的同学推荐下,在阅读这部佳作之前能通过我的文章一窥书中的精华。
张磊BARON
2019/07/31
5080
深入理解Java虚拟机(自动内存管理机制)
深入理解JVM虚拟机---垃圾回收与内存分配
​ 很多教科书判断对象是否存活的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。笔者面试过很多应届生和一些有多年工作经验的开发人员,他们对于这个问题给予的都是这个答案。
俺也想起舞
2020/09/27
5070
GC - Java 垃圾回收机制教科书级教学
注意:垃圾收集主要是针对堆和方法区进行;程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。
Java编程指南
2022/05/31
1K0
GC - Java 垃圾回收机制教科书级教学
Java虚拟机面试题精选(一)
现在面试Java开发时,基本都会问到Java虚拟机的知识,根据职位不同问的内容深浅又有所区别。本文整理了10道面试中常问的Java虚拟机面试题,希望对正在面试的同学有所帮助。
Java架构师必看
2021/05/18
4610
Java虚拟机面试题精选(一)
相关推荐
Java虚拟机基础——4内存回收机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档