java的垃圾回收

转载 2016年08月30日 20:51:53
永久代的垃圾收集主要收集两部分内容:废弃常量和无用的类(收集方式和对象的收集方法类似)。判断一个类是否无用的标准:
1)该类所有的实例都已经被回收,也就是java堆中不存在该类的任何实例。
2)加载该类的ClassLoader已经被回收。

3)该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法

标记-清除算法:
分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足之处:一个是效率问题,标记和清除两个过程的效率都不是太高,另一个是空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程中需要分配较大的对象时,无法找到足够的连续内存而不得不触发另一次垃圾收集动作。


复制算法,将内存按容量划分为大小相等的两块,每次只使用其中的一块,当这一块内存使用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉,这样使得每次都要对整个半区进行内存回收,内存分配时也就不需要考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可


标记-整理的标记过程和标记清理的标记过程一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一段移动,然后直接清理掉标记以外的内存


即使在可达性分析算法中不可达的对象,也并非是非死不可的,这时候它们暂时处于缓刑状态。要真正死亡,至少需要经历两次标记过程:如果对象在可达性分析后发现没有GC Roots相连接的引用链,那么它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize方法,当对象没有覆盖finalize,或者finalize方法已经被虚拟机调用,虚拟机将这两种情况视为没有必要执行。finalize方法是对象逃脱死亡的最后一次机会,稍后虚拟机将会对F-Queue(没有必要执行finalize方法的对象队列)进行第二次标记,这个时候一个对象如果没有被重新引用,那么就要被收集了

深入理解Java垃圾回收机制

原文:http://www.linuxidc.com/Linux/2015-06/118829.htm 一、垃圾回收机制的意义   Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程...
  • hudashi
  • hudashi
  • 2016年07月28日 20:07
  • 11197

java垃圾回收面试题

内存回收机制: 内存回收就是释放掉在内存中已经没用的对象。 首先,要判断怎样的对象是没用的对象。这里有2种方法: 1.采用标记计数的方法: 给内存中的对象给打上标记,对象被引用...
  • Happy_wu
  • Happy_wu
  • 2016年09月12日 16:35
  • 1041

Java垃圾回收器总结

什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation)、自动回收(...
  • kimylrong
  • kimylrong
  • 2014年01月14日 16:25
  • 28066

有关垃圾回收的面试题

77、GC是什么? 为什么要有GC?    GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,J...
  • javazilu
  • javazilu
  • 2017年04月19日 14:33
  • 731

Java垃圾回收机制理解

垃圾回收机制的理解。
  • daguairen
  • daguairen
  • 2016年08月19日 10:17
  • 4913

图解Java 垃圾回收机制

摘要:   Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆...
  • plgy_Y
  • plgy_Y
  • 2017年05月28日 11:04
  • 1055

浅谈Java垃圾回收机制

今天来谈谈Java垃圾回收机制,为何谈这个呢?毕竟这个是Java的一大特色,也是进阶之路需要去深入了解的地方。学过C++的同学都知道,C++编程中,对象所占的内存在程序结束运行之前会一直被占用,在明确...
  • simple727
  • simple727
  • 2016年05月02日 16:03
  • 1501

关于Java垃圾回收机制,你所需要知道的一切

本博客转自http://blog.csdn.net/zsuguangh/article/details/6429592 1. 垃圾回收的意义   在C++中,对象所占的内存在程序结束运行之前一直被...
  • u010429311
  • u010429311
  • 2016年03月27日 10:20
  • 1745

Java垃圾回收工作原理

垃圾回收器是如何工作的?我现在就简单的介绍一下 首先要明确几点: Java是在堆上为对象分配空间的 垃圾回收器只跟内存有关,什么IO啊,网络连接啊,管它P事 当可用内存数量较低...
  • zongrongna
  • zongrongna
  • 2016年06月03日 15:48
  • 4558

Java的内存区域以及各种垃圾回收算法和垃圾回收器

Java的内存区域可以分为 方法区(区别于永生代),堆,JVM栈,本地方法栈,程序计数器。 其中方法区,堆是线程共享的,JVM栈和本地方法栈,程序计数器是线程独有的。 ...
  • a497006686
  • a497006686
  • 2016年09月08日 18:40
  • 915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java的垃圾回收
举报原因:
原因补充:

(最多只允许输入30个字)