|
|
1
5
我不确定您试图在GC存在的情况下处理您分配的内存是什么意思,但我将尝试一些读心术。
基本上,你不应该“担心”你的记忆被收集。如果您不再引用对象,它们将被拾取。如果您创建了一种情况,在这种情况下,对象将被引用到程序的其余部分(例如:注册侦听器,而从不取消注册它们,例如:实现一个类似向量的集合,该集合不将项设置为
然而,如果你有一个强大的RAII背景,你会失望地得知,在爪哇没有直接等价物。GC是处理内存的一流工具,但不能保证何时(甚至何时)调用终结器。这意味着应用于记忆的一流治疗是 不 应用于任何其他资源,如:Windows、数据库连接、套接字、文件、同步原语等。 |
|
|
2
5
用Java和.NET(我想,大多数其他的GC'ED语言),你根本不需要担心堆内存。你什么 做 需要担心的是,本地资源,如文件句柄、套接字、图形用户界面原语,如字体等。这些资源通常需要“释放”,释放本地资源。(不管怎么说,他们通常在最后定稿时就把自己处理掉,但要回到这一点上有点困难。自己处理东西。) |
|
|
3
2
使用GC,您必须:
除此之外,你 不能 真的“注意你分配的内存”,试图这样做是浪费时间。 |
|
|
4
2
从技术上讲,您不必担心在内存分配后清理,因为所有对象都被正确地引用计数,并且GC将处理所有事情。实际上,过度活跃的GC会对性能产生负面影响。因此,Java没有
此外,Java没有析构函数,因为对象将存在直到GC到达它们为止。因此Java具有
|
|
|
5
1
在Java中,GC负责分配内存并释放未使用的内存。这并不意味着你可以一起忽视这个问题。 Java GC释放未从根引用的对象。这意味着如果您不小心从全局上下文中删除引用,比如全局哈希映射中的缓存等,Java仍然可能存在内存泄漏。
如果没有引用任何其他对象的簇,则Java GC将释放它们。也就是说,它不适用于参考计数,因此您不需要
|