如何将Java进程锁定到内存?(姆洛克)

如何将Java进程锁定到内存?(姆洛克),java,memory,locking,java-native-interface,Java,Memory,Locking,Java Native Interface,我在2010年发现了这个堆栈溢出问题: 基本上,它说将java进程锁定到内存的方法是使用JNI。它所指的例子是一个断开的链接。现在是2013年,我的问题是。。有更好的办法吗?是否有人在Java中使用mlock的例子?我对JNI和C代码非常缺乏经验,但对Java非常熟悉(尽管我从未使用过JNI) 谢谢 我想知道如果可能的话,是否有一个好的java解决方案不涉及JNI 没有。将应用程序固定在内存中是特定于操作系统的,标准JVMAPI不支持 做一件相当危险的事。。。因为可能会对整个系统性能造成严重

我在2010年发现了这个堆栈溢出问题:

基本上,它说将java进程锁定到内存的方法是使用JNI。它所指的例子是一个断开的链接。现在是2013年,我的问题是。。有更好的办法吗?是否有人在Java中使用mlock的例子?我对JNI和C代码非常缺乏经验,但对Java非常熟悉(尽管我从未使用过JNI)

谢谢

我想知道如果可能的话,是否有一个好的java解决方案不涉及JNI

没有。将应用程序固定在内存中是特定于操作系统的,标准JVMAPI不支持


做一件相当危险的事。。。因为可能会对整个系统性能造成严重影响。因此,在任何支持它的系统上,它都应该需要root权限(或等效权限)

我个人不会尝试这样做,并且会非常犹豫是否使用这样做的应用程序。无论你想要实现什么,最好用其他方式来实现



出于安全考虑,我想这么做

哦。所以,您实际上要做的是阻止“超级机密”内容写入光盘上的交换/页面空间

  • 我不相信mlock会阻止写入交换的内容

  • 如果有人能够访问交换光盘,那么他们就有可能使用其他机制提取数据;e、 g.使用“/dev/mem”或等效工具从物理内存或进程虚拟内存中读取内容

  • 解决交换光盘上“超级机密”内容问题的常规方法是使用字符数组而不是字符串来保存这些内容,并在完成后立即手动用零覆盖它们

  • 或者调查磁盘级加密


  • 我在寻找类似的东西,发现如下:


    对于固定Java内存的问题,这似乎是一个非常好的解决方案。如果使用它,请确保将初始堆大小(-XMs)设置为与最大堆大小(-Xmx)相同-文档中说,如果不这样做,在初始堆之后分配的任何内存都不会被锁定。

    我唯一在内存中锁定进程的经验可以追溯到1978年,当时一位同事违背了所有人的建议,将相关系统置于瘫痪状态。我强烈建议你不要这样做。出于安全考虑,我想这样做。没有涉及“系统”。只是一个一次性进程。您确定要将整个进程固定在内存中、整个JVM中,还是只需要确保不交换包含密码或其他敏感数据的缓冲区?不幸的是,我不知道答案,但如果你能避开后者,我会选择前者。整个JVM进程可以有大量与之相关的内存。