我有JFrame
和JTabbedPane
JTabbedPane
有JPanel
个,每个JPanel
都有Applet
。
如果我加载小程序,然后关闭它,则CPU使用率会下降,但RAM使用率会保持很高。因此,为了让我正确释放RAM,每个JPanel
/ Applet
必须拥有自己的JVM,我可以终止它。 Applet
的代码不是我的代码,但是它是如何制作的,只是破坏它就行不了。
所以我要问的是,当我添加一个JVM时,如何为每个JPanel
添加一个新的JVM?
答案 0 :(得分:1)
为了实现这一点,每次要打开一个JPanel / Applet时,你需要有一个能够启动JVM新实例(分叉新进程)的包装器应用程序。你可以通过调用Runtime.exec()
并调用JVM的一个新实例来做到这一点,但老实说这一切对我来说都有点味道。 JVM真的不是为此而设计的,我认为更有可能的是你在某个地方没有妥善处理内存泄漏。
答案 1 :(得分:0)
我不认为您可以为任何给定的应用程序运行多个JVM实例,详见Runtime Class
但是,我相信如果在关闭时删除对每个Applet的所有引用,可以调用System.gc()来清理内存,以便可以将其用于该Java应用程序中的其他内容。但是,请记住,您的RAM使用率不会下降,因为JVM堆是在启动时分配的,据我所知,在执行期间无法调整大小。有关其工作原理的信息,请参阅JVM Option: Xmx Allocation