【发布时间】:2023-03-18 09:00:01
【问题描述】:
假设您在堆内存中有一个对称密钥,您不再需要它,但您想确保在释放内存/收集垃圾之前擦除它。如果您自己擦除它,优化器可能会因为不必要而跳过此步骤。那么,如何正确地做呢?
【问题讨论】:
-
基本上不可能安全地做到这一点,关于使用 char 数组的事情基本上是一个红鲱鱼(在你清除它之前发生了一次 GC,突然你在内存中有 2 个副本......哎呀)。唯一能保证工作的方法是使用 DirectByteBuffer,但这很麻烦。过去,我曾使用 unsafe 在 GC 堆外创建 String 实例以获得乐趣,但由于显而易见的原因,这很脆弱。
标签: java security optimization garbage-collection cryptography