1.垃圾回收
垃圾回收的历史要比Java语言久远的多,MIT的LISP是第一门真正使用内存动态分配和垃圾收集技术的语言(LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造的计算机程序设计语言).
说到垃圾回收(Garbage Collection,简称GC),就要说下垃圾回收是收集什么,何时回收,虚拟机是怎么通过垃圾收集器进行自动垃圾回收的.
1.1 垃圾回收收集什么
按照标准的说法,垃圾回收是一个监控堆内存区域,识别正在使用中或不使用的对象,并对不使用的对象进行回收的过程.在C语言中,垃圾回收是手动完成的(需要我们在程序中定义),而Java语言是通过垃圾收集器去自动完成的.说白了,垃圾回收就是回收未被引用的对象.既然要回收未被引用的对象,那我们就得说说何为引用的对象(使用中的对象).
何谓使用中的对象?所谓使用中的对象,就是在程序中仍然存在该对象的引用.
说到对象的引用,我们就不得不说说对象引用是何物.
1.1.1 对象的引用
在JDK1.2之前,Java中对于引用类型的定义很狭隘,它指如果引用(reference)类型的数据中存储着另外一块内存的起始地址,那么就表示这块内存代表着一个引用.
在JDK1.2之后,Java对引用的概念进行了扩展,分为强引用,软引用,弱引用,虚引用.
①强引用(Strong Reference):就是我们在代码中很常见的Object obj = new Object()这类的引用,其中obj就指向在堆内存中分配的Object对象.只要强引用存在,垃圾收集器就不会回收该对象.
②软引用(Soft Reference):用来描述一些有用但非必须的对象(像不像曹操说的鸡肋,食之无味弃之可惜).在JDK1.2之后,提供了java.lang.ref.SoftReference类来实现软引用,如
SoftReference<String> softRf = new SoftReference<String>(new String("helloworld"));
使用softRf.get()就可以获取到引用的对象.这里softRf就是一个软引用.软引用引用的对象,在内存空间不足的情况下,会被回收.
③弱引用(Weak Reference):弱引用也来描述非必须对象,它比软引用还弱.在JDK1.2之后,提供了java.lang.ref.WeakReference类来实现弱引用.如
WeakReference<String> weakRf = new WeakReference<String>(new String("helloworld"));
使用weakRf.get()就可以获取到引用的对象.其中weakRf就是一个弱引用.弱引用引用的对象,在垃圾回收器回收工作的时候,就会被回收.
④虚引用(Phantom Reference):听这名字,就像影子似的,所以它也叫幽灵引用,是最弱的一种引用关系.在JDK1.2之后,提供了java.lang.ref.PhantomReference类表示虚引用.但是用法跟上面不一样哈.
虚引用必须与引用队列(ReferenceQueue)一起使用.
如:ReferenceQueue<String> rfQueue = new ReferenceQueue<String>();
PhantomReference<String> phantomRf = new PhantomReference<String>(new String("helloworld"), rfQueue);
使用phantomRf.get()可以获取到引用的对象.虚引用并不影响它引用的对象的生命周期,使用虚引用的唯一作用就是在垃圾收集器工作的时候,告诉系统"我要走了,拜拜".
相关推荐
自己学习总结JVM垃圾回收机制的结构图,一起分享!!!
Jvm垃圾回收机制 by linux_14胡嘉辉1.如何确定某个对象是“垃圾”? 2.典型的垃圾收集算法3.典型的垃圾收集器
该资源通过图像及文字详细分析回答了JVM垃圾回收机制的三个重要面试问题: 1.哪些垃圾是需要回收的? 判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。 2.有哪些重要的垃圾回收算法? ...
为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象。这些对象的建立方式就是那些new一类的操作,当对象无用后,是GC来负责这个无用的...
jvm垃圾回收机制总结
jvm内存模型以及垃圾回收机制.pptx
JVM的垃圾回收机制详解和调优
JVM:组成部分、垃圾回收机制和算法、对内存的管理办法。
全面概述jvm垃圾回收机制的功能、各部分组成及各部分算法实现
JVM垃圾回收机制(GC).xmind
16_Java高级_JVM垃圾回收机制
jvm垃圾回收机制详解,学习过程,如有侵权请联系删除
JVM垃圾回收机制(GC) 引入:我们都知道,栈内存中方法运行完毕后会有弹栈的操作,不会产生垃圾,而堆内存中却没有这种操作,当堆内存中很多无用的成员变量、对象等等积压到一定程度时,就会发生堆内存溢出的一个错误...
圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。该思维导图完整的描述了垃圾回收的各个关键点
jvm相关代码仓库,包括类加载机制,字节码执行机制,JVM内存模型,GC垃圾回收,JV-jvm_practice
详细的java垃圾回收机制的讲解以及java jvm对垃圾处理的应对策略。
JVM虚拟机垃圾回收机制图谱说明
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...