在java中有类似malloc / free的东西吗?

时间:2010-12-10 01:33:22

标签: java memory-management

我从未见过这样的陈述,它在java世界中是否存在?

5 个答案:

答案 0 :(得分:14)

Java的malloc版本是new - 它创建了一个指定类型的新对象。

在Java中,内存是为您管理的,因此您无法明确deletefree一个对象。

答案 1 :(得分:4)

Java有垃圾收集器。这就是为什么你从来没有在你的代码中看到这样的陈述(如果你问我这很好)

  

在计算机科学中,垃圾   集合(GC)是一种自动形式   内存管理。这是一个特殊的   资源管理案例,其中   管理的有限资源是   记忆。垃圾收集器,或者只是   收藏家,试图收回   垃圾或对象占用的内存   已不再使用的   程序。垃圾收集了   1959年约翰麦卡锡发明的   解决Lisp中的问题。

答案 2 :(得分:3)

Java中没有直接的等价物:

C malloc创建一个无类型的堆节点,并返回一个指向它的指针,允许您根据需要访问内存。

Java没有无类型对象的概念,并且不允许您直接访问内存。您在Java中malloc最接近的是new byte[size],但这会返回一个强类型对象,您只能将其用作字节数组。

C free释放堆节点。

Java不允许您显式释放对象。 Java中的对象释放完全掌握在垃圾收集器中。在某些情况下,您可以影响GC的行为;例如通过将null分配给引用变量并调用System.gc()。但是,这并不会强制取消分配对象...并且是一种非常昂贵的方法。

答案 3 :(得分:3)

如果你没有好处(tm)我想你可以通过JNI接口访问原始内存。您可以在此处从Java程序调用C程序。当然,你必须在你的程序有权这样做的环境中运行(浏览器通常不允许这样做,除非它有自杀性)但你可以通过C指针访问对象。

我有点想知道原始问题的来源。很久以前,我完全怀疑不需要C风格的内存管理和C风格的指针,但此时我才是真正的信徒。

答案 4 :(得分:0)

new而不是malloc,垃圾收集器而非免费。