Java 为所有小程序设置默认内存限制 短版

Java 为所有小程序设置默认内存限制 短版,java,memory,configuration,applet,icedtea,Java,Memory,Configuration,Applet,Icedtea,如何进行配置,使其在默认情况下执行具有特定内存限制的所有小程序?最好使用命令行工具,无图形用户界面 长版本 我正在使用java小程序构建一个信息亭设置,并希望增加所有这些小程序的默认内存限制。该信息亭基于ubuntu linux,用作浏览器插件。由于构建信息亭是自动化和无头的,如果可能的话,我宁愿从命令行进行配置 以下是我目前发现的情况: 我可能必须指定一个-Xmx…命令行参数,该参数将在启动插件的java虚拟机时使用 可以使用HTML代码中的参数传递此类参数,即。 。 但这意味着修改我所有的

如何进行配置,使其在默认情况下执行具有特定内存限制的所有小程序?最好使用命令行工具,无图形用户界面

长版本 我正在使用java小程序构建一个信息亭设置,并希望增加所有这些小程序的默认内存限制。该信息亭基于ubuntu linux,用作浏览器插件。由于构建信息亭是自动化和无头的,如果可能的话,我宁愿从命令行进行配置

以下是我目前发现的情况:

  • 我可能必须指定一个
    -Xmx…
    命令行参数,该参数将在启动插件的java虚拟机时使用
  • 可以使用HTML代码中的参数传递此类参数,即。
    。 但这意味着修改我所有的HTML文件,我宁愿避免。我很有可能需要签署我的代码来完成这项工作,这在我的项目的其他地方增加了很多问题
  • 在我的桌面系统上,使用Oracle VM,有一个应用程序
    ControlPanel
    ,我可以用它来设置这些命令行开关。配置似乎被写入了一个文件
    ~/.java/deployment/deployment.properties
    ,其中它与键
    deployment.javaws.jre.0.args
    关联
  • 中未描述该密钥名称。数字
    0
    似乎指的是一个特定的JVM,如控制面板中表格的一行所示。对于每个JVM,除了这个
    args
    值之外,还有几个值,它们都共享一个共同的索引号
  • 根据,IcedTea支持类似的文件,位于
    ~/.IcedTea/
    。不确定这是指
    ~/.icedtea/deployment.properties
    还是
    ~/.icedtea/deployment/deployment.properties
    。IcedTea似乎没有
    控制面板
正如你所看到的,有很多关于如何工作的提示,但到目前为止,我还没有看到任何明确的答案。还有许多悬而未决的问题:

  • 我必须创建这个icedtea部署文件吗
  • 我是否必须在路径中包含名为
    deployment
    的目录
  • 哪一个是我需要指定的使该文件按预期工作的最小密钥集
  • OpenJDK是否支持
    args
    值,即使相应的规范中没有描述它
我想我可以尝试所有可能的组合,看看其中一个是否有效,但这样做需要相当长的时间。所以我在这里问,看看是否有人在这方面有经验,并能提供一个安静的答案。如果没有,我想我最终会回答我自己的问题,只要我努力尝试。

正如甲骨文所说:

应设置以下环境变量以向小程序添加其他参数:

_JPI_VM_OPTIONS=-Xmx…
此外,如参考网站所述:

请注意,设置环境变量后需要重新启动浏览器。如果要在命令shell中设置此环境变量,则必须使用相同的命令shell启动浏览器,以便浏览器继承环境变量的值


然而,如果您怀疑如何在ubuntu中设置环境变量,下面的帖子可能会有所帮助:

我刚刚看过icedtea web插件的源代码。似乎根本没有包含自定义参数的规定,无论其来源如何。因此,不管我编辑了哪些配置文件、HTML文件或环境变量,那里的代码都将构建同一个命令行来调用java,而不管我怎么做

因此,如果所有配置都失败,剩下的就是黑客行为。一种方法是修补插件的源代码,并使其在命令行中包含额外的单词。对于静态添加,即单个尺寸更改,这将相当容易。按照这种方式,一个更通用的解决方案将包括一些环境变量的内容。这将意味着对所讨论的环境变量进行单词分割,并动态地为单词数组分配空间。相当多的C级工作

作为替代方案,可以在执行的二进制文件级别解决这个问题。插件显然有硬编码的可执行文件路径。在我的例子中,这个路径是
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
。可以将该二进制文件重命名为
java.orig
,并放置一个shell脚本,其中包含以下内容:

#/bin/bash
对于“$@”中的i;做
如果[[“${i}”==sun.applet.PluginMain]];然后
执行官“$0.orig”-Xmx512m“$@”
fi
完成
执行官“$0.orig”“$@”

这种方法的一个结果是,
ps
将不再将这些小程序打印为
java
,而是打印为
java.orig
。在大多数情况下都不应该是问题。

我刚刚尝试过这种方法,但它似乎不起作用:java进程的命令行上没有给定的选项。也许这种方法只适用于Oracle VM,而不适用于IcedTea?翻开openjdk 7u源代码报告,我在任何文件中都找不到您所说的变量名。好的,我没有意识到存在不兼容交叉引用:我刚刚向IcedTea Web bug追踪器提交了一份关于这个问题的报告。我现在已经接受了这个答案,因为它描述了我所理解的当前情况。但是,如果有人有一个非常聪明的方法来包含这个命令行,或者如果上游更改了他们的代码以减少麻烦,那么我很乐意更改被接受的答案。