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(),垃圾回收不一定会立即执行
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(),垃圾回收不一定会立即执行
相关文章推荐
- 比较java c++ 对象之间的区别(内存)
- 关于c++, java释放内存的比较
- 【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
- [Java学习]Java中String的内存机制/String的比较
- 关于C++中delete释放内存时效性问题
- java,c,c++ 语言之间基本数据类型的比较
- [笔试] C和C++动态内存分配和释放的区别
- C\C++\Java字符串拼接比较
- Java问题总结之32-内存释放
- 【regular expression】java,js,c++正则表达式比较
- 多态在 Java 和 C++ 编程语言中的实现比较
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
- c++内存的分配与释放 malloc与new
- java,c,c++ 语言之间基本数据类型的比较
- java和C++面向对象比较
- C++与Java比较
- 比较C++和Java 二
- c++性能之对象与指针性能比较、以及java与c++性能对比实测
- C++与Java比较
- c++动态内存分配与释放