这是一个内存数据安全问题。
java垃圾收集会安全地清除垃圾数据吗?
显然,在一大块数据被垃圾收集后,我不能再检索它了,但是黑客仍然可以通过内存转储来检索数据吗?
发布于 2016-07-30 03:00:56
正如其他用户在这里已经提到的,JVM在垃圾收集之后不会安全地清理内存,因为这会严重影响性能。这就是为什么许多程序(特别是安全库)使用可变结构而不是不可变结构(字符数组而不是字符串等),并在不再需要数据时自行清理数据。
不幸的是,即使这样的方法也不总是有效的。让我们看一下这个场景:
对于这个问题,我只能想到一种可能的解决方案:
另一种解决方案是使用堆外数据,您可以根据需要手动处理这些数据,但这不是纯Java。
发布于 2016-07-30 02:23:39
这取决于JVM实现和其中可能的选项,但我假设它不会清除数据。垃圾收集只需要跟踪哪些区域是可用的。将所有数据设置为0或其他值是大量不必要的写入。正因为如此,你会经常看到API使用字符数组作为密码,而不是字符串。
发布于 2016-07-30 02:32:41
具体地说,Oracle JVM不会清除空间,它只在Eden和Survivor空间之间复制数据,不再使用的对象只是停留在那里作为垃圾,最终将被覆盖。类似的事情也发生在OldGen中,一些地方被标记为已用,当对象有资格进行垃圾回收时,它所占用的地方也被标记为未使用。如果有足够的应用时间,它最终也会被覆盖。
https://stackoverflow.com/questions/38665202
复制相似问题