相关疑难解决方法(0)

为什么Java有4种不同类型的引用?

直到今天,我才意识到 Java 有四种主要的引用类型。

\n
    \n
  1. 强引用:默认引用类型Java
  2. \n
  3. 弱引用:如果一个对象具有弱引用,则GC即使有足够的内存,也会在下次运行时回收该对象\xe2\x80\x99s内存。
  4. \n
  5. 软引用:如果一个对象有软引用,那么GC只有当它急需一些内存时才回收这个对象\xe2\x80\x99s内存。
  6. \n
  7. 幻像引用:如果一个对象有幻像引用,那么它就符合垃圾回收的条件。但是,在 GC 之前,JVM 将应该被垃圾收集的对象放入一个名为 的队列中reference queue
  8. \n
\n

我理解了基本概念,并编写了一个小程序来理解每种引用类型的工作原理。

\n
import java.lang.ref.PhantomReference;\nimport java.lang.ref.ReferenceQueue;\nimport java.lang.ref.SoftReference;\nimport java.lang.ref.WeakReference;\n\nclass User \n{ \n    public User info() \n    { \n        System.out.println("Info method invoked from User class");\n        return null;\n    }   \n} \n\npublic class ReferencesExample \n{ \n    public static void main(String[] args) \n    { \n        //Strong Reference\n        User userRefObj = new User(); \n        System.out.println("1 :" …
Run Code Online (Sandbox Code Playgroud)

java oop garbage-collection reference-type java-8

5
推荐指数
1
解决办法
1117
查看次数

空队列的PhantomReference

Java允许编写:

new PhantomReference(new Object(), null)
Run Code Online (Sandbox Code Playgroud)

在这种情况下new Object()将被收集?

据我了解,幻影引用是finalize() 方法使用的替代方法。

在队列中出现引用后,我需要执行一些其他操作,然后运行 clear()

Java Doc保留:

可以使用空队列创建幻影引用,但是这种引用完全没有用:其get方法将始终返回null,并且由于它没有队列,因此永远不会入队。

如果它永远不会被排队,那意味着什么?

据我了解,这意味着在完成方法调用后,引用不会再添加到referenceQueue中。因此可能导致:
1.对象存储器将立即被清除
2.对象存储器将不会被清除

哪种情况正确?

java garbage-collection phantom-reference finalization

3
推荐指数
1
解决办法
254
查看次数

ReferenceQueue 的含义

我试着理解课堂 ReferenceQueue

它是可选的构造函数参数

SoftReference
Run Code Online (Sandbox Code Playgroud)

WeakReference
Run Code Online (Sandbox Code Playgroud)

它也是 的强制性参数PhantomReference

根据我读过的信息,我可以写一些论文

a) 对于 PhantomReference 方法 get 总是返回 null

b) 对于 Phantom 引用:
1. gc 检测到该对象可以从内存中删除
2. 对放入 ReferenceQueue 的对象的引用,
当我们调用 clear 或 link to reference from queue 时无法访问并且 gc 看到 3. finalize 方法调用
4.
为弱/软引用释放内存
1. gc 检测到该对象可以从内存中删除
2. 终结方法调用
3. 释放内存
4. 对放入队列的对象的引用

  1. 我什么时候可以将第二个参数传递给XXXReference构造函数?
  2. 我可以获得哪些帮助?
  3. 为什么PhantomReference没有没有构造函数ReferenceQueue
  4. 获取方法的 ReferenceQuee 总是返回 null 的原因是什么?

java garbage-collection weak-references phantom-reference

1
推荐指数
1
解决办法
1369
查看次数