防止 OS 将对象交换到 Java 中的虚拟 memory/disk?

Prevent the OS from swapping objects to virtual memory/disk in Java?

所以我有一个让用户输入密码的程序。在覆盖它之前,我只在 char[] 中将密码短语保留了几秒钟,但我想知道 Java 中是否有办法防止 OS 将此位交换为 disk/virtual memory/any 比 RAM 更持久的存储空间?对该主题的研究似乎说不,没有办法,但还没有地方给我一个直接的答案。我也不确定我是否可以通过以某种方式使用 mlock() 或通过保持对该值的引用直到我不再需要它来实现这一点。

谢谢!

您需要做的是:使用char[]来存储密码。当你完成密码后,只需用 0 覆盖数组,这样如果攻击者试图扫描所有内存以找到密码,并且 Java GC 直到那时还没有摆脱变量,攻击者将无法检索密码,因为您已经覆盖了数组本身。

干杯。

编辑: 当内核开始使用 HDD 来减轻 RAM 上的压力时,HDD 上的 space 就像 RAM 一样,这意味着它不会永久存储给它的数据。