0

问题:

我有一个产生“客户”的 JTabbedPane。每个客户端都是使用 URLClassLoader 从 jar 文件加载的 applet 的一个实例。所以基本上,每个选项卡都包含一个游戏小程序。

每次生成选项卡时,任务管理器都会显示正在使用的内存量增加。这很好。但是,当一个选项卡关闭时,小程序会停止并销毁,但根据任务管理器的内存使用情况仍然相同。

我尝试调用 System.gc ,但这并不能保证,而且根本没有任何作用!我尝试将所有对小程序的引用都归零,但这也无济于事。

如果可能的话,我的解决方案:

每个选项卡都有自己运行游戏的 JVM/进程。当一个 Tab 关闭时,小程序会停止,销毁,进程/JVM 使用的内存会因为进程/JVM 死了而归还给 OS?

我怎么能做这样的事情?是否可以让我的 JTabbedPane 中的每个选项卡运行 Jar 或创建一个新的 JVM 来运行它?

如果没有,我怎样才能清除所有关闭标签的内存?

4

1 回答 1

2
  1. 首先,为工作使用正确的工具。Process Manager 对管理自己的内存的 JVM 一无所知。下载最新版本的 VisualVM 并安装 VisualGC 插件。检查实际发生的事情,而不是使用 Process Manager 猜测。如果您确实没有回收您的内存,请使用 VisualVM 中的内存分析器或 Plumbr 之类的工具。

  2. 不用担心内存,除非您在第 1 步发现内存泄漏 :) 如果您在内存受限的系统上,请设置适当的 Xmx 值。此外,最新的 Oracle JRE 包括 G1GC 垃圾收集器选项。当您的应用程序不再需要大堆时,此 GC 将自动减小堆大小。尝试使用(至少)这些选项运行您的应用程序:

    • -XX:+UseAdaptiveSizePolicy
    • -XX:+使用自适应GC边界
    • -XX:+UseCompressedOops
    • -XX:+使用G1GC

祝你好运!

于 2013-05-28T02:08:15.207 回答