如何显式执行垃圾回收

时间:2014-02-06 09:12:35

标签: java android garbage-collection

通过内置的垃圾收集,Java允许开发人员创建新对象,而无需担心内存分配和释放,因为垃圾收集器会自动回收内存以供重用。

AFAIK垃圾收集器通常在您的应用程序内存不足时运行。它包含一个表示对象之间链接的图形,可以释放孤立对象。

  

虽然我们有System.gc(),但是如果你在System.gc()写了free()   代码Java VM可能会或可能不会在运行时决定做垃圾   这篇文章由System.gc() in Java

解释

所以我对java的垃圾收集过程有些怀疑。

  • 我想知道在C语言中是否存在像new这样的java中的这种方法,我们可以在明确想要释放由new运算符分配的内存部分时调用

  • malloc()执行与calloc()delete()相同的操作吗?

  • java中是否有free()malloc()calloc()sizeof()和{{1}}方法的替换。

4 个答案:

答案 0 :(得分:7)

不,没有。 Java不是c,你不应该明确地管理内存。

答案 1 :(得分:6)

  

AFAIK垃圾收集器通常在您的应用程序内存不足时运行。

对此没什么不同意见。不会。它以异步方式运行并收集引用的内存位置。

  

我想知道在C语言中是否存在像free()这样的java中的这种方法,当我们明确想要释放由新运算符分配的内存部分时,我们可以调用它。

然后再次System.gc()是您的呼叫,但不是100%确定内存立即清除。

  

new也执行与malloc()或calloc()相同的操作吗?

如果您的意思是分配内存,那么 Object

  

java中是否存在delete(),free(),malloc(),calloc()和sizeof()方法的替代项。

AFAIK没有直接的功能。

最重要的是,你不必担心这些事情,现代JVM很聪明地处理这些事情。

interesting thread here found on SO,当GC决定运行时。希望有所帮助。

答案 2 :(得分:1)

我没有特别努力,但我把它读作我对java nio的知识增强。 在nio中我们有一个bytebuffer,它在我看来它可以是java版本的malloc。

缓冲区本质上是一个可以写入数据的内存块,然后可以再次读取。此内存块包含在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用内存块。

语法:

ByteBuffer buf = ByteBuffer.allocate(24);

更多阅读ByteBuffer

答案 3 :(得分:0)

在Java中,我们有System.gc(),它主要用于显式调用垃圾收集。但是,人们应该避免这种情况,因为它显示了未填补的空白。 你可以看看这个:stackoverflow

但是,当系统内存不足时,Java会执行垃圾收集本身的任务。您可以在应用程序级别上执行的操作是,为所有未使用的变量和对象分配null,使其无法使用,并允许JVM执行垃圾回收。