java - 将新数组分配给现有数组以在 Java 中“清除”数组是不好的做法吗?
问题描述
所以我目前正在开发一个程序,该程序需要能够处理存储在数组中的大量数据,并且它需要一种方法来清除数组中的所有内容。对于下面的示例,在记忆方面这样做会是一件坏事吗?我知道垃圾收集器最终会为您清理它,但有没有理由为什么另一种方法(例如 for 循环并将每个值设置为 null)可能比这更好?
Object[] objArray = new Object[n];
/*Do some stuff with objArray*/
objArray = new Object[n]
否则,这样做将允许此操作在 O(1) 时间内运行,而 for 循环则需要 O(n)。
解决方案
这是不好的做法。
首先,将新数组分配给变量实际上并没有“清除”任何内容(下面将详细介绍)。
这是最佳实践:
objArray = null;
这使得原始数组无法访问,因此它将(最终)被垃圾收集。
它还避免了不必要的内存分配,创建用于替换旧数组的空数组。
但是,这两个选项都不会“清除”原始数组,这可能会带来尽管很小的安全风险。在垃圾收集之前,如果内存内容被转储等,数组的内容可能是可预测的。
真正清除数组:
Arrays.fill(objArray, null);
推荐阅读
- solidity - 将solidity余额迁移为从合约A到B的映射
- php - 会员登录后重定向回 URL
- python - NsLookup 打印出清理
- unity3d - Unity UI:你能同时锚定到一个特定的点,并在各个方向上伸展吗?
- reactjs - 将打字稿传递函数作为道具反应并从子组件调用
- javascript - SecurityInterstitialCommandId.CMD_PROCEED 实际上做了什么?
- azure - 如何为 Azure 应用服务计划指定发行版?
- amazon-ec2 - Terraform 是否会公开 ECS 启动类型中使用的 EC2 实例的实例 ID?
- python - 我怎样才能阻止这个计时器造成的滞后?
- file - 请求、FastAPI、最小代码中的错误