首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java虚拟机如何决定使用哪种垃圾收集方法?

Java虚拟机(JVM)决定使用哪种垃圾收集方法是基于以下几个因素:

  1. 对象的存活周期:JVM通过跟踪对象的引用关系来确定对象的存活周期。如果对象的存活周期较短,那么使用一种适合短生命周期对象的垃圾收集方法;如果对象的存活周期较长,那么使用一种适合长生命周期对象的垃圾收集方法。
  2. 垃圾收集器的选择:JVM提供了不同类型的垃圾收集器,如串行收集器、并行收集器、并发收集器等。不同的垃圾收集器有不同的特点和适用场景。JVM根据当前系统的配置和需求选择合适的垃圾收集器。
  3. 堆内存的大小:JVM会根据堆内存的大小来选择垃圾收集方法。如果堆内存较小,那么使用一种适合小内存环境的垃圾收集方法;如果堆内存较大,那么使用一种适合大内存环境的垃圾收集方法。
  4. 系统的性能需求:不同的垃圾收集方法对系统的性能有不同的影响。JVM会根据系统的性能需求选择合适的垃圾收集方法,以达到最佳的性能表现。

总结起来,Java虚拟机决定使用哪种垃圾收集方法是基于对象的存活周期、垃圾收集器的选择、堆内存的大小和系统的性能需求等因素综合考虑的。具体选择哪种垃圾收集方法需要根据实际情况进行评估和调优。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java虚拟机--垃圾收集算法和垃圾收集

上一篇:Java虚拟机--对象回收 垃圾收集算法: 标记-清除法: 分为标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收被标记的对象。...复制算法: 将内存划分成大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的那块内存一次性的清理掉。...分代收集算法: 根据对象的存活周期将内存分为几块,Java一般分为新生代和年老代,这样就可以根据各个代的不同特点采用最合适的收集算法。一般新生代采用复制算法,年老代采用标记清除法或标记整理法。...算法实现: 枚举根结点:使用准确式GC进行根结点收集,HotSpot中是用一组称为OopMap实现的。 安全点:程序执行时不是在所有地方都可以停下来进行GC,只有在达到安全点时才能暂停。...垃圾收集器: ?

44490

Java虚拟机(四)垃圾收集算法

它把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。复制算法的执行过程如下图所示。 ?...4.分代收集算法 Java堆区的空间划分 在Java虚拟机中,各种对象的生命周期会有着较大的差别,大部分对象生命周期很短暂,少部分对象生命周期很长,有的甚至和应用程序以及Java虚拟机的运行周期一样长。...现在主流的Java虚拟机垃圾收集器都采用分代收集算法(Generational Collection)。...分代收集 根据Java堆区的空间划分,垃圾收集的类型分为两种,它们分别是: Minor Collection:新生代垃圾收集。...参考资料 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》第二版 《Java虚拟机精讲》 《HotSpot实战》

61570

Java虚拟机垃圾收集算法

要想了解Java虚拟机垃圾收集算法就要知道分代收集理论,因为当前大多数商用垃圾收集算法都是基于分代收集理论进行的。...,从而引出了Java堆的不同区域(新生代、老年代),从而兼顾了垃圾收集时间和内存空间的有效利用;从而衍生出 Minor GC、Major GC、Full GC的各种回收类型,针对不同区域不同回收类型发展出了不同的垃圾回收算法...Mixed GC:混合收集,指的是整个新生代和部分老年代的垃圾收集,目前只有G1垃圾收集器有这种行为 Full GC:整堆收集收集这个Java堆和方法区的垃圾收集 垃圾收集算法 标记-清除算法 最早、...HotSpot虚拟机的Serial、ParNew等新生代收集器均采用的是这种方式设计的内存布局。...HotSpot虚拟机默认Eden和Survivor的比例是8:1(HotSpot 中的这种分代方式从最初就是这种布局) 但是这么设计也有一个弊端,那就是当垃圾收集开始时万一有超过10%的对象存活那么就会发生内存不够的问题

16510

Java 虚拟机垃圾收集机制详解

0x01、垃圾收集发生的区域 之前我们介绍过 Java 内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程共存亡。...栈中的每一个栈帧分配多少内存基本上在类结构确定下来时就已知,因此这几个区域的内存分配和回收都具有确定性,不需要考虑如何回收的问题,当方法结束或线程结束,内存自然也跟着回收了 而 Java 堆和方法区这两个区域则有显著的不确定性...,只有在程序运行时我们才能知道程序究竟创建了哪些对象,创建了多少对象,所以这部分内存的分配和回收是动态的,垃圾收集器所关注的正是这部分内存该如何管理 0x02、如何判定需要被回收的对象?...finalize() 方法运行代价高,不确定性大,无法保证各个对象的调用顺序,因此已被官方明确声明为不推荐使用的语法 0x05、回收方法方法区的垃圾收集主要回收两部分:废弃的常量和不再使用的类型。...);把难以消亡的对象集中在一起,虚拟机就可以使用较低的频率来回收这个区域,即老年代(Old Generation) 正因为划出了不同的区域,垃圾收集器才可以每次只回收其中一个或多个区域,因此才有了“Minor

20930

深入理解Java虚拟机垃圾收集

概述 GC即垃圾回收,是指jvm用于释放那些不再使用的对象所占用的内存。 垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。...在Java语言中,可作为 GC Roots 的队形包括下面几种: 虚拟机栈(帧栈中的本地变量表)中引用的对象。 方法区中类静态属性引用的对象。 方法区中常量引用的对象。...yes,i am still alive no,i am dead : ( ---- 回收方法区 很多人认为方法区(或者 HotSpot 虚拟机中的永久代)是没有垃圾收集的,Java 虚拟机规范中确实说过可以不要求虚拟机方法区实现垃圾手气...,而且在这个方法区中进行垃圾收集的 “性价比” 一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收 70% ~ 95% 的空间,而永久代的垃圾收集效率远低于此。...永久代中的垃圾收集主要回收两部分内容:废弃常量和无用的类。回收废弃常量与回收 Java 堆中的对象非常类似。

20820

Java虚拟机——垃圾回收算法与垃圾收集

Java运行时的几个数据区域中,程序计数器,虚拟机栈,本地方法栈3个区域随着线程而生,随线程而灭,因此这几个区域的内存分配和回收具有确定性,不需要过多考虑垃圾回收问题,因为方法结束或者线程结束时,内存就回收了...4.分代收集算法 目前商业虚拟机中都使用分代收集算法。一般将Java堆分为新生代和老年代,新生代进行垃圾收集发现有大量对象死去,只有少量对象存活,那么就使用复制算法。...老年代中对象存活率较高,使用标记-清除算法或者标记-整理算法。 二、垃圾收集垃圾收集算法提供了内存回收的方法论,垃圾收集器是内存回收的方法论。...这个虚拟机中包含的垃圾收集器有如下7种: 以上收集器之间如果有连线,则表明可以搭配使用虚拟机所处区域,表示他是新生代收集器还是老年代收集器。...三、垃圾收集参数总结 参数 描述 UseSerialGC 虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old的收集器组合进行内存回收 UseParNewGC 打开此开关后

31000

Java虚拟机详解(四)------垃圾收集

上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢...1、垃圾收集器种类   事实上Java虚拟机规范对垃圾收集器应该如何实现,并没有任何的规定,所以不同的厂商、不同版本的虚拟机所提供的垃圾收集器都会有所不同,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用收集器...将整个Java堆划分为多个大小固定的独立区域(Regin),并且跟踪这些区域的垃圾堆积面积,在后台维护一个优先级列表,每次根据允许的收集时间,优先回收垃圾最多的区域,这样保证了G1收集器在有限的时间内可以获得最高的收集效率...③、作用于整个Java堆   G1收集器不区分年轻代和老年代,是整堆垃圾收集器。...9、如何选择垃圾收集器     详细文档可以查看官方介绍,如下 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/collectors.html

48320

Java虚拟机垃圾回收机制与垃圾收集

一、垃圾回收机制: 1、垃圾回收的过程: JVM内存区域的程序计算器,虚拟机栈、本地方法栈的生命周期是和线程同步的,随着线程的销毁而自动释放内存,所以只有堆和方法区需要GC,方法区主要是针对常量池的回收和对类型的卸载...GC Roots对象包括: 虚拟机栈(栈帧中的本地变量表)中引用的对象; 本地方法栈中JVM(Native)引用的对象; 方法区中类静态属性引用的对象; 方法区中常量引用的对象。...二、垃圾收集器: ? 1、Serial收集器: Serial收集器是一个新生代收集器,使用复制算法。...(吞吐量= 程序运行时间/(程序运行时间 + 垃圾收集时间),虚拟机总共运行了100分钟。其中垃圾收集花掉1分钟,那吞吐量就是99%)。...碎片化带来的风险是极大的,严重影响JAVA程序的性能。

33320

Java虚拟机垃圾收集器(5)

一、关于Java垃圾回收的简介 (1)Java 内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作...二、垃圾回收的一种方法:引用计数算法 我们在面试的时候,当问到如何判断对象是否存活,我们也许会回答:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1;当引用失效时,计数器值就减 1;...这个答案是正确的,但是Java语言中并没有使用这种方法作为垃圾回收机制。...六、回收方法区 (以下是书上直接找的,不做理解) 很多人认为方法区(或者 HotSpot 虚拟机中的永久代)是没有垃圾收集的, Java 虚拟机规范中确实说过可以不要求虚拟机方法区实现垃圾收集,而且在方法区进行垃圾收集的...永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。 回收废弃常量与回收 Java 堆中的对象非常类似。

25140

LT【深入Java虚拟机】之八:Java垃圾收集机制

Java语言里,可作为GC Roots的兑现包括下面几种: 虚拟机栈(栈帧中的本地变量表)中引用的对象。 方法区中的类静态属性引用的对象。 方法区中的常量引用的对象。...当对象没有覆盖finalize()方法,或finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为没有必要执行。...分代收集     当前商业虚拟机垃圾收集 都采用分代收集,它根据对象的存活周期的不同将内存划分为几块,一般是把Java堆分为新生代和老年代。...垃圾收集器     垃圾收集器是内存回收算法的具体实现,Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别。...性能调优     Java虚拟机的内存管理与垃圾收集虚拟机结构体系中最重要的组成部分,对程序(尤其服务器端)的性能和稳定性有着非常重要的影响。

39710

Java垃圾收集方法有哪些?

Java垃圾收集方法有哪些?...它负责自动识别和回收不再使用的对象,释放内存空间,从而提高应用程序的性能和可靠性。本文将介绍Java中的几种常见的垃圾收集方法,并通过示例代码演示它们的使用。1....复制算法复制算法(Copying)是一种常用的垃圾收集算法,主要应用于新生代的垃圾回收。复制算法将堆内存分为两个区域:From空间和To空间。对象的存活与否由新生代内存的存活区域来决定。...调用System.gc()触发垃圾回收,最终会调用finalize()方法输出相应的信息。结论Java中提供了多种垃圾收集方法,每种方法都有其适用的场景和特点。...根据具体的应用场景和内存需求,可以选用合适的垃圾收集方法来优化应用程序的性能和内存利用率。

15220

Java虚拟机内存管理(五)-垃圾收集

),也可以通过下面的代码打印出正在使用垃圾收集器。...参数 描述 UseSerialGC 虚拟机运行在 Client 模式下的默认值,使用 Serial + Serial Old 收集器组合回收内存 UseParNewGc 使用 ParNew + Serial...在前面,我们提到分代收集算法将堆内存区域再次划分,综合了其他算法的优点,所以主流的虚拟机也是根据不同年代的内存区域,使用不同算法实现的收集器,下面将逐一介绍这些垃圾收集器。...你可能会说打扫的时候不能有人再扔垃圾了,没错就是这样,在 Java 虚拟机中,垃圾收集器就像打扫卫生的人,可能有一个也可能有多个,对应也就是单线程和多线程,其他线程就像是扔垃圾的人。...垃圾收集器打扫卫生肯定也是需要时间,在这个时间不能有其他线程 “扔垃圾”,也即是暂停其他线程使用直到垃圾收集结束。在 Java 虚拟机中,这种事情叫做 “Stop The Word”,简称 STW。

53421

深入理解Java虚拟机(JVM) --- 垃圾收集算法(中)

()中出现耗时操作,虚拟机就直接停止执行,将该对象清除 对象重生或死亡 如果在执行finalize()方法时,将this赋给了某一个引用,则该对象重生 如果没有,那么就会被垃圾收集器清除注意:强烈不建议使用...,那么在堆中就会有一个代表该类的对象:java.lang.Class.这个对象在类被加载进方法区的时候创建,在方法区中该类被删除时清除. 4 垃圾收集算法 4.1 清除(Sweep) 最基础的收集算法,...接下来就使用Survior2+Eden进行内存分配 通过这种方式,只需要浪费10%的内存空间即可实现带有压缩功能的垃圾收集方法,避免了内存碎片的问题. 4.2.3 分配担保 准备为一个对象分配内存时,发现此时...根据对象存活周期的不同将Java堆划分为老年代和新生代,根据各个年代的特点使用最佳的收集算法....深入理解Java虚拟机(第2版) 深入拆解Java虚拟机

35500

《深入理解 Java 虚拟机》学习 -- 垃圾收集

《深入理解 Java 虚拟机》学习 -- 垃圾收集器 1. Serial 收集器(新生代) 含义: 单线程收集器。 缺点: 进行垃圾收集时,必须暂停其他所有的工作线程。 优点: 简单而高效。...ParNew 收集器(新生代) 含义: Serial 收集器的多线程版本,使用多条线程进行垃圾收集。 示例: ? 3....Serial Old 收集器(老年代) 含义: Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用”标记 - 整理“ 算法。 示例: ? 5....Parallel Old 收集器(老年代) 含义: Parallel Old 是 Parallel Scavenge 收集器的老年代版本,使用多线程和 ”标记 - 整理“ 算法。 示例: ? 6....G1 收集器(重要) 含义: G1 收集器是基于 ”标记 - 整理" 算法实现的收集器 G1 收集器可以非常精确地控制停顿 低停顿的原理: G1 将整个 Java 堆(包括新生代、老年代)划分为多个大小固定的独立区域

45230

《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集

,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机垃圾收集器如下: ?...ParNew虽然是除了多线程外和Serial收集器几乎完全一样,但是ParNew垃圾收集器是很多java虚拟机运行在Server模式下新生代的默认垃圾收集器。...(4).Serial Old收集器: Serial Old是Serial垃圾收集器年老代版本,它同样是个单线程的收集器,使用标记-整理算法,这个收集器也主要是运行在Client默认的java虚拟机默认的年老代垃圾收集器...Java虚拟机常用的垃圾收集器相关参数如下: 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集。...java虚拟机的-XX:+PrintGCDetails参数可以打印垃圾收集器的日志信息。 -verbose:gc可以查看Java虚拟机垃圾收集结果。

35430

《深入理解java虚拟机》笔记(5)垃圾回收算法及垃圾收集

二、复制算法 算法:将可用内存按容量大小划分为两块,每次只使用其中一块,当这块用完之后,就将还存活的对象复制到另外一块上面,再把已使用过的那块清理掉。...四、分代收集算法 此算法为目前大部分JVM采用的方法,其核心思想是根据对象存活不同的周期划分为不同的域,一般分为老年代(Old Generation)和新生代(Young Generation)。...永久代   1、用来存储class类,常量,方法描述等。对永生代的回收主要包括废弃常量和无用的类。...五、常用垃圾收集器 下面介绍HotSpot虚拟机提供的几种垃圾收集器(有连线的表明他们可以搭配使用): 1、Serial/Serial Old 最古老的收集器,是一个单线程收集器,用它进行垃圾回收时,...2、ParNew Seral/Serial Old的多线程版本,使用多个线程进行垃圾收集

13030

深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解

(对象是否可以被回收的两种经典算法: 引用计数法 和 可达性分析算法) 2、如何回收?(三种经典垃圾回收算法(标记清除算法、复制算法、标记整理算法)及分代收集算法) 3、使用什么工具回收?...(垃圾收集器) 在探讨Java垃圾回收机制之前,我们首先应该记住一个单词:Stop-the-World。...因为新生代的 Java 对象大多死亡频繁,所以 Minor GC 非常频繁,一般在这里使用速度快、效率高的算法,使垃圾回收能尽快完成。...四、垃圾收集器 如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。...这个收集器的主要意义也是在于给Client模式下的虚拟机使用

40410

Java 虚拟机系列二:垃圾收集机制详解,动图帮你理解

新的对象是如何进行内存分配的? 如何进行垃圾收集? 本文将按以下行文结构展开,对上述问题一一解答。...一、需要进行垃圾收集的内存区域 先来回顾一下 JVM 的运行时数据区: JVM 运行时数据区 其中程序计数器、Java 虚拟机栈和本地方法栈都是线程私有的,与其对应的线程是共生关系,随线程而生,随线程而灭...在虚拟机栈 (栈帧中的本地变量表) 中引用的对象,比如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。 2. 在方法区中类静态属性引用的对象,比如Java类的引用类型静态变量。...按照 Hotspot 虚拟机的实现,针对新生代和老年代的垃圾收集又分为不同的类型,也有不同的名词,如下: 部分收集 (Partial GC):指目标不是完整收集整个Java堆的垃圾收集,其中又分为: 新生代收集...混合收集 (Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集,目前只有G1收集器会有这种行为。 整堆收集 (Full GC):收集整个Java堆和方法区的垃圾收集

29840

深入浅出java虚拟机系列:(二)GC&垃圾收集算法

如何回收? 其中 程序计算器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,不需要过多考虑回收的问题。...COM、Python语言使用这种算法,但是,主流java 虚拟机并没有选用这种算法来管理内存, 最主要的原因是:它很难解决对象之间相互循环引用的问题。...主流商用语言,如java、C#等都是使用这种算法。 2.3 谈引用 java将引用分为:强引用、软引用、弱引用、虚引用4种,这4种引用强度依次逐渐减弱。...强引用:类似 Object obj = new Object();垃圾收集器永远不会回收引用所指对象; 软引用:描述一些还有用但并非必需的对象;在系统内存吃紧,要发生OOM之前,会把这些对象列入第二次垃圾回收的范围中...当对象没有覆盖finalize()方法,或者finalize()方法以及被虚拟机调用过,虚拟机将这两种情况都视为”没有必要执行“。

30420

《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读

堆内存使用分析,GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建。一些类信息,常量,静态变量等存储在方法区。堆和方法区都是线程共享的。...GC机制将Java程序员从内存管理中解放了出来,可以更关注于业务逻辑。 在Java中,GC是由一个被称为垃圾回收器的守护线程执行的。 在从内存回收一个对象之前会调用对象的finalize()方法。...作为一个Java开发者不能强制JVM执行GC;GC的触发由JVM依据堆内存的大小来决定。...点击 查看 我的另一篇文章 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略 测试环境 系统 Microsoft Windows [版本 10.0.14393] JDK...虚拟机》(一)Java虚拟机发展史 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

1.3K60
领券