动态内存处理Java与C++

Alo*_*ave 2 c++ java memory-management heap-memory

我是一名C++程序员,目前正在尝试使用Java.使用C++我习惯于跟踪动态内存分配并采用各种技术(如RAII)来避免内存泄漏.我们所知道的Java提供了一个垃圾收集器(GC)来处理内存泄漏.因此,在使用Java进行编程时,应该放弃堆内存的所有健康问题并将其留给GC来处理内存泄漏,或者是有一种类似于没有GC的编程语言时的方法,尝试照顾你分配的内存,让GC处理你可能错过的内存.该方法应该是什么?两者的缺点是什么?

And*_*ron 5

我不确定你是什么意思,试图照顾你在GC存在时分配的内存,但我会尝试一些心灵阅读.

基本上,你不应该"担心"你的记忆被收集.如果您不再引用对象,它们将被拾取.如果您创建一个为程序的其余部分引用对象的情况,仍然可以进行逻辑内存泄漏(例如:注册侦听器并且永远不会注册它们,例如:实现类似向量的集合,null在删除时不设置项目项目结束).

但是,如果你有一个强大的RAII背景,那么你将会失去知道Java中没有直接的等价物.GC是处理内存的一流工具,但无法确保何时(或者甚至是)调用终结器.这意味着应用于内存的第一类处理不适用于任何其他资源,例如:windows,数据库连接,套接字,文件,同步原语等.


cHa*_*Hao 5

使用Java和.net(我想,大多数其他GC语言),你根本不需要担心堆内存.什么,你不需要担心,就像文件句柄,插座,GUI原语如字体和等本地资源.那些通常需要"处置",这释放了本机资源.(无论如何,他们经常将自己置于最终定稿之上,但是如果再回到原点,那就更有帮助了.自己处理一些东西.)