Java 中的内存管理:我需要在使用后清理这个对象吗?
Memory Management in Java: Do I need to clean up this object after use?
假设我有一些 Java 代码设置如下
public void captureEvent(EventTrigger event) {
// Every few minutes or so, receive and parse an event from the upstream system
actOnEvent(event);
}
private void processEvent(EventTrigger event) {
DataObject dataObject = new DataObject();
dataObject.enrichFromEvent(event);
performSomeActivityBasedOn(dataObject);
}
在这种情况下,每次我收到要处理的事件时,我都会在处理函数内创建一个新的 DataObject。
这些对象是否会随着时间的推移在内存中堆积,本质上导致“内存泄漏”,或者 Java 会自动清理它们?
提前感谢您的意见。
Will these objects build up in memory over time, essentially causing a "memory leak," or will Java automatically clean them up?
我们无从得知,你还没有解释 performSomeActivityBasedOn
对传递的 DataObject
对象做了什么。
- 如果该方法让对象引用超出范围,每个传递的
DataObject
对象将成为最终垃圾收集的候选对象。
- 如果该方法保留引用,比如将每个接收到的引用添加到某个随时间维护的集合,那么是的,随着更多对象堆积,所有收集的对象将消耗越来越多的内存。
假设我有一些 Java 代码设置如下
public void captureEvent(EventTrigger event) {
// Every few minutes or so, receive and parse an event from the upstream system
actOnEvent(event);
}
private void processEvent(EventTrigger event) {
DataObject dataObject = new DataObject();
dataObject.enrichFromEvent(event);
performSomeActivityBasedOn(dataObject);
}
在这种情况下,每次我收到要处理的事件时,我都会在处理函数内创建一个新的 DataObject。
这些对象是否会随着时间的推移在内存中堆积,本质上导致“内存泄漏”,或者 Java 会自动清理它们?
提前感谢您的意见。
Will these objects build up in memory over time, essentially causing a "memory leak," or will Java automatically clean them up?
我们无从得知,你还没有解释 performSomeActivityBasedOn
对传递的 DataObject
对象做了什么。
- 如果该方法让对象引用超出范围,每个传递的
DataObject
对象将成为最终垃圾收集的候选对象。 - 如果该方法保留引用,比如将每个接收到的引用添加到某个随时间维护的集合,那么是的,随着更多对象堆积,所有收集的对象将消耗越来越多的内存。