首页 > 试题广场 >

说说JVM的垃圾回收机制

[问答题]
垃圾回收机制主要完成三件事情: 1.哪些内存需要回收:废弃的常量,不再被引用的对象等 2.什么时候回收:当类不再被使用 3.如何回收:用引用计数法判断对象是否存活,采用垃圾收集器进行回收
发表于 2022-04-26 15:37:40 回复(5)
JVM的垃圾回收机制是遵循分代收集理论进行设计的,主要分为四种收集方式:1.新生代收集,目标为新生代的垃圾收集。2.老年代收集:目标为老年代的垃圾收集,目前只有CMS收集器会有这种行为。3.混合收集:目标为整个新生代及部分老年代的垃圾收集,目前只有G1收集器会有这种行为。4.整堆收集:目标为整个方法区和堆的垃圾收集。常见的垃圾回收算法包括:标记清除算法:缺点:内存碎片化,优点:速度快。标记复制算法:缺点占用内存大,优点:内存连续。标记整理算法:优点:内存连续,缺点:整理效率低。
发表于 2022-05-27 17:24:42 回复(0)
垃圾回收通常由三件事情要做,第一将决定哪些对象要回收,JVM决定了将未被引用的对象占用空间回收,通常用引用计数法或者可达性分析法,后者是JVM主流使用方法。第二是什么时候回收JVM,通常在内存不够用时或者定期回收。第三是用什么方式回收。有分代回收、分区域回收法,收集器由年轻代收集器Serial,ParNew,Parallel Scavenge,老年代有CMS,Serial Old,Parallel Old,G1是分区回收器的新工具,可以并发标记,并发回收。
发表于 2022-07-18 10:17:21 回复(0)
积极
发表于 2022-04-16 22:44:32 回复(1)
垃圾回收通常有三件事情要做,第一将决定哪些对象要回收,jvm决定了将未被引用的对象占用空间回收,通常用引用计数法或者可达性分析法,后者是jvm主流使用方法. 第二什么时候回收JVM,通常在内存不够用时,或定期回收, 第三用什么方式回收。有分代回收,分区域回收法,收集器由年轻代收集器Serial,ParNew,Parallel Scavenge, 老年代有CMS,Serial Old, Parallel Old . G1 是分区回收器的新工具,可以并发标记,并发回收。
发表于 2022-06-06 16:48:31 回复(0)
● jvm垃圾回收主要分为两个阶段,垃圾标记阶段和垃圾清除阶段,垃圾标记主要有两种算法,引用计数算法和可达性分析算法,引用技术算法无法解决循环依赖问题,所以java的垃圾回收器主要使用的是可达性分析算法。垃圾清除阶段有标记-清除算法、复制算法、标记压缩算法和增量收集算法 ● 垃圾回收主要发生堆,堆分为新生代、老年代,对新生代的垃圾收集称为Minor GC,对老年代的垃圾收集称为Major GC,整堆垃圾收集称为Full GC ● 首先新生成的对象都是放在Eden区,当Eden区满了不能创建对象,则触发Minior GC,将无用的对象清除,有用的对象复制到Survivor中任意一个(如s1),同时清空Eden区。当Eden区再次满了,将s1和Eden区有用的对象复制到s2区。(如此循环下去,保证Survivor区一个有用一个为空,Survivor区中对象有年龄,默认超过15次GC的,复制到Old区),Old区的对象达到一定比例启动Major GC。当Old区也满了将会触发一次完整地垃圾回收(FullGC)
编辑于 2023-02-09 14:22:11 回复(1)
【新生代、老年代、混合收集、整堆收集】 回收废弃常量、不再被引用的对象;当类不再被使用;引用计数法判断对象是否存活,采用垃圾收集器进行回收; 新生代(Serial、ParNew、parallel scavenge)老年代(CMS、Serial Old、parallel old)整堆(G1)
发表于 2022-06-14 12:27:09 回复(0)
垃圾回收机制要搞清楚这几件事:1、什么是垃圾,在JVM是怎么判断是否是垃圾;2、垃圾回收是什么,怎么进行垃圾回收,有哪些回收算法,及其实现的原理。我认为应该就这些吧,还有什么希望大家能够指出
发表于 2022-07-23 11:10:49 回复(0)
垃圾回收机制主要完成三件事情: 1.哪些内存需要回收:废弃的常量,不再被引用的对象等 2.什么时候回收:当类不再被使用 3.如何回收:用引用计数法判断对象是否存活,采用垃圾收集器进行回收
发表于 2022-05-26 17:38:26 回复(1)
jvm新生代垃圾回收机制:当新生代中Eden区的空间占满对象过后,通过minor gc将死去的对象(指没有被gc root所引用的对象)清理掉,将存活的对象(指被gc root所引用的对象)通过复制算法放入survivor区(假设分成名为s0或者s1)的其中一块空闲的区域,如果s0或者s1中既有对象存活也有对象需要被清理,那么将死去的对象一起清理掉,将存活的对象复制到另一个空闲的区域,并且将在s0或者s1区域每次复制的对象都增加一次年龄,当达到15岁时放入老年代(minor gc 默认次数),当然也可以设置cms gc(默认6次)。当然还可以通过设置jvm参数选择是否开启动态年龄判断,老年代空间担保机制。
发表于 2023-05-16 14:04:49 回复(0)
垃圾回收机制主要完成三件事:1.哪些内存需要回收:废弃的常量,不在被引用的对象等2.什么时候回收:当类不再被使用3.如何回收:用引用计数法判断对象是否存活,采用垃圾收集器进行回收 希望大佬指正
发表于 2023-04-16 20:53:42 回复(0)
垃圾回收机制有以下四种。 1.前提:由于下面设计到一些分代模型的回收,所以先介绍三种分代假说, 1.大部分对象都是朝生夕灭的。2.某些对象经历过的GC越多越难死。3.跨代引用的情况是非常少见的。 由于这三种假说的存在,我们可以将堆划分为新生代,老年代,在之后的版本中由于有些虚拟机摒弃了分代模型,所以是混合收集(就是G1使用的收集策略)。 1.新生代收集(Young GC, Moinr GC):从名字看出这是一个针对于新生代的收集策略,新生代中的区域默认为 eden:from serviour:to serviour = 8:1:1 , 采用的收集算法是标记-复制算法,其中每次GC会将一块serviour区域作为这个算法的备份区域,将eden+一块serviuor 区域中的存活对象移动到这里,这样只会浪费 10%的新生代空间 这个逻辑能够成立的前提是分代假说中的第一点,实际上在生产环境中一次Young GC也可以回收大约95%的空间,但是如果出现了意外情况,导致这块serviour区域中不能存放这个多的数据时, 会触发jvm的临时保护机制,即逃逸保证,将一些新生代中的对象提前移动到老年代中。一般是新生代空间不足时会触发。 2.老年代收集(Old GC, Major GC):这是针对老年代的策略,在老年代中的对象回收频率很低,因为根据这个假说,这里的对象都是不容易死的。所以采用它采用了标记-整理算法。 如果是标记-复制,拿就需要拿出一半的空间作为备份空间,实际上在JVM中也是这样的,JVM总是以较高的频率去回收新生代,以较低的频率去回收老年代。 当老年代空间不足时会触发这个GC。 3.混合收集(Mixed GC):在当前的垃圾收集器中,只有G1使用的是这种策略。G1的策略是一个GC回收所有的新生代Region,和部分老年代Region,在对这组需要回收的空间做动态规划, 算出性价比最高的一组Region区域回收,注意,虽然G1之后的收集器在物理上不分代了,但是逻辑上还是分的。 4.整堆收集(Full GC):对整个堆进行垃圾收集。包括新生代和老年代一起,触发条件一般是 1. java 程序中调用了 System.gc() 会触发一次 Full GC, 2.在做了一次GC之后,还是无法分配足够的内存空间,则会触发Full GC。如果这次的Full GC还无法分配足够的空间,则会回收软引用对象,如果还没办法,就会抛出 OutOfMemoryError。
编辑于 2023-03-20 12:31:52 回复(0)
<Curry30>头像
java相较于c、c++语言的优势之一是自带垃圾回收器,垃圾回收是指不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,程序员唯一能做的就是通过调用System.gc 方法来建议执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。这也是垃圾收集器的最主要的缺点。当然相对于它给程序员带来的巨大方便性而言,这个缺点是瑕不掩瑜的。
发表于 2023-03-12 16:34:15 回复(0)
标记-清除算法,标记-整理算法,复制算法,分代收集算法
发表于 2022-09-18 15:23:42 回复(0)
垃圾收集器大多数遵循“分代收集”的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则。建立在三个分代假说之上,即弱分代假说(大多数对象都是朝生息灭)、强分代假说(熬过越多次垃圾回收越难被回收)、跨代引用假说(跨代引用是极少数的)。 垃圾回收机制主要完成三件事情: 1.哪些内存需要回收:废弃的常量,不在被引用的对象; 2.什么时候回收:当类不再被引用; 3.如何回收:用引用计数法或可达性分析(主流)判读对象是否存活,采用垃圾收集器进行回收。 分代理论,将垃圾回收分为你如下几类,新生代(serial,parNew,parallel Scavenage),老年代(cms,serial old,parallel old),混合收集(G1),整堆收集(G1) 垃圾回收还根据客户端和服务段的关系进行组合如下:serial+serialOld用于客户端的垃圾收集,parnew+CMS用于服务端的垃圾回收,parallel scavage+parallelOld用于后台运算量的系统。
发表于 2022-09-15 16:20:06 回复(0)
垃圾回收机制主要包括:新生带收集:主要用于对新生带的垃圾进行回收,主要包括serial垃圾收集器,parnew垃圾收集器和parallel scavage垃圾收集器,老年代收集:针对老年代进行垃圾收集,主要包括serialOld垃圾收集器,parallel old垃圾收集器和CMS垃圾收集器,混合收集:针对新生带和部分老年带进行垃圾回收,例如G1垃圾收集器,整堆收集:同时对堆和方法区进行垃圾回收。垃圾回收还根据客户端和服务段的关系进行组合如下:serial+serialOld用于客户端的垃圾收集,parnew+CMS用于服务段的垃圾回收,parallel scavage+parallelOld用于后台运算量的系统。
发表于 2022-05-18 15:23:26 回复(0)
JVM的垃圾回收机制主要是完成三件事情: 1. 哪些内存需要回收: 使用可达性分析和引用计数法判断对象是否存活和使用,对不再使用和存活的对象进行回收 2. 什么时候回收: 当类不再被使用 3. 如何回收:用可达性分析法判断对象是否存活,采用垃圾收集器进行回收
编辑于 2024-04-02 17:34:05 回复(0)
1.如何判断是否为垃圾 可达性分析 引用计数法 2、垃圾回收算法:标记清楚、标记整理、复制算法 3、垃圾回收的区域:堆(新生代、老年代)
编辑于 2024-03-16 14:44:15 回复(0)
垃圾回收机制 分为 新生代回收 目标为新生代的收集 老年代回收 目标为老年代的收集 常用CMS收集器 混合回收 两者一起回收 常用G1收集器
编辑于 2024-03-05 20:02:38 回复(0)
垃圾回收分类: 1.新生代收集:垃圾收集器有-serial,parnew,parallel scavenge 2.老年代收集:垃圾收集器有-serial old,cms, parallel old 3.混合收集:整个新生代和部分老年代的垃圾收集,G1收集器有此行为 4.整堆收集:整个堆和方法区的垃圾收集 客户模式下常用:serial+serial old 服务端模式下常用:parnew + cms 后台运算:parallel scavenge + parallel old
编辑于 2024-03-02 17:29:26 回复(0)