设置最大堆大小时,Java Applet无法正常启动

时间:2013-04-27 22:38:41

标签: java memory applet jnlp

我最近一直在努力开发applet。我一直试图用JNLP和“deployJava.js”脚本启动它。问题是,这是我正在开发的内存密集型小程序,并且肯定需要的不仅仅是JVM通常给出的基本内存分配。

我尝试使用JNLP中j2se元素的max-heap-size属性来设置它。这确实有效,但问题是applet似乎以某种方式重新启动,因为我得到两个打开的“java控制台”窗口。一个没有收到applet的输出,而另一个显示我输出的日志信息。此外,小程序似乎没有运行。但是,如果我在不关闭浏览器的情况下清除类加载器缓存并重新加载页面,则applet将使用正确调整的最大堆大小和所有内容。

我不知道造成这种奇怪行为的原因,但我迫切需要一个解决方案。如果我没有设置最大堆大小,则applet表现良好(除了内存不足。)另外,如果我在HTML设置中使用applet标记,则通过<param name="java_arguments" value="-Xmx1g">来获取最大堆大小工作良好。但是,我知道applet标签已弃用,可能不适用于所有浏览器,因此我不想坚持使用它。我希望有人可以提供一些我在这里缺少的信息。

底线:当我添加max-heap-size时,applet无法正常运行。我需要帮助找出原因。

这是HTML / JavaScript / PHP:

<script src="http://www.java.com/js/deployJava.js"></script>
<script> 
    var attributes = {
        code: 'floodsim.SimApplet.class', archive: 'SimApplet.jar', 
        width: 500, height: <?php echo "$height"; ?>}; 
    var parameters = { 
        <?php
            echo "imgwidth: $imgwidth, imgheight: $imgheight, imgcount: $imgcount, key: '$key',";
        ?> jnlp_href: 'simApplet.jnlp'}; 
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

这是JNLP(我也使用JaNeLa来检查它):

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8888/floodsim/simulation/" href="simApplet.jnlp">
    <information>
        <title>Simulation Viewer</title>
        <vendor>Seth Gunnells</vendor>
        <offline-allowed />
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+" max-heap-size="1024m" />
        <jar href="SimApplet.jar" main="true" />
    </resources>
    <applet-desc 
        name="Simulation Viewer"
        main-class="edu.tntech.floodsim.SimApplet"
        width="500"
        height="600">
    </applet-desc>
</jnlp>

1 个答案:

答案 0 :(得分:1)

在applet中设置堆大小

JNLP中没有任何地方指定max-heap-size。给出的例子是:

<j2se version="1.3" initial-heap-size="64m" max-heap-size="128m"/>

applet元素中没有任何地方指定Java arguments。给出的例子是:

<PARAM name="java_arguments" value="-Xmx128m">