工艺的问题:新的JVM或者每个选项卡
我有滋生“客户”一个JTabbedPane中。每个客户端都是使用URLClassLoader从jar文件加载的applet实例。所以基本上,每个Tab都包含一个游戏小程序。
每次标签产生时,任务管理器都会显示正在使用的内存量增加。这很好。但是,当选项卡关闭时,该小程序会停止并被销毁,但根据任务管理器的内存使用情况仍然相同。
我试着调用System.gc,这是不能保证的,而且什么也不做!我试着将所有对小程序的引用都置零,但那也什么都不做。
我的解决方案,如果可能的:
每个标签都有自己的JVM /工艺运行游戏。当一个Tab被关闭时,applet会停止,销毁,并且进程/ JVM使用的内存将被返回给操作系统,因为进程/ JVM已经死了?
我该怎么做这样的事情?是否有可能让我的JTabbedPane中的每个Tab运行Jar或创建一个新的JVM来运行它?
如果不是,我如何清除关闭的所有选项卡的内存?
为每个选项卡分配自己的JVM听起来像是不必要的复杂性。也许你有内存泄漏,也许你没有。不能保证JVM-per-tab实际上可以解决这个问题。如果首先验证你真的有内存泄漏,然后找到它并修复它? –
JVM-per-tab对我来说听起来很麻烦:你确定你正在解决一个实际存在的问题吗? –
但我确实验证过。没有泄漏:S我关闭了所有的文件,所有的URLClassLoaders,在调用stop和destroy之前的所有内容。之后,我删除了所有引用。然而,只要Frame在屏幕上,内存仍然在使用中:S。我使用netbeans分析器。只要我关闭一个选项卡,然后按netbeans GC按钮,内存使用已不存在..我在我的应用程序中手动执行此操作,不起作用。 – Brandon