我从未见过这样的陈述,它在java世界中是否存在?
答案 0 :(得分:14)
Java的malloc
版本是new
- 它创建了一个指定类型的新对象。
在Java中,内存是为您管理的,因此您无法明确delete
或free
一个对象。
答案 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
,垃圾收集器而非免费。