是否有可能告诉JVM提示操作系统某个对象最好不会被推出到交换空间?

有帮助吗?

解决方案

简短的回答是否定的。

Java不允许您对交换的内容以及“固定”到RAM中的内容进行任何控制。

担心这类事情通常表明您的项目中存在其他问题。操作系统总体上可以更好地解决应该交换的内容和不应该交换的内容。你的工作就是编写你的软件,这样它就不会试图猜测底层的VM / OS会做什么,只需专注于提供你的功能和一个好的设计。

其他提示

这个问题在Eclipse和KeepResident脏黑客插件中也非常引人注目( http:// suif.stanford.edu/pub/keepresident/ 避免它。

这可能是一个好的开始?我还没有广泛使用它,所以也许它已经集成在标准的Eclipse发行版中了?

喂!您使用托管语言进行编程。你为什么这么想?如果你不能忘记这些东西,你总是可以选择用C编程。

简短的回答是(如上所述):不要这样做: - )。

原则上可行。大多数操作系统都允许“锁定”交换某些内存区域(例如,Linux下的 mlock(2),Windows下的VirtualLock )。

VM可以通过合适的API将此功能公开给Java应用程序。但是,我所知道的VM没有这样做,所以要做到这一点,首先要修改你的VM ......

如果你定期访问它,那么它当时碰巧进入的任何页面(JVM在垃圾收集期间移动的东西)将不会被分页,除非其他东西更积极地请求内存。但是没有办法告诉JVM不要将它移动到另一个页面,操作系统只知道页面。

不是答案,但缺乏评论要点,我保留此选项:)

有理由不在swap中存储信息。无论是密码还是其他机密信息都不应该花在磁盘上。另外,在周末回到我的电脑后回来,我想要一些东西可以立即存在。

(非Java)本地可能有一些方法可以为每个/大多数操作系统执行此操作。有了窗户,这绝对是可能的。但不是直接用java(想想JNI)。 根据此选项的绝对程度,您可以随时查看使用视频内存或其他未换出的硬件设备。这允许您仍然使用标准的java api,例如jogl来存储信息。但不知何故,我怀疑这与您正在寻找的实施/结果有关。

基本上,您希望将整个JVM始终保留在主内存中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top