【发布时间】:2014-05-28 15:52:30
【问题描述】:
我编写了一个 JavaFX 应用程序,其中包括通过 JNA 进行的设备交互,并且将其作为独立应用程序运行没有问题,但是当嵌入到浏览器中时,在很长一段时间内,应用程序逐渐变慢并最终停止响应。使用 JVisualVM 分析和监视应用程序,我可以看到堆在内存耗尽和老一代内存空间已满之前失去控制。
我找到了另一个question,它建议将参数传递给虚拟机以强制进行更频繁的垃圾收集。但是,由于 jvm 参数没有坚持,我无法测试该建议。
修改MyJavafxApp.html如下:
function javafxEmbed() {
dtjava.embed(
{
id: 'myApp',
url : 'demo_javafx.jnlp',
placeholder : 'javafx-app-placeholder',
width : '1100',
height : '800',
jnlp_content : 'PD94...'
},
{
jvm: "1.6.0+",
javafx : '2.2+',
jvmargs: "-XX:MaxDirectMemorySize=128M -Xmx256m"
},
{}
);
}
我无法将参数视为 JVM 标志 或 JVM 参数
而是将它们显示在 JVisualVM 中的系统属性选项卡下和 UsageTracker-AppName 下作为单个字符串
UsageTracker-AppName=http://localhost:8000/target/web/demo_javafx.html: java_status_events=true jnlp_href=demo_javafx.jnlp separate_jvm=true jnlp_embedded=PD94... java_arguments=-DXX:MaxDirectMemorySize=32m,-Xmx128m,-Xms32m width=1375 javafx_version=2.2+ code=dummy.class type=application/x-java-applet id=myApp javafx_applet_id=myApp height=1000 scriptable=true codebase=http://localhost:8000/target/web/
如何使用参数启动 JVM?
注意:我缩短了jnlp_content 字符串。我还尝试使用 -D 标志传递 jvmargs 而没有。
【问题讨论】:
标签: applet javafx jvm jvm-arguments jvm-hotspot