您的位置:首页 > 编程语言 > C语言/C++

c++与java释放内存的比较

2013-08-29 14:34 281 查看
1,  c++中允许创建局部对象,局部对象在代码块执行完后自动释放

2,  Java中部允许创建局部对象,只能通过new来创建对象

所以如果MyClass是一个类名的话

MyClass  a;

这句话如果在c++中,那么它就创建了一个MyClass对象

而在Java中仅仅是声明了一个引用,它并没有创建对象

3, C++中如果用new来创建对象,那么程序员必须通过delete来释放对象,否则会造成内存泄露

4, Java中没有delete关键字,其释放对象依靠垃圾回收GC来实现;即程序员不必考虑对象用完后的释放问题,只需将指向该对象所有引用设置为null即可

5,  Java中的垃圾回收并不是立即执行的,它是一个低优先级的操作

6, Java中的垃圾回收只与内存有关,即仅与new出来的对象有关;如果通过其他内存方法申请的内存并不能通过垃圾回收来释放,比如java调用的JNInative方法里用malloc申请的内存就靠垃圾回收来释放,什么时候释放呢?Java允许类里自己定义Finalize方法,该方法在类对象被垃圾回收前调用,这个函数通常用来清除非java内存方法创建的内存,即可以在该方法里调用相应的JNI函数来释放/free()  malloc出来的内存

7, 关于gc的工作机制,根据jvm设计的不同,gc工作过程可能也不同。最常用的工作机制是:所有内存对象以有向图的方式存在,当不能达到该对象时即清除,即将不可达到的内存节点清除

8,  如果程序调用System.gc(),垃圾回收不一定会立即执行



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: