java - 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 的其余部分相比,很难找到函数内部发生的情况。
解决方案
你在这里混合了几个术语。在您的代码示例中,您不是在创建对象,而是在声明一个原始类型的变量int
。这个变量是在堆栈上创建的。每个变量都有一个作用域,在这种情况下就是循环体。变量的值被承诺仅在其范围内有效,因此当每次迭代结束时,该变量不再被使用(它的内存可以被回收并用于其他原因)。
方法也是如此——它们声明了一个范围,其中声明的变量在其中有效。当函数返回时,声明的变量不再使用,它们的内存可以回收。
有关更多信息,请检查局部变量和范围
推荐阅读
- python - 使用 aiogram 和本地 bot 服务器上传大文件失败。什么是正确的方法?
- c++ - 如何在二进制文件c ++中创建一个新行?
- c# - 正则表达式匹配模式加上字符串的其余部分,直到下一个点、逗号或空格
- regex - 重命名脚本以调整 debian 中文件名中的某些模式
- apache-flink - 如何捕捉 flink 的 readFile(path) 抛出的异常?
- javascript - 嗨,我想构建一个名为“沉船”的小应用游戏?
- java - 如何使用 Java8 在 Mac 上安装 PySpark 和 Pytest
- mysql - 如何有条件地为每个用户选择一行?
- c - 在 Arduino UNO 中读取没有 IDE 的 USB 数据
- java - Kotlin - 错误:无法在 IntelliJ IDE 中找到或加载主类