首页 > Java > java教程 > 正文

Java 参考资料

PHPz
发布: 2024-08-30 15:17:41
原创
942 人浏览过

Java语言的优点之一是它自动管理内存,程序员无需承担内存管理的负担,也无需担心当不再需要对象时释放对象的内存。 java垃圾收集器线程为程序员做这件事;它在JVM的控制下清除不需要的对象并释放内存。程序员还可以通过使用 java.lang.ref 类来控制何时对对象进行垃圾收集。 java 中的引用有四种类型,具体取决于垃圾收集的方式或垃圾收集器对引用的行为。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

Java 参考类型及示例

根据垃圾收集器对引用的行为,Java 引用有四种类型。

  • 强引用:这是java中的默认引用。定期定义对象时可以创建强引用。
  • 弱引用: 此引用将被显式指定。可以使用 java.lang.ref.WeakReference 类创建弱引用。
  • 软引用:可以使用 lang.ref.SoftReference 类创建软引用。
  • 幻像引用:可以使用 lang.ref.PhantomReference 类创建幻像引用。

1.强引用

强引用通常是我们在编写java代码或创建对象时使用的。具有强引用且在内存中处于活动状态的对象不符合垃圾回收条件,强引用指向 null 的对象可以被垃圾回收。例如,下面的代码片段,其中变量 ob 是 ClassA 类型的对象。

ClassA ob = new ClassA();
登录后复制
登录后复制

“ob”对象具有指向类 ClassA 的强引用;该对象无法被垃圾回收,因为 ob 是活动对象。

如果引用“ob”指向 null,如下所示 –

ob = null;
登录后复制

现在该对象不再引用 ClassA 类;对象现在符合垃圾回收条件。

示例

代码:

package p1;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA(); // default reference or Strong Reference
System.out.println(ob);
ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection
System.out.println(ob);
}
}
登录后复制

输出:

Java 参考资料

2.弱引用

弱引用符合垃圾回收条件。一旦 JVM 检测到弱引用的对象,就会对该对象进行标记,并在 JVM 运行垃圾收集器线程时收集垃圾。这些类型的引用在 WeakHashMap 中用于对象的条目。弱引用可以通过类 lang.ref.WeakReference 创建。应用程序中可以使用的弱引用是建立 DBConnection,一旦数据库关闭,垃圾收集器就会释放该连接。例如,下面的代码片段,其中变量 ob 是 ClassA 类型的对象。

ClassA ob = new ClassA();
登录后复制
登录后复制

“ob”对象是一个强引用,使其可被垃圾回收,我们需要将其尊敬转换为弱引用,如下所示 –

WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);
登录后复制

现在该对象弱引用了 ClassA 类,该对象现在可用于垃圾回收,并且当 JVM 运行垃圾回收线程时该对象将被垃圾回收。

示例

代码:

package p1;
import java.lang.ref.WeakReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now create Weak Reference object to which <u>ob</u> object is pointing
WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob);
// Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory
ob = null;
System.out.println(ob);
// weakly referenced <u>ob</u> object can get back
ob = weakob.get();
System.out.println(ob);
}
}
登录后复制

输出:

Java 参考资料

3.软参考

软引用的对象只有在 JVM 内存不足或者 JVM 急需内存时才符合垃圾回收的条件。弱引用可以通过类 lang.ref.SoftReference 创建。例如,软引用可以创建类似于弱引用的内容。

SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
登录后复制
示例

代码:

package p1;
import java.lang.ref.SoftReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();// default reference or Strong Reference
System.out.println(ob);
// now create soft Reference object which ob object is pointing
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
// Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory
ob = null;
System.out.println(ob);
// the soft referenced, ob object can get back
ob = softob.get();
System.out.println(ob);
}
}
登录后复制

输出:

Java 参考资料

4.幻影参考

幻像引用的对象可以被垃圾回收,但在垃圾回收之前,该对象被 JVM 放入一个名为“引用队列”的引用队列中;在对象上调用 Finalize() 函数之后。弱引用可以通过类 lang.ref 创建。幻影参考。

示例

代码:

package p1;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.PhantomReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now Create Reference queue object
ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>();
// Create Phantom Reference object to which <u>ob</u> object is pointing
PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq);
// Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing
ob = null;
System.out.println(ob);
// to get back object which has been Phantom referenced returns null
ob = phantomob.get();
System.out.println(ob);
}
}
登录后复制

输出:

Java 参考资料

以上是Java 参考资料的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板