JAVA垃圾回收机制和Python垃圾回收对比与分析

2018/3/9更:个人理解JAVA与Python区别,若有不足,请及时指出,谢谢!

JAVA垃圾回收原理:参考JAVA编程思想P90-P91

JAVA垃圾回收:采用停止-复制、标记-清扫的自适应方法

首先使用停止-复制方法,停止程序,然后将存活的对象,从当前堆复制到另外一个堆,并且是一个一个紧密排列;但是复制过程是两个堆之间来回进行,导致开销极大,并且,可能在程序稳定后,只有少部分垃圾,但是依旧进行停止-复制的话,产生浪费;

因此,标记-清扫方法派上了用场,该方法首先从堆栈和静态区出发,遍历所有引用,找出所有活引用,进行标记;该过程不进行清理,当标记完所有对象之后,开始清理工作,没有标记的对象(垃圾)就会被释放,所以剩下的是不连续的堆空间,如果希望堆连续,垃圾回收器将重新整理堆空间(Python 用的是计数引用回收,每次引用,计数器+1,当计数为0的时候,该变量会被回收)
 

编译过程:Java采用惰性评估方法,当需要装载某个类时,编译器会先找到.class文件,然后将该类字节码装入内存,惰性评估只在必要的时候才编译代码;这比对所有代码进行编译要节省许多消耗。

补充:JAVA与Python的区别:

1、JAVA是一种编译型语言,需要编辑器,Python是一种脚本性语言,需要解释器,JAVA是一种强调数据类型的语言,而Python在这个方面是动态的,宽容的;因此JAVA能够进行重载,而Python是不行的,因为参数执行之前的类型并没有明确界定。

2、JAVA能够进行多线程编程,而Python由于全局解释器的存在,无法进行多线程,但是python3之后,衍生出了多协程方式,另外一种并行机制;

3、现阶段国内发展情况是:JAVA主要用于web后台开发,是主流,虽然Python有Django这样的web框架,但是被公司运用的并不多,Python主要用于数据挖掘/分析,自动化脚本测试等;

若有不足之处和问题请指出,互相学习,谢谢!

欢迎转载,注明出处。

你可能感兴趣的:(Python和JAVA)