2010-09-10 36 views
0

下面是我使用的参数:我收到无效的最大堆大小当我设置XMX和agentlib

-Xmx1024m -agentlib:JDWP = =运输dt_socket,服务器= Y,暂停= N ,地址= 11999

-Xmx1024m没有通过-agentlib就可以正常工作,-agentlib在没有Xmx的情况下工作正常。你可以在使用agentlib时设置最大堆大小吗?

我的jar文件得到通过C代码推出:

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

凡myDebugOptions包含的char *“-Xmx1024m -agentlib:JDWP = =运输dt_socket,服务器= Y,暂停= N,地址= 11999 ”。当我尝试通过命令行运行这个相同的命令时(在Solaris 10中,JVM 1.6.0_17)它工作正常。

+0

你的意思是,当你使用这两个选项时,JVM没有启动? – 2010-09-10 17:45:12

+1

您正在使用哪个JDK? – 2010-09-10 17:51:01

回答

1

你要通过每个命令行参数作为不同的参数来execlp。

你执行将是一样从命令行运行此命令行:这不会工作

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

,基本上是-Xmx和-agentlib被作为一个参数传递。

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) 
+0

与此相同(在Mac OS上使用1.6.0_20)。 – 2010-09-10 17:59:44

1

这不起作用的原因是因为-Xmx1024和-agentlib:是两个不同的参数。当调用execlp时,它们需要作为两个不同的参数传入。当我呼吁execlp像:

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

它按预期工作,没有错误。即使那些myDebugOptions包含一个空间,它仍然认为它是一个参数。

1

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

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

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