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

本文详细对比了C++和Java在创建局部对象和内存管理上的区别,包括对象创建方式、手动释放对象的方法、垃圾回收机制、以及GC的工作原理。重点讨论了C++中使用new和delete进行内存分配与释放,而Java则依赖于垃圾回收机制自动管理内存。同时介绍了Java中的垃圾回收策略、如何通过Finalize方法进行额外内存释放,以及System.gc()的使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(),垃圾回收不一定会立即执行


c++, <wbr>java释放内存的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值