通过内置的垃圾收集,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}}方法的替换。
答案 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执行垃圾回收。