以下是我正在使用的论据:
-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中),它可以正常工作。
答案 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)