每日一问

Q:Java有几种引用类型?

2016-12-03  本文已影响54人  甚了

Java有几种引用类型

引自 java 知识 之 内存管理

Java 中的内存管理包括内存分配和内存回收,这些都是由 JVM 帮我们完成的。当创建对象时为其分配内存空间;当失去引用时,GC会自动清除并回收他们所占用的空间。

当一个对象在堆内存中运行时,根据它对应的有向图的状态,有如下三种状态:

三张状态转换图如下:

对象状态

强引用

在Java 中,创建一个对象,并把它赋值给一个引用变量,就是强引用。被强引用所引用的对象时绝对不会被垃圾回收机制回收的,即使系统非常紧张,因此它是造成内存泄露的主要原因之一。

软引用

软引用需要用SoftReference类来实现,当一个对象只有软引用时,它有可能被回收。对于软引用,当系统内存空间足够时,不会被回收,否则会被系统回收,该对象不可再被使用。

Xmx:设置java虚拟机堆内存最大容量;
Xms:设置java虚拟机初始容量。

弱引用

弱引用于软引用类似,但他的生存期更短,通过WeakReference类实现。对于只有弱引用的对象,当垃圾机制运行时,不管内存是否足够,总会回收该对象占用的内存。

弱引用

虚引用

虚引用主要是跟踪对象被垃圾回收的状态,可以通过检查与虚引用关联的队列中是否包含指定的引用,了解对象是否被回收。
与软引用和弱引用不同,虚引用不能单独使用。
虚引用对象在被释放前会将它添加到他关联的引用队列中。通过PhantomReference类实现,结合引用队列ReferenceQuence使用。

上一篇 下一篇

猜你喜欢

热点阅读