垃圾收集器(Garbage Collectors)

  • Java中垃圾回收有什么目的?什么时候进行垃圾回收?

    • 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
  • System.gc()和Runtime.gc()会做什么事情?

    • 这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。
  • finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

    • 在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法。一般建议在该方法中释放对象持有的资源。
  • 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

    • 不会,在下一个垃圾回收周期中,这个对象将是可被回收的。
  • Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?

    • JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
    • 堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。
  • 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

    • 吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。
  • 在Java中,对象什么时候可以被垃圾回收?

    • 当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。
  • JVM的永久代中会发生垃圾回收么?

    • 垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区
    • (译者注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)
时间: 2024-12-26 05:09:36

垃圾收集器(Garbage Collectors)的相关文章

垃圾收集器与Java编程

垃圾收集器(Garbage Collector,GC)对Java程序员来说,基本上是透明的,但是一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能. GC的基本原理 Java的内存管理实际上

Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

讨论QQ:1586558083 目录 一.概述 二.垃圾收集器(garbage collector (GC)) 是什么? 三.为什么需要GC? 四.为什么需要多种GC? 五.对象存活的判断 六.垃圾回收算法 6.1 标记 -清除算法 6.2 复制算法 6.3 标记-整理算法 6.4 分代收集算法 七.垃圾收集器 7.1 Serial收集器 7.2 ParNew收集器 7.3 Parallel收集器 7.4 CMS收集器 7.5 G1收集器 八.常用的收集器组合 正文 回到顶部 一.概述 垃圾收集

JAVA垃圾回收Garbage Collection(二、垃圾收集器

垃圾收集器 HotSpot虚拟机的垃圾收集器 Java虚拟机规范中对垃圾收集器如何实现没有任何规定,因此不同版本的虚拟机所提供的垃圾收集器都可能有很大的差别,并且都会提供参数供用户自己应用的特点和要求组合出各个年代使用的收集器.java 1.7之后的Hotspot虚拟机包含的收集器如下: 新生代收集器:Serial ,ParNew,Parallel Scavenge 老年代收集器:CMS,Serial Old,Parallel Old 独立堆收集器:G1 Serial收集器 serial收集器是

详解 JVM Garbage First(G1) 垃圾收集器

前言    Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命.如果使用Java 8/9,那么有很大可能希望对G1收集器进行评估.本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进行了简单的对比:然后通过G1的内存模型.G1的活动周期,对G1的工作机制进行了介绍:同时还在介绍过程中,描述了可能需要引起注意的优化点.笔者希望通过本文,让有一定JVM基础的读者能尽快掌握G1的知识点. 第一章 概述 G1(Garb

Garbage First(G1)垃圾收集器

引言:G1垃圾收集器采用一个略微不同的手段来解决并行.串行以及CMS GC的众多缺陷.对于大的Java堆来说,通过将Java堆拆分成一个个分区,G1会比其他垃圾收集器有更好的综合表现.本文选自<Java性能调优指南>. G1垃圾收集器采用一个略微不同的手段来解决并行.串行以及CMS GC的众多缺陷.G1将堆拆成一系列的分区,这样在一个时间段内,大部分的垃圾收集操作就只是在一个分区内执行,而不是整个堆或整个(老年)代. 在G1里,年轻代就是一系列的内存分区,这意味着不用再要求年轻代是一个连续的内

HotSpot的7种垃圾收集器组合

HotSpot共有7种垃圾收集器,3个新生代垃圾收集器,3个老年代垃圾收集器,以及G1,一共构成7种可供选择的垃圾收集器组合. 新生代与老年代垃圾收集器之间形成6种组合,每个新生代垃圾收集器都对应2种组合. Serial Old(MSC)可以与所有新生代收集器进行组合,共3种组合JVM仅指定新生代垃圾收集器的情况下,默认老年代采用Serial Old垃圾收集器(带压缩):-XX:+UseSerialGCSerial (DefNew) + Serial Old(Serial Mark Sweep

JDK11 | 第七篇 : ZGC 垃圾收集器

一.简介 Java 11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间. 在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性. 那么为什么需要新GC呢?毕竟Java 10已经有四种发布多年的垃圾收集器,并且几乎都是无限可调的. 换个角度看,G1是2006年时引入Hotspot VM的.当时最大的AWS实例有1 vCPU和1.7GB内存,而今天AWS很乐意租给你一个x1e.32xlarge实例,该类型实例有128个vCPU和

GC算法 垃圾收集器

GC算法 垃圾收集器 参考:http://www.cnblogs.com/ityouknow/p/5614961.html 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分

【转】Java垃圾收集器

原文链接 http://www.cnblogs.com/gw811/archive/2012/10/19/2730258.html#top Java垃圾收集器 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp还在胚胎时期时,人们就在思考: GC需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如