java中的简单介绍
什么是Java的弱引用
强引用、软引用、弱引用、虚引用分别是: 强引用(Strong Reference)定义:强引用是Java中最常见的引用类型,也是默认的引用类型。只要一个对象被强引用所指向,那么该对象就处于可达状态,不会被垃圾回收器回收,即使内存不足导致OOM(Out Of Memory)错误,垃圾回收器也不会回收这些对象。
Java中的弱引用和虚引用是两种特殊的引用类型,它们在内存管理和垃圾回收方面有着不同的特性和用途。弱引用(Weak Reference):实现方式:弱引用通过WeakReference类来实现。特性:弱引用的级别比软引用更低。对于只有弱引用的对象,当垃圾回收机制运行时,无论系统内存是否足够,都会回收该对象所占用的内存。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。4.虚引用(PhantomReference)虚引用顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。
强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么?_百度...
弱引用(Weak Reference)比软引用更弱,它关联的对象只生存到下一次垃圾收集。即使内存充足,垃圾收集器也会回收弱引用对象。弱引用主要用于跟踪,而非持久保持,因为它不保证对象一定存活。最后,虚引用(Phantom Reference)是最弱的引用类型,其存在不影响对象生命周期,主要用于跟踪对象回收。
软引用:用于内存敏感的缓存场景,可在内存不足时释放部分缓存。弱引用:用于实现对象关联关系,如缓存关键字和关联对象之间的映射。虚引用:用于对象回收前的清理操作,如资源释放或日志记录。软引用、弱引用和虚引用的回收行为受垃圾回收器策略和内存压力影响,可能被提前或不被回收。
强引用是Java中最常见的引用类型,只要存在强引用,垃圾回收器就不会回收被引用的对象。软引用用于实现内存敏感的缓存,当内存不足时,垃圾回收器会回收被软引用指向的对象。弱引用用于实现临时性的缓存,当没有其他强引用指向对象时,垃圾回收器会及时回收这些对象。
通常用于实现缓存。弱引用:比软引用更弱,只要垃圾回收机制运行,就会被回收。
弱引用与软引用类似,但具有更短的声明周期。当垃圾回收器发现弱引用时,无论堆空间是否足够,都会回收该对象。弱引用同样可以与引用队列联合使用。弱引用适用于保存可有可无的缓存数据,当内存不足时,缓存数据会被回收;当内存充足时,缓存数据可以继续存在。虚引用,顾名思义,是一种形同虚设的引用。
强引用、软引用、弱引用、虚引用有什么区别?
强引用是Java中最常见的引用类型,只要存在强引用,垃圾回收器就不会回收被引用的对象。软引用用于实现内存敏感的缓存,当内存不足时,垃圾回收器会回收被软引用指向的对象。弱引用用于实现临时性的缓存,当没有其他强引用指向对象时,垃圾回收器会及时回收这些对象。虚引用是最弱的一种引用关系,主要用于跟踪对象被垃圾回收器回收的时间,并执行相应的清理操作。
通常用于实现缓存。弱引用:比软引用更弱,只要垃圾回收机制运行,就会被回收。
强引用:用于需要确保对象长时间存活的场景,如全局变量、静态变量等。软引用:用于内存敏感的缓存场景,可在内存不足时释放部分缓存。弱引用:用于实现对象关联关系,如缓存关键字和关联对象之间的映射。虚引用:用于对象回收前的清理操作,如资源释放或日志记录。
Java中Lock,tryLock,lockInterruptibly有什么区别
和lock()相比,lockInterruptibly()只有略微的修改,for循环过程中,如果检测到interrupt标志为true,则立刻抛出InterruptedException异常,这时程序变通过异常直接返回到最外层了,又外层继续处理,因此使用lockInterruptibly()时必须捕捉异常。
)lock(), 拿不到lock就不罢休,不然线程就一直block。 比较无赖的做法。2)tryLock(),马上返回,拿到lock就返回true,不然返回false。 比较潇洒的做法。 带时间限制的tryLock(),拿不到lock,就等一段时间,超时返回false。比较聪明的做法。3)lockInterruptibly()就稍微难理解一些。
tryLock(long timeout, TimeUnit unit):在指定时间内尝试获取锁,超时未获取则返回false。lockInterruptibly():可中断式获取锁,未获取到时会进入休眠状态,可被其他线程中断。特性:支持公平锁、非公平锁,可实现更灵活的线程控制(如中断响应、超时获取)。
void lockInterruptibly():可中断地获取锁,即在获取锁的过程中可以响应中断。boolean tryLock():尝试非阻塞地获取锁,如果锁可用则获取并返回true,否则返回false。boolean tryLock(long time, TimeUnit unit):在给定的等待时间内尝试获取锁,如果在该时间内获取到锁则返回true,否则返回false。
lockInterruptibly 这个方法可以理解为一个能被中断的锁获取过程。它允许线程在尝试获取锁时被中断。如果当前线程没有持有锁且没有被中断,则线程将获取锁并返回。如果线程已经持有锁,则锁计数加1并立即返回。若锁被其他线程持有,线程将进入等待队列,直到线程被中断或成功获取锁。
