public class Abc {
Abc abc1=new Abc();
static Abc abc=new Abc();
public static void main(String[] args) {
Abc abc=new Abc();
}
}
对象存储在堆内存中,但是为什么我没有得到OutOfMemoryError?
答案 0 :(得分:4)
您正在递归地构造这些对象。在option
的构造函数中,它创建了一个新对象,该对象又调用它的构造函数。
您可以递归调用的次数大约是1,000到10,000次。您可以创建的对象数量为1,000,000到20,000,000。
简而言之,您在堆耗尽之前就会耗尽堆栈。
您可以添加
等字段/* ----- JavaScript ----- */
$("#enqsave").on("click", function () {
var
/* Get the 'select' element. */
select = $(this).closest("tr").find("select.input-sm")[0],
/* Get the selected option and save its textContent. */
textContent = select.selectedOptions[0].textContent;
/* Log the value and textContent of the selected option. */
console.log("value: ", select.value);
console.log("textContent: ", textContent);
});
这样,在堆完用完之前,你可能会用完堆。
答案 1 :(得分:0)
因为在内存消失之前我记得大约56k的分辨率堆栈,如果你想测试它,请尝试在每个对象上创建一个ByteBuffer.create。
堆栈中有来自谁调用代码的信息(printStackTrace读取该堆栈以打印负责的代码)并限制它如何增加,这是因为在某些情况下需要用迭代替换递归。