我正在尝试在GraalVM Community Edition 1.0 RC4上运行Java程序,该代码可与最新的JDK 8版本一起使用。代码与GraalVM的运行方式相同,但是在控制台中每秒打印100次相同的错误消息(我认为每次需要/使用垃圾收集器):
org.graalvm.compiler.debug.GraalError: <unknown> garbage collector is not supported by Graal
at org.graalvm.compiler.hotspot.HotSpotGraalRuntime.<init>(HotSpotGraalRuntime.java:205)
at org.graalvm.compiler.hotspot.HotSpotGraalCompilerFactory.createCompiler(HotSpotGraalCompilerFactory.java:145)
at org.graalvm.compiler.hotspot.HotSpotGraalCompilerFactory.createCompiler(HotSpotGraalCompilerFactory.java:123)
at org.graalvm.compiler.hotspot.HotSpotGraalCompilerFactory.createCompiler(HotSpotGraalCompilerFactory.java:47)
at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.getCompiler(HotSpotJVMCIRuntime.java:360)
at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.compileMethod(HotSpotJVMCIRuntime.java:448)
该程序似乎由于打印和/或可能没有垃圾收集而减慢了速度,并且永远不会结束。
我用一个简单的HelloWorld进行了测试,并且不断出现相同的错误消息。该程序结束了,因为它足够短,并且可以编译。
我遵循了official site上带有GraalVM Community Edition的教程。我在Graal Github上发现了类似的错误,但是我不知道如何设置垃圾收集器,使用的命令行似乎是Java 10专有的。
编辑和解决方案::我在Ubuntu上使用Oracle VM VirtualBox,看来VM设置太低。如果遇到相同的问题,请增加RAM和CPU,这应该可以解决。
答案 0 :(得分:1)
根据您链接的Github问题,这是在将所选GC反映在标志中之前初始化编译器时出现的问题。这似乎发生在HotSpot不考虑服务器级的计算机上,在这种情况下,它实际上默认为串行GC。
通过使用-XX:+UseSerialGC
显式请求串行GC,您应该可以解决该问题。