java中的垃圾回收机制(Garbage Collection )可以自动清除在堆中不用的对象,为java程序员提供了方便,在c/c++中,我们就需要手动去释放堆中的内存。
在java中对象都是通过引用来使用的,如果没有引用指向这个对象,那么这个对象就不可到达,我们就没法使用和处理这个对象,GC机制就是释放这些不可达对象所占用的内存。
为了提高效率,JVM优化了GC机制,在不同的情况下采用不同的回收方式。不管采用什么方式,我们首先要搞清楚怎样才能访问到对象,正如在
堆栈总结中说的,对象都是通过引用访问的,而引用都保存在栈中,因此我们可以通过栈来找到那些可以访问的对象。
JVM有两种基本的回收方式,一种是“mark and sweep”,另一种是“copy and sweep”。所谓mark and sweep就是JVM通过栈找到所有可到达对象,并且对它们进行标记,然后扫描整个堆,找到剩余对象,释放剩余对象占用的内存。 对于copy and sweep这种模式,堆被分为两个区域,对象存储在一个区域,另外一个为空区域,JVM从栈出发,找到可到达对象,并复制它们到空白的区域紧密排列,然后清空对象以前所在的区域,从而使它成为新的空白区域。copy and sweep比较复杂,但是在新建对象时,它可以提供一个大块的连续空间。因此如果一个对象存活时间比较长,我们就采用mark and sweep;如果对象经常被改动,我们就采用copy and sweep 模式。
以上这两种模式通过分代回收(generational collection)来混合使用,每个对象都记录了一个它经历过垃圾回收的次数,次数越长,则说明这个对象存活时间越长。
JVM中的堆可以分为三个部分,分别为永久区,年老区,和新生区。在永久区中的对象不会被回收,比如Class对象就放在这里。年老区和新生区要进行垃圾回收。年轻区中存放的时新创建的比较新的对象,年老区存放的经历时间比较久的对象。按照上面的分析,年轻区采用copy and sweep模式,年老区采用mark and sweep模式。
年轻区又分为三个区域,eden区,from区,to区,在eden区存放了上次GC之后新创建的对象。from区和to区的大小相等,相当于copy and sweep中的两个区域,当新创建的对象没法放入eden区时,JVM就用copy and sweep模式,将eden和from区中可到达的对象复制到to区,然后清空eden区和from区,然后让from区变为新的to区,to区变为from区。如果to区放不下,就会把年老的对象放入成熟区,就算to区没有满,JVM也会将年代久远的对象放到年老区。
如果年老区没法加入新的对象,JVM就采用mark and sweep 模式对年老区进行垃圾回收。
分享到:
相关推荐
Java垃圾回收机制(GC)是Java编程语言的关键特性,它自动管理内存,释放不再使用的对象,以防止内存泄漏。GC的运作方式主要有两种策略:引用计数和对象引用遍历。 引用计数是一种简单但不完美的方法。每个对象都有...
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...
Java垃圾回收机制总结 Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 ...
Java中类的生命周期与java垃圾回收机制
【Java面试题】Java垃圾回收机制
Java垃圾回收机制简介 Java垃圾回收机制是Java语言中的一种自动内存管理机制,它可以帮助程序员更好地编写Java应用程序,而不需要手动编写垃圾回收相关的代码。这篇文章将会介绍Java垃圾回收机制的基本概念和原理,...
Java垃圾回收机制是Java编程中至关重要的一部分,它自动管理内存,释放不再使用的对象,避免内存泄漏,并优化内存使用。Java虚拟机(JVM)的堆内存是存放对象的主要区域,当对象通过new等指令创建后,垃圾回收机制...
浅谈 JAVA 垃圾回收机制 Java 垃圾回收机制是 Java 语言中的一种自动内存管理机制,它可以自动回收内存中的垃圾,避免代码运行时由于忘记释放对象而带来的内存泄漏问题。 Java 中的垃圾回收机制主要通过两种算法来...
Java垃圾回收机制详解 Java垃圾回收机制是Java虚拟机(JVM)中的一种自动管理内存的机制,它可以自动地将不再使用的对象从内存中回收,以释放更多的内存空间供其他对象使用。本文将详细介绍Java垃圾回收机制的工作...
Java垃圾回收机制是Java编程语言的关键特性,负责自动管理程序中的内存,确保程序高效、稳定地运行。在Java虚拟机(JVM)中,垃圾回收的主要任务是识别并清理不再被程序使用的对象,以避免内存泄漏。以下是关于Java...