循环链表导致的内存泄漏
对于依靠引用计数算法来进行内存回收的语言中,当两个智能指针互相引用对方,此时双方的引用计数始终为1。 根据内存回收规则,引用计数不为0的不能被回收。 于是这部分内存一直被占用,产生了内存泄漏。
哪些语言会因循环链表而导致内存泄漏
举例: rust、c++的智能指针
解决办法
软引用和强引用配合使用
题外话:在使用java编写循环链表的时候,为啥没涉及到循环引用的内存泄漏问题?
java虽然也有强软弱虚,但是在使用循环联表的时候没有被提及,我学过的只在关于HashMap的内存回收时用到。
查了下资料,发现java 的 Gc 使用的是 可达性分析,而不是根据引用计数来回收,这样就避开了循环引用问题。
不得不说,java学起来,用起来,还是比较舒服和简单一些的