JVM对象引用

简介: 本次课程聚焦JVM对象引用,涵盖强引用、软引用、弱引用和虚引用。强引用是最常见的引用类型,确保对象不会被垃圾回收器回收,适用于需要确保对象存活的场景;软引用在内存不足时会被优先回收,常用于缓存;弱引用的对象随时可能被回收,适合临时对象;虚引用最弱,主要用于接收对象回收通知,进行资源清理。通过合理选择引用类型,可优化内存管理,避免内存泄露。

本次课程的主题是JVM对象引用在JAVA开发中我们经常需要管理对象的引用了解不同类型的引用,对于优化内存避免内存泄露等方面至关重要。

 

1.强引用

1.1特点

普通对象的引用关系就是强引用,它是日常开发中最常见的引用类型之一,它通过使用new关键字创建的对象的默认引用类型。特点在于只要强引用存在垃圾回收器就不会回收对象,换言之,只有当没有任何强引用指向一个对象时该对象才会被垃圾回收器回收。正是因为这种引用类型简洁使其在日常编程中应用广泛。


1.2应用场景

强引用的一个典型应用场景是在程序中只有对象的引用,以确保对象不会被意外回收,直到明确将引用置为null或者离开其作用域。然而,需要注意的是过度使用强引用可能会导致内存泄露的风险,特别是在长时间运行的程序中,如果大量的强引用指向的对象无法被及时释放就会导致内存占用过高的问题

 

2.软引用

2.1特点

软引用用于维护一些可有可无的对象,是一种相对较弱的引用类型其特点是在内存不足时,垃圾回收器会回收软引用指向的对象以释放内存。相较于强引用软引用具有更低的优先级,在内存不足时会被垃圾回收器优先回收。在JAVA中,我们可以使用Soft Reference类来创建软引用。


2.2应用场景

软引用通常用于一些内存敏感的场景如在缓存中,我们可以使用软引用来有对象的引用,当内存不足时,垃圾回收器会回收软引用指向的对象从而释放内存。这样,可避免由于缓存占用过多内存而导致的性能问题。需要注意的是,软用并不是绝对可靠的。尽管垃圾回收器会根据内存情况来回收软引用指向的对象,但并不保证一定会在内存不足时立即回收因此在使用软引用时,我们需要根据具体情况来权衡其使用避免出现内存泄露或者性能问题

 

3.弱引用

3.1特点

引用是JAVA中的一种引用类型,比软引用更弱,其引用对象更加无用也更容易被垃圾回收器回收。与软引用类似,弱引用同样是为了解决内存敏感的场景而设计的。在JAVA中,我们可以使用Weak Reference类来创建引用


3.2应用场景

引用的特点在于无论内存是否充足当垃圾回收器进行垃圾回收时,都会回收弱引用指向的对象,这种特性使得弱引用在某些情况下非常有用。如在实现缓存时当对象不再被强引用所持有时可以使用弱用来释放缓存对象,避免长时间占用内存与软引用不同的是,弱引用的生命周期更短,更容易被垃圾回收器回收。因此,在使用弱引用时需要格外小心,确保在对象不再被使用时及时释放弱引用。同时弱引用也可以用于一些生命周期不确定的对象引用,如临时对象的引用,这样可以避免因为强引用导致的对象无法被及时释放的问题

 

4.虚引用

4.1特点

虚引用在现实场景较少,是所有引用类型中最弱的一种,引用类型也是最不直接的引用类型与其他引用类型不同虚引用并不能通过get方法来获取被引用的对象,其唯一的作用是在对象被回收时收到一个系统通知。在JAVA中,我们可以使用Phantom Reference类来创建虚引用。


4.2应用场景

虚引用通常用于一些高级的内存管理场景,如管理外内存在NIO中的Direct Byte Buffer对象。当虚引用接收到通知时我们可以进行一些必要的清理工作,如释放外内存,以确保资源得到及时释放,避免资源泄露。虽然虚引用的使用场景相对较少,但在某些特定的场景下特别是对于需要精细控制内存的高性能应用中,虚引用可以发挥重要作用通过合理的结合虚引用与其他引用类型,我们可以更灵活进行内存管理,提高程序的性能和健壮性。


通过本次课程我们对JVM对象引用有了更深入的了解强引用软引用弱引用和虚引用各有其特点我们可以根据不同的场景选择合适的引用类型来管理对象的生命周期从而更好优化内存,避免内存泄露等问题

相关文章
|
8月前
|
存储 安全 算法
深入剖析JVM内存管理与对象创建原理
JVM内存管理,JVM运行时区域,直接内存,对象创建原理。
120 2
|
8月前
|
存储 算法 安全
【JVM】深入理解JVM对象内存分配方式
【JVM】深入理解JVM对象内存分配方式
104 0
|
2月前
|
存储 算法 Java
散列表的数据结构以及对象在JVM堆中的存储过程
本文介绍了散列表的基本概念及其在JVM中的应用,详细讲解了散列表的结构、对象存储过程、Hashtable的扩容机制及与HashMap的区别。通过实例和图解,帮助读者理解散列表的工作原理和优化策略。
46 1
散列表的数据结构以及对象在JVM堆中的存储过程
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
116 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
3月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
68 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
3月前
|
算法 Java
JVM进阶调优系列(3)堆内存的对象什么时候被回收?
堆对象的生命周期是咋样的?什么时候被回收,回收前又如何流转?具体又是被如何回收?今天重点讲对象GC,看完这篇就全都明白了。
|
5月前
|
存储 Java 程序员
Java中对象几种类型的内存分配(JVM对象储存机制)
Java中对象几种类型的内存分配(JVM对象储存机制)
101 5
Java中对象几种类型的内存分配(JVM对象储存机制)
|
6月前
|
存储 监控 算法
(六)JVM成神路之GC基础篇:对象存活判定算法、GC算法、STW、GC种类详解
经过前面五个章节的分析后,对于JVM的大部分子系统都已阐述完毕,在本文中则开始对JVM的GC子系统进行全面阐述,GC机制也是JVM的重中之重,调优、监控、面试都逃不开的JVM话题。
193 8
|
6月前
|
存储 缓存 算法
(五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内。而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程、Java对象在内存中的布局以及对象引用类型。
153 8
|
7月前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
76 3