// works with FetchType.LAZY and FetchType.EAGER
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "CLASS_ID")
@Fetch(FetchMode.SELECT)
@BatchSize(size = 1)
private List<Students> students;
public List<Students> getStudents() { return students; }
public void setStudents(List<Students> students) { this.students = students; }
此代码会导致内存泄漏吗?#34; obj = getObjects(i);&#34;?
我不确定obj的旧值是否已被释放,或者他们是否还在使用内存。
如果这是内存泄漏,那么正确的语法是什么?
答案 0 :(得分:1)
在java中有一个垃圾收集器,所以使用这样的正常操作很难导致内存泄漏。垃圾收集器可以释放任何不再引用的内存。
有关垃圾收集的更多信息:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
简短的回答是你的代码不应该导致内存泄漏。
答案 1 :(得分:0)
参考或对象未被发布&#34;什么时候被覆盖在为变量分配一个int
时,不再需要将引用分配给它。
相反,旧的引用不再存在,GC会查找仍然存在的引用。
答案 2 :(得分:0)
此代码会导致内存泄漏吗?#34; obj = getObjects(i);&#34;?
不可能肯定地说。您还没有向我们展示getObjects
的代码,并且可能(尽管不太可能,基于方法的名称)该方法可能会发生内部内存泄漏。
但是,重复分配对简单变量(例如obj
)的引用不会泄漏内存。
我不确定obj的旧值是否已被释放,或者他们是否还在使用内存。
这不是那么简单:
obj
分配不同的引用时,不会立即释放这些引用所引用的对象。如果这是内存泄漏,那么正确的语法是什么?
对于记录,内存泄漏不是语法问题。
答案 3 :(得分:0)
我做了一个测试,很好,java是定期释放内存。 我仍然使用HashMap来重现我的应用程序上下文。
package memtest;
import java.util.HashMap;
public class MemTest {
public static void main(String[] args) throws InterruptedException {
HashMap obj = new HashMap();
int loop = 1;
while(true) {
HashMap newObj = new HashMap();
newObj.put("1", "big string that is not pasted here");
obj = newObj;
System.err.println("At loop "+loop);
Thread.sleep(1000);
loop++;
}
}
}