首页 > 编程知识 正文

java 值传递 引用传递(java的特性)

时间:2023-05-06 06:39:28 阅读:88195 作者:2863

根据GC的影响,可以将Java中的对象的引用分别分为4个类别:

1 .强烈引用

特征:从对象本身的类型或父类型直接引用当前对象称为强引用。 例如,Object o=new Object (),其中o是强引用。 使用“强引用”引用的对象在JVM内存不足或抛出OutOfMemoryError运行时错误时不会重用该对象。 对象因“强引用”无法访问时,可以直接收集垃圾,但具体的回收时机取决于垃圾收集战略。

2 .软件引用

特点:软件参考通过软件参考类实现。 如果JVM确定内存不足,“软引用”引用的对象将尝试回收其指向的对象。 也就是说,在抛出OutOfMemoryError之前,JVM必须清除软引用所指向的对象。 软引用可与引用队列“参考队列”一起使用。 软引用所引用的对象被垃圾收集器回收后,Java虚拟机将该软引用添加到关联的引用队列中。 然后,可以调用ReferenceQueue的poll ()方法来检查是否收集了感兴趣的对象。 如果队列为空,则返回空值。 否则,该方法将返回队列中的上一个Reference对象。

APP场景:软引用通常用于实现对内存敏感的缓存。 如果有可用内存,则可以临时保留缓存,并在内存不足时进行清理,从而防止在使用缓存的同时耗尽内存。

3 .弱引用

弱引用由WeakReference类实现。 在GC的情况下,如果发现具有弱引用的对象,则无论当前存储器空间是否足够,都有可能回收该存储器。 由于垃圾收集器是优先级较低的线程,因此具有弱引用的对象不一定会立即回收。 弱引用可以与引用队列“参考队列”一起使用。 当弱引用所引用的对象被垃圾回收时,Java虚拟机会将其弱引用添加到关联的引用队列中。

APP场景:弱APP应用也可以用于对内存敏感的缓存。

4 .虚引用

特点:虚引用又称幻影引用,由PhantomReference类实现。 不能通过虚拟引用访问对象的属性或函数。 幻象引用只是提供了一种机制,保证对象在完成最终化后做些什么。 如果一个对象只有虚构的引用,则它可能随时被垃圾回收,就像没有任何引用一样。 虚引用必须与引用队列(ReferenceQueue )组合使用。 如果在垃圾收集器尝试回收对象时发现仍有虚拟引用,请在回收对象的内存之前将其添加到关联的引用队列中。 referencequeuequeue=newreferencequeue (;

phantomreferencepr=newphantomreference (对象,队列);

程序通过判断参考队列中是否已经有伪参考,可以知道所参考的对象是否会被垃圾回收。 如果程序发现虚拟引用已经添加到引用队列中,则可以在回收被引用对象的内存之前执行一些程序操作。

应用场景:可用于跟踪垃圾收集器回收对象的活动,在垃圾收集器回收与虚拟参考相关联的对象之前收到系统通知。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。