java - 每个选项卡的新 JVM 或进程

标签 java jvm

问题:

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

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

我尝试调用 System.gc,但没有得到保证,而且根本没有任何作用!我尝试清空对该小程序的所有引用,但这也没有任何作用。

我的解决方案(如果可能):

每个选项卡都有自己的运行游戏的 JVM/进程。当关闭一个Tab时,小程序将停止、销毁,并且进程/JVM使用的内存将返回给操作系统,因为进程/JVM死了?

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

如果没有,如何清除所有关闭的标签页的内存?

最佳答案

  1. 首先,使用适合工作的正确工具。流程经理不知道 关于 JVM 的任何事情,它管理自己的内存。下载 最新版本的 VisualVM 并安装 VisualGC 插件。检查 实际发生的事情而不是通过流程猜测 经理。如果你确实没有恢复内存,请使用 VisualVM 中的内存分析器或 Plumbr 等工具。

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

    • -XX:+UseAdaptiveSizePolicy
    • -XX:+使用自适应GCBoundary
    • -XX:+UseCompressedOops
    • -XX:+使用G1GC

祝你好运!

关于java - 每个选项卡的新 JVM 或进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782611/

相关文章:

java - 如何从 Liquibase 中的现有列添加具有默认值的新列

java - 在 JVM 之上运行/解释 C?

java - 为什么 xmx 和 top 之间的内存使用存在差异?

java - 使用 JVM SNMP 功能的读写访问可以做什么?

java - OCaml:两组中每个值的排列? (如何从 Java 翻译这个)

java - 将参数数组传递给 Quartz Scheduler

java - 如何在java代码中连接到调制解调器路由器

java - 在 HP Load Runner 的 VuGen 中加载 javai.dll 时出错

java - JVM退出代码1073807364的原因是什么?

java - Maven Android : java. lang.UnsupportedClassVersionError : com/android/dx/command/Main : Unsupported major. 次要版本 52.0