Java与Python的内存回收的异同

发布于 2021-04-29 08:10

如何判断对象是否可以回收?

Java使用的是可达性分析算法。Python以引用计数为主,可达性分析算法为辅。在Python中,对于普通类型的对象,例如int、string等根本不可能形成循环引用的类型,采用引用计数算法来判断对象是否要被回收。而对于容器类型的对象(list、dict、用户自定义类型等)容易出现循环引用的情况,则采用可达性分析算法。


两者的可达性分析算法有什么异同吗?

Python中的可达性分析算法是建立在使用循环垃圾回收器(cyclic garbage collector)基础上,而循环垃圾回收器仅仅是针对容器对象做回收操作。另外,Python中的容器对象不一定是被循环垃圾回收器回收掉,也有可能被引用计数系统所回收。Java的可达性分析算法不单单针对容器对象。


分代回收

Python和Java都根据对象的存活时长来进行分代回收,处理流程大同小异。




相关资源