【问题标题】:Error: Could not find or load main class –Xmx1G错误:无法找到或加载主类 –Xmx1G
【发布时间】:2018-01-11 10:18:37
【问题描述】:

这太疯狂了;有人见过这个吗?

java –Xmx1G –Xms1G –XX:+UseG1GC -XX:+PerfDisableSharedMem -jar service-1.0-SNAPSHOT.jar
Error: Could not find or load main class –Xmx1G

我可以这样做:

java -jar service-1.0-SNAPSHOT.jar –Xmx1G –Xms1G –XX:+UseG1GC -XX:+PerfDisableSharedMem

但jmap -heap {PID} 表明它完全忽略了这些选项。我尝试了不同的变体:

java –XX:+UseG1GC -jar service-1.0-SNAPSHOT.jar –Xmx1G –Xms1G  -XX:+PerfDisableSharedMem
java -Xms1G -Xmx1G -jar service-1.0-SNAPSHOT.jar
java –xx:+useg1gc -jar service-1.0-SNAPSHOT.jar
java -server –XX::+UseG1GC -jar service-1.0-SNAPSHOT.jar`

我要么得到这个错误: Error: Could not find or load main class {OPTION}

或者它运行但忽略选项。

即使java -XX:-UseConcMarkSweepGC -jar service-1.0-SNAPSHOT.jar 也会被忽略:

jmap -heap 5879 
Attaching to process ID 5879, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 25.121-b13

using thread-local object allocation.  
Parallel GC with 8 thread(s)  
Heap Configuration:

MinHeapFreeRatio         = 0
MaxHeapFreeRatio         = 100
MaxHeapSize              = 4294967296 (4096.0MB)
NewSize                  = 89128960 (85.0MB)
MaxNewSize               = 1431306240 (1365.0MB)
OldSize                  = 179306496 (171.0MB)
NewRatio                 = 2
SurvivorRatio            = 8
MetaspaceSize            = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize         = 17592186044415 MB
G1HeapRegionSize         = 0 (0.0MB)

这是我的 JVM:

java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

这发生在我的 Mac 和 Alpine Docker 映像中。有什么想法吗?

【问题讨论】:

  • 这已通过接受的答案解决。我复制并粘贴了一篇信息丰富的博客文章中的选项,该文章可能已将正常连字符编码为破折号。
  • 重复link
  • 另一个问题不包含解决实际问题的答案,只有 cmets。所以我投票改为欺骗另一个问题

标签: java memory-management garbage-collection jvm heap-memory


【解决方案1】:

您在本应使用连字符减号 (U+002D) 时使用了破折号 (U+2013)。

 –Xmx1G # incorrect: en dash
 -Xmx1g # correct: hyphen-minus

这些字符之间的差异有多明显取决于使用的字体。

参见维基百科Dashes (unicode section)

【讨论】:

  • 哇,这很令人困惑,因为某些参数可以用连字符组成?我已经成功地将 -D 与连字符一起使用。好奇。
  • 所有参数使用连字符。
  • en-dash 或 em-dash 似乎没有区别。 Option-Minus, Shift-Option-Minus Error: Could not find or load main class –Xmx1G
  • 我不确定我能做到多清楚。您必须使用 连字符减号,不是任何破折号。
  • 等等,我看错了你的回复。好的,重新阅读后,我意识到我从一篇博客文章中复制并粘贴了该行,该文章必须使用破折号而不是连字符!顺便说一句,对不起,我不能投票,我必须先进行至少 15 次互动:-(
【解决方案2】:

JVM 参数考虑连字符来考虑 JVM 参数。如果您使用的是 MAC 书,很容易产生错觉

连字符 - 分隔短语中的单词,如“最少使用的产品”,用于书籍和其他内容中的换行符。

一个破折号,-,用来衬托一个短语——一个在句子中间的短语——这不是一个括号,但它不是那么密切,以至于用逗号隔开。它也被用作一种停顿来强调某事——句末重要的事。

破折号 – 分隔日期、数字和数量的范围,例如 9 至 5 日和 1 月至 8 月。它还用于某些类型的联系、方向和对比,例如在林肯-道格拉斯辩论中代表“对”,或者在阿尔萨斯-洛林这样的地名配对中,两者都是一起提到的不同地方。

【讨论】:

  • 天啊,这是一个很好的解释。不仅是工程学的粉丝,而且我也是词源学的粉丝(虽然 em-dash 不是一个词)。
猜你喜欢
  • 2016-06-12
  • 2016-03-16
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多