支持禁止生成 JVM 优化参数 (#4507)
This commit is contained in:
@@ -55,6 +55,7 @@ public class LaunchOptions implements Serializable {
|
||||
private String proxyUser;
|
||||
private String proxyPass;
|
||||
private boolean noGeneratedJVMArgs;
|
||||
private boolean noGeneratedOptimizingJVMArgs;
|
||||
private String preLaunchCommand;
|
||||
private String postExitCommand;
|
||||
private NativesDirectoryType nativesDirType;
|
||||
@@ -226,6 +227,13 @@ public class LaunchOptions implements Serializable {
|
||||
return noGeneratedJVMArgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent game launcher from generating optimizing JVM arguments.
|
||||
*/
|
||||
public boolean isNoGeneratedOptimizingJVMArgs() {
|
||||
return noGeneratedOptimizingJVMArgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Command called before game launches.
|
||||
*/
|
||||
@@ -281,7 +289,7 @@ public class LaunchOptions implements Serializable {
|
||||
return daemon;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
public static final class Builder {
|
||||
|
||||
private final LaunchOptions options = new LaunchOptions();
|
||||
|
||||
@@ -439,6 +447,11 @@ public class LaunchOptions implements Serializable {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setNoGeneratedOptimizingJVMArgs(boolean noGeneratedOptimizingJVMArgs) {
|
||||
options.noGeneratedOptimizingJVMArgs = noGeneratedOptimizingJVMArgs;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPreLaunchCommand(String preLaunchCommand) {
|
||||
options.preLaunchCommand = preLaunchCommand;
|
||||
return this;
|
||||
|
||||
@@ -193,50 +193,52 @@ public class DefaultLauncher extends Launcher {
|
||||
final int javaVersion = options.getJava().getParsedVersion();
|
||||
final boolean is64bit = options.getJava().getBits() == Bits.BIT_64;
|
||||
|
||||
res.addUnstableDefault("UnlockExperimentalVMOptions", true);
|
||||
res.addUnstableDefault("UnlockDiagnosticVMOptions", true);
|
||||
if (!options.isNoGeneratedOptimizingJVMArgs()) {
|
||||
res.addUnstableDefault("UnlockExperimentalVMOptions", true);
|
||||
res.addUnstableDefault("UnlockDiagnosticVMOptions", true);
|
||||
|
||||
// Using G1GC with its settings by default
|
||||
if (javaVersion >= 8
|
||||
&& res.noneMatch(arg -> "-XX:-UseG1GC".equals(arg) || (arg.startsWith("-XX:+Use") && arg.endsWith("GC")))) {
|
||||
res.addUnstableDefault("UseG1GC", true);
|
||||
res.addUnstableDefault("G1MixedGCCountTarget", "5");
|
||||
res.addUnstableDefault("G1NewSizePercent", "20");
|
||||
res.addUnstableDefault("G1ReservePercent", "20");
|
||||
res.addUnstableDefault("MaxGCPauseMillis", "50");
|
||||
res.addUnstableDefault("G1HeapRegionSize", "32m");
|
||||
}
|
||||
|
||||
res.addUnstableDefault("OmitStackTraceInFastThrow", false);
|
||||
|
||||
// JIT Options
|
||||
if (javaVersion <= 8) {
|
||||
res.addUnstableDefault("MaxInlineLevel", "15");
|
||||
}
|
||||
if (is64bit && SystemInfo.getTotalMemorySize() > 4L * 1024 * 1024 * 1024) {
|
||||
res.addUnstableDefault("DontCompileHugeMethods", false);
|
||||
res.addUnstableDefault("MaxNodeLimit", "240000");
|
||||
res.addUnstableDefault("NodeLimitFudgeFactor", "8000");
|
||||
res.addUnstableDefault("TieredCompileTaskTimeout", "10000");
|
||||
res.addUnstableDefault("ReservedCodeCacheSize", "400M");
|
||||
if (javaVersion >= 9) {
|
||||
res.addUnstableDefault("NonNMethodCodeHeapSize", "12M");
|
||||
res.addUnstableDefault("ProfiledCodeHeapSize", "194M");
|
||||
// Using G1GC with its settings by default
|
||||
if (javaVersion >= 8
|
||||
&& res.noneMatch(arg -> "-XX:-UseG1GC".equals(arg) || (arg.startsWith("-XX:+Use") && arg.endsWith("GC")))) {
|
||||
res.addUnstableDefault("UseG1GC", true);
|
||||
res.addUnstableDefault("G1MixedGCCountTarget", "5");
|
||||
res.addUnstableDefault("G1NewSizePercent", "20");
|
||||
res.addUnstableDefault("G1ReservePercent", "20");
|
||||
res.addUnstableDefault("MaxGCPauseMillis", "50");
|
||||
res.addUnstableDefault("G1HeapRegionSize", "32m");
|
||||
}
|
||||
|
||||
if (javaVersion >= 8) {
|
||||
res.addUnstableDefault("NmethodSweepActivity", "1");
|
||||
res.addUnstableDefault("OmitStackTraceInFastThrow", false);
|
||||
|
||||
// JIT Options
|
||||
if (javaVersion <= 8) {
|
||||
res.addUnstableDefault("MaxInlineLevel", "15");
|
||||
}
|
||||
}
|
||||
if (is64bit && SystemInfo.getTotalMemorySize() > 4L * 1024 * 1024 * 1024) {
|
||||
res.addUnstableDefault("DontCompileHugeMethods", false);
|
||||
res.addUnstableDefault("MaxNodeLimit", "240000");
|
||||
res.addUnstableDefault("NodeLimitFudgeFactor", "8000");
|
||||
res.addUnstableDefault("TieredCompileTaskTimeout", "10000");
|
||||
res.addUnstableDefault("ReservedCodeCacheSize", "400M");
|
||||
if (javaVersion >= 9) {
|
||||
res.addUnstableDefault("NonNMethodCodeHeapSize", "12M");
|
||||
res.addUnstableDefault("ProfiledCodeHeapSize", "194M");
|
||||
}
|
||||
|
||||
if (is64bit && javaVersion == 25) {
|
||||
res.addUnstableDefault("UseCompactObjectHeaders", true);
|
||||
}
|
||||
if (javaVersion >= 8) {
|
||||
res.addUnstableDefault("NmethodSweepActivity", "1");
|
||||
}
|
||||
}
|
||||
|
||||
// As 32-bit JVM allocate 320KB for stack by default rather than 64-bit version allocating 1MB,
|
||||
// causing Minecraft 1.13 crashed accounting for java.lang.StackOverflowError.
|
||||
if (!is64bit) {
|
||||
res.addDefault("-Xss", "1m");
|
||||
if (is64bit && javaVersion == 25) {
|
||||
res.addUnstableDefault("UseCompactObjectHeaders", true);
|
||||
}
|
||||
|
||||
// As 32-bit JVM allocate 320KB for stack by default rather than 64-bit version allocating 1MB,
|
||||
// causing Minecraft 1.13 crashed accounting for java.lang.StackOverflowError.
|
||||
if (!is64bit) {
|
||||
res.addDefault("-Xss", "1m");
|
||||
}
|
||||
}
|
||||
|
||||
if (javaVersion == 16)
|
||||
|
||||
Reference in New Issue
Block a user