Java内存管理之基础概念——GC(Garbage Collection)的基本概念
这是Java内存管理系列文章的第一篇。
GC的概念
GC是一种自动内存管理程序,与之相对应的是C++采用的内存管理方式。GC主要的职责就是分配内存;保证被引用的对象始终在内存中;把不被应用的对象从内存中释放。被引用的对象称之为Live 对象;不被引用的对象就是Dead对象,是需要回收的。任何事物都有光面和黑暗两面,原因很简单GC是一个很复杂的东西:-)。
GC会自动计算对象被引用的情况,只要对象不在被引用,相应的内存就会被回收,而C++中需要开发人员通过代码来“显示”地回收内存,如果程序员没有回收就会导致内存的泄露(内存泄露的原因有很多种这只是其中一个)。C++中还有经常出现的一个问题是一个对象在还有其他引用存在的情况下,就被程序给回收了,导致其他引用访问该对象时出现严重错误。另外,GC非常重要的一点就避免内存碎片,道理跟windows的磁盘整理一样,把使用中各个内存块整合起来,这样才能保证有足够的空间来存储大对象。
理想的GC
一个理想的GC要能够满足以下几点:
- 该回收的回收,不改回收的绝不回收
- GC要快而且GC运行的时候不能导致应用程序的停顿。
- 限制内存碎片,对象被回收以后,所使用的内存会被回收,如果不加处理内存中就会出现大量的内存碎片,这样就有可能导致因为没有足够的连续空间分配给某些大对象而导致OutofMemory。消除内存碎片的的手段之一就是“内存压缩”。
- 可扩展性(Scalability),内存的分配和回收都不能成为应用程序的瓶颈。
GC的设计选择
- 串行回收(Serial)VS并行回收(Parallel)。串行就是不管有多少个CPU,始终只有一个CPU用来执行回收操作,而并行就是把整个回收工作拆分成多个,由多个CPU同时执行。并行回收执行会快,但复杂度增加,另外也有其他一些副作用,比如内存碎片会增加。
- 并发执行(Concurrent)VS应用程序停止(Stop-the-world)。Stop-the-world的GC方式在执行GC的同时会导致应用程序的暂停。并发执行的GC虽然不会导致应用程序的暂停,但由于并发执行GC要解决和应用程序的执行冲突(应用程序可能会在GC的过称中修改对象),并发执行GC执行的消耗会高于Stop-the-world,而且执行也需要更多的内存堆。
- 压缩(Compacting)VS不压缩(Non-compacting)VS拷贝(Copying)。为了减少内存碎片,支持压缩的GC会把所有的活对象搬迁到一起,然后将之前占用的内存全部回收。不压缩式的GC顾名思义就是在GC的过程中不压缩内存,较之压缩式的GC,不压缩式的GC回收内存快了,而分配内存慢了,而且无法解决内存碎片的问题。拷贝式的GC会将活对象拷贝到不同的内存区域中,这种方式的优点是源数据可以被认为已经清空并可以用来分配,缺点也很明显,需要拷贝数据和额外的内存。
GC的性能评判标准
- 生产力(Throughput)—全部时间中不用于GC的比例。
- GC的开销—全部时间中用于GC的比例。
- 暂停时间—GC过程中应用程序执行暂停的时间。
- GC的频率—通过跟应用程序的执行比较来得到GC的执行频率。
- 支持GC运行所需使用的内存大小—例如heap的大小。
- GC的及时性(Promptness)—一个对象从被废弃到内存被回收之间的时间差。
相关推荐
《Plumbr Handbook Java Garbage Collection》是一本专注于Java垃圾收集机制的详细指南,旨在帮助读者理解并优化Java应用程序中的内存管理。本手册由Plumbr的联合创始人撰写,Plumbr是一家专注于JVM性能监控的产品...
在深入探讨Java内存泄露之前,我们先回顾一下Java内存管理的核心机制——垃圾回收(Garbage Collection, GC)。与C/C++等语言不同,Java自动管理内存,通过垃圾回收机制自动回收不再使用的对象,避免了手动管理内存...
首先,GC(Garbage Collection)是Java中自动进行内存管理的一种机制。它的主要目标是释放那些不再被程序引用的对象,以防止内存耗尽导致的`OutOfMemoryError`。与C++等语言不同,Java的GC是自动进行的,程序员无需...
以上是Java面试中常见的JVM和内存管理相关的知识点,对于Java开发者来说,理解和掌握这些概念是基础,也是提升职业竞争力的关键。在实际面试中,面试官可能会深入询问这些话题,例如垃圾收集的工作机制、内存泄漏的...
#### 引言:Java内存管理的核心——垃圾回收机制(GC) Java作为当今产业界和学术界最炙手可热的编程语言之一,以其独特的安全性和可移植性赢得了广泛的应用,尤其是在服务器端编程领域。其中,垃圾回收机制...
Java内存分配的核心机制是垃圾收集(Garbage Collection, GC),它负责自动回收不再使用的内存。Java提供了几种不同的垃圾收集器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1等,它们各有优缺点,适用于...
Java作为一种广泛使用的编程语言,其自动内存管理机制——垃圾收集(Garbage Collection, GC)一直是其吸引开发者的重要特性之一。然而,这并不意味着Java程序就不会遇到内存相关的问题。事实上,Java同样存在内存...
了解内存分配、GC(Garbage Collection)策略以及内存泄漏的检测和预防对于避免程序运行缓慢至关重要。 3. **垃圾回收**:JVM通过自动垃圾回收机制来释放不再使用的对象所占用的内存。书中详细讲解了不同类型的GC...
文档将介绍垃圾收集(Garbage Collection, GC)的基础知识,包括垃圾收集器的特性、设计选择、性能指标和代际收集机制等。 3. JVM中的垃圾收集器 详细说明了J2SE 5.0版本中HotSpot JVM所实现的垃圾收集器类型,例如...
然后,**JVM碎片回收堆(Garbage Collection Heap)**是JVM内存管理的重要部分,用于动态分配对象。堆被分为新生代(Young Generation)和老年代(Tenured Generation),新生代又分为Eden空间、From Survivor和To ...
Android系统采用分代垃圾回收(Garbage Collection, GC),分为年轻代、老年代和持久代。了解这些概念有助于判断何时可能出现内存泄露,以及如何避免。 五、内存优化的其他注意事项 1. 尽量减少大对象的创建:大...
在Java应用程序中,JVM(Java虚拟机)的垃圾收集(Garbage Collection, GC)是自动管理内存的关键机制。当对象不再被引用时,GC负责回收这些无用的对象所占用的内存空间,以避免内存泄漏。然而,如果GC过程耗时过长...
《Sun JDK 1.6内存管理--调优篇》深入探讨了Java开发中的关键环节——JVM内存管理和性能优化。Sun JDK 1.6作为早期的Java开发环境,其内存管理机制对于理解现代JVM的工作原理至关重要。本文将详细解析JVM内存结构,...
5. 对象的垃圾回收:Java的自动内存管理机制——垃圾回收(Garbage Collection, GC)会在对象不再被引用时回收其占用的内存。GC通过可达性分析算法判断对象是否存活,若不可达,则进行回收。这一过程对于Java程序的...
在Java编程中,垃圾回收(Garbage Collection, GC)是一个关键特性。GC自动管理程序中的内存,避免了手动内存管理可能导致的内存泄漏问题。它的工作原理是,当一个对象不再被任何引用指向时,GC会识别这个对象为垃圾...
垃圾回收(GC,Garbage Collection)是编程语言中用于自动管理内存的重要机制,尤其是在像Java、Python这样的语言中。GC的主要任务是识别并回收不再使用的内存块,避免内存泄漏,保持系统的高效运行。 1. 什么是...
本教程——“深入JVM内核—原理、诊断与优化视频教程”着重讲解了JVM的内部机制,特别是关于垃圾收集(Garbage Collection, GC)的算法和种类,这对于理解和提升Java应用性能至关重要。 一、JVM内存模型 首先,...
3. **GC(Garbage Collection)算法**:自动内存管理机制,用于回收不再使用的对象所占用的内存空间。 4. **GC分析命令调优**:用于监控和优化GC性能的一系列工具和技术。 #### 二、JVM的加载机制 **2.1 什么是类...
《JVM性能调优——JVM内存整理及GC回收》是针对Java开发人员的重要主题,尤其是在大型企业级应用中,确保JVM(Java虚拟机)的高效运行是至关重要的。本资料深入探讨了如何通过调整JVM内存设置和优化垃圾回收机制来...
3. **垃圾收集(Garbage Collection, GC)**:Android使用GC来自动回收不再使用的对象,以释放内存。理解GC的工作机制,包括如何触发GC,以及不同类型的GC(如 Minor GC 和 Major GC)是如何工作的,能帮助我们优化...