考虑下面Java中的简单示例。如果我通过调用 ref.on("value", function(element) {
return function (snapshot) {
element.innerHTML = snapshot.val();
console.log(element);
}
}(elements[i]),
function (errorObject) { // Deal with errors
console.log("The read failed: " + errorObject.code);
});
创建对象会发生什么?首先,在内存中创建一个B类对象。然后,表达式1 / n将抛出异常。但是根据下面的Java规范(第12.6.1节),创建的对象永远不会被最终确定。那么我们是否会发生内存泄漏?
请注意,我不是在问“构造函数是否可以抛出异常”,而是“如果构造函数在特定情况下抛出异常会发生什么。”
对象o在其构造函数调用了o上的Object的构造函数并且该调用已成功完成(即不抛出异常)之前无法终结。
new B(0)
答案 0 :(得分:4)
您引用的部分区分了可达性和可终结性:
每个对象都可以通过两个属性来表征:它可以是可达的,终结器可达的,或者是不可达的,它也可以是未终结的,可终结的或最终的。
因此,一个对象可以独立访问,也可以无法访问,并且可以终结或不可终结。
在你提到的情况下,Object
构造函数从未运行过,因此对象不可终结,但是构造函数的OTOH抛出异常,因此将new
结果赋值给变量永远不会发生,所以它无法到达。
所以没有内存泄漏。