从内存中清除敏感数据的char数组

时间:2018-12-21 22:20:23

标签: java arrays memory char

“清零”一个字符数组的好处是否有所不同,因此它不会使用Arrays.fill(password, 0)而不是password = null保留在内存中?我不是在问为什么使用char数组而不是String。我在问为什么将值设置为0而不是将数组设置为null。是否因为将值设置为0会立即更改内存中的值,而null不会立即将内存中的值更改为null,而是只是等待对其进行垃圾回收?将该值设置为0,然后立即将其也设置为null,这样就可以进行垃圾回收,而不是像0那样坐着吗?

1 个答案:

答案 0 :(得分:0)

否,无论每个char的值如何,该数组仍将保留在内存中并因此消耗。

将引用定义为空可能,如果它是对此数组的最后引用,则可能导致GC选择。

另一方面,如果您出于安全考虑,最好在释放引用之前重置每个字符。

您可以阅读有关Why is char[] preferred over String for passwords?

的更多信息