理解 Java 软引用、弱引用、虚引用及其使用场景

一、 概述

几乎所有允许动态分配内存的计算机语言都会遇见一个共同问题——如何“收集”不在使用的内存。

有点和餐厅类似,开始时,餐厅的所有餐桌均处于空闲状态,可供顾客使用。但是,当所有餐桌都已经被分配给客户时,就需要检查哪些已经被分配的餐桌处于空闲状态。

有些语言,比如 C 语言,把这个责任交给用户:分配到了内存,那么你就有责任释放内存。这就和快餐很像,用完餐后,需要把餐桌整理干净。如果所有顾客都这样正确处理,这种方式效率很高,但是,如果有顾客忘记清理餐桌,就会出现问题。内存空间也一样,很容易忘记释放已经分配的内存。

垃圾收集器(GC)就用来解决此类问题。在 Java 中,GC 使用特定算法“收集”不在使用的内存,程序员不需要手动释放。

假设 Java GC 完美运行,并且它能释放所有不再可达的对象。那么,就会引入一个新问题——想保留对一个对象的引用,但是当该对象没有其余引用时,又不想阻止 GC 对其回收。就像在餐厅用完餐后还想坐一会,但是当有新顾客需要这张餐桌时,可以立即离开。

顺便在这里说一下,我目前是在职Java开发,如果在学习Java的过程当中有遇见任何关于学习方法,学习路线等方面的问题,你都可以点击加入 Java技术讨论组,这里面聚集了很多正在学习Java技术的初学者,也有不少从事Java开发岗的大佬,与Java相关的问题

你可能感兴趣的:(Java程序员的培养日记,java,jvm,开发语言)