首页 > 解决方案 > Java 对象持久性

问题描述

我试图在不损失处理效率的情况下用更少的行编写代码。考虑这段代码:

JSONArray arr = new JSONArray();
for(i = 0; i < 10; i++){
    JSONObject main = = new JSONObject();
    main.put("RedApples", i);
    main.put("GreenApples", i);
    arr.add(main);
}

现在我们知道这是错误的代码,因为 JSONObject 是在循环内声明的,因此您将声明 10 个不同的 JSONObjects 对象,这些对象将保留在内存中,直到代码完成。我们应该希望在数组之外声明 JSONObject 并简单地将其设置在循环内。

现在函数呢?如果在函数内部声明了一个 JSONObject 并且该函数被调用了 10 次,它将把所有 10 个都保存在内存中,还是在函数结束时内存被完全转储?我在 servlet 中使用它。我试过搜索这个,但与 servlet 的其余部分相比,很难找到函数内部发生的情况。

标签: javaservlets

解决方案


你在这里混合了几个术语。在您的代码示例中,您不是在创建对象,而是在声明一个原始类型的变量int。这个变量是在堆栈上创建的。每个变量都有一个作用域,在这种情况下就是循环体。变量的值被承诺仅在其范围内有效,因此当每次迭代结束时,该变量不再被使用(它的内存可以被回收并用于其他原因)。

方法也是如此——它们声明了一个范围,其中声明的变量在其中有效。当函数返回时,声明的变量不再使用,它​​们的内存可以回收。

有关更多信息,请检查局部变量和范围


推荐阅读