当我设置Xmx和agentlib时,我得到无效的最大堆大小

时间:2010-09-10 17:43:16

标签: java c

以下是我正在使用的论据:

  

-Xmx1024m -agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 11999

-Xmx1024m在没有传递-agentlib的情况下正常工作,并且-agentlib在没有Xmx的情况下工作正常。您可以在使用agentlib时设置最大堆大小吗?

我的jar文件是通过C代码启动的:

execlp(myJavaPath, myJavaPath, myDebugOptions,"-DFBLog4j=true","-jar","myJar.jar", NULL);

其中myDebugOptions包含char *“ - Xmx1024m -agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 11999”。当我尝试通过命令行运行相同的命令时(在Solaris 10,JVM 1.6.0_17中),它可以正常工作。

4 个答案:

答案 0 :(得分:1)

您必须将每个命令行参数作为不同的参数传递给execlp。

您正在执行的命令行与从命令行运行它的命令行相同:

java '-Xmx1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=11999' -DFBLog4j=true -jar myJar.jar

哪个也行不通,基本上-Xmx和-agentlib作为单个参数传递。

答案 1 :(得分:1)

这不起作用的原因是因为-Xmx1024和-agentlib:是两个不同的参数。调用execlp时,需要将它们作为两个不同的参数传递。当我打电话给execlp时:

execlp(myJavaPath, myJavaPath, myDebugOptions, "-Xmx1024m", "-DFBLog4j=true", "-jar", "/usr/mprint/bin/QDirectJServer.jar", NULL);

它按预期工作,没有错误。即使那些myDebugOptions包含一个空间,它仍然将它视为一个论点。

答案 2 :(得分:1)

如果您定义的内存容量大于系统物理内存,则会生成此类错误。

根据物理内存更新已定义的内存。

For Example if your physical memory of Ram is 2GB(2048m) and yo defined the JVM as 
-Xmx4096m then this error will come.

答案 3 :(得分:0)

我试过这个并且它有效:

C:\Documents and Settings\Administrator>java -Xmx1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=11999 -version
Listening for transport dt_socket at address: 11999
   java version "1.6.0_17"
   Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
   Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode)