Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Java Swing应用程序脱离交换/页面文件?_Java_Swing_Operating System_Swapfile - Fatal编程技术网

如何防止Java Swing应用程序脱离交换/页面文件?

如何防止Java Swing应用程序脱离交换/页面文件?,java,swing,operating-system,swapfile,Java,Swing,Operating System,Swapfile,因此,我有一个Java Swing应用程序,它有一个奇怪的使用模式:它不是一直在使用,但当它被使用时,它必须立即可用。当我说立即,我的意思是,当用户按下快捷键将其带到前台时,它必须准备好供用户输入 问题是,Windows(通常是操作系统)倾向于将空闲的应用程序交换。当应用程序窗口出现在前台时,在一个典型的IDE驱动的系统上,JVM需要几秒钟才能再次加载到内存中,Swing需要重新绘制窗口等。我试图避免这种情况,并以某种方式建议操作系统将应用程序保留在内存中 我尝试了以下方法: 使用-xmsjvm

因此,我有一个Java Swing应用程序,它有一个奇怪的使用模式:它不是一直在使用,但当它被使用时,它必须立即可用。当我说立即,我的意思是,当用户按下快捷键将其带到前台时,它必须准备好供用户输入

问题是,Windows(通常是操作系统)倾向于将空闲的应用程序交换。当应用程序窗口出现在前台时,在一个典型的IDE驱动的系统上,JVM需要几秒钟才能再次加载到内存中,Swing需要重新绘制窗口等。我试图避免这种情况,并以某种方式建议操作系统将应用程序保留在内存中

我尝试了以下方法:

  • 使用-xmsjvm选项。这对swap并没有真正的帮助,尽管它确实有所帮助,但它很难度量并且不一致(换句话说,在大多数情况下失败)
  • 在应用程序中运行一项任务,定期执行某些操作(查看数据、重新绘制主JPanel等)。这似乎毫无帮助。但也许我没有想到什么正确的东西
  • 完全关闭交换文件。这确实有帮助,但显然不是所有设置都推荐使用的,我也不能真的麻烦(或指望)用户来做这件事
  • 如果有任何想法,我将不胜感激。应用程序是多平台的,但重点是Windows,如果需要,我可以为不同的操作系统做不同的事情。如果可能的话,我愿意在操作系统上玩得很好,但如果需要的话,我也愿意玩得很粗糙。我的想法是,操作系统可能不会为应用程序提供一种传达其偏好的方式,但必须有一种方式来修改应用程序的行为,以便操作系统发现应用程序不是一个很好的交换对象


    编辑:我在这个问题上取得了一些进展,选项2。我创建了一个TimerTask,它每小时触发一次,基本上将JFrame置于前端,即执行JFrame.setVisible(true)和JFrame.toFront()。这确实保持了主窗口的响应速度!然而,一旦需要访问应用程序的另一部分,就会再次出现可怕的暂停。这是有道理的,因为操作系统可能只在内存中保存被访问的页面。必须有一种方法可以访问JVM中的所有页面,而无需在用户面前闪烁应用程序窗口,无需知道特定于应用程序的对象(不希望每次修改应用程序时都更新此代码),而且编译器不会判定访问操作不是op并跳过它。

    我肯定不是所有操作系统都支持这一点,但这似乎是唯一的方法-

    mlockall-agent.jar是一个Java代理,可以与任何 java应用程序使应用程序使用的虚拟内存 在内存中“锁定”——防止它被交换到磁盘


    也许您想告诉操作系统,在决定交换哪些应用程序或在资源不足时交换哪些页面时,您的应用程序应该具有较高的优先级。搜索。在taskmanager中调整pid优先级如何?也许还有其他热点选项,例如XX:LargePageSizeInBytes.With选项2。您是否提高了线程优先级,可能还提高了setDeamon()?不可能,只有本机操作系统才能确定查看蓝色的直接方式是什么、何时、多长时间screen@javajon-我正在使用TimerTask,它对选项2具有正常优先级,而更新GUI的Swing事件调度线程在默认情况下具有略高的优先级。我已经玩了一点线程优先级,但没有发现它会影响被交换的内容。Swapiness很酷,我不知道,但似乎无法影响单个应用程序。在这个针对Windows的SO问题中,有一点关于锁定页面,但它看起来非常粗糙,我不得不求助于JNI:你证明了原因是OS交换文件吗?您是否尝试在操作系统级别禁用交换文件,只是为了验证实际情况?看看你的问题。