| 61 | } |
| 62 | |
| 63 | QStringList JavaPerformance::getGarbageCollectorArgs(const JavaVersion& version, const GarbageCollectorPreset preset) |
| 64 | { |
| 65 | switch (preset) { |
| 66 | case GarbageCollectorPreset::None: |
| 67 | return {}; |
| 68 | case GarbageCollectorPreset::G1GC: { |
| 69 | // Mojang defaults |
| 70 | QStringList args{ "-XX:+UnlockExperimentalVMOptions", "-XX:+UseG1GC", |
| 71 | "-XX:G1NewSizePercent=20", "-XX:G1ReservePercent=20", |
| 72 | "-XX:MaxGCPauseMillis=50", "-XX:G1HeapRegionSize=32M", |
| 73 | // Aikar's flags |
| 74 | "-XX:SurvivorRatio=32", "-XX:MaxTenuringThreshold=1" }; |
| 75 | return args; |
| 76 | } |
| 77 | case GarbageCollectorPreset::ZGC: { |
| 78 | // Mojang defaults |
| 79 | QStringList args{ "-XX:+UseZGC" }; |
| 80 | // Support for generations was added in Java 21 and became default in Java 23 |
| 81 | if (version.major() >= 21 && version.major() < 23) { |
| 82 | args << "-XX:+ZGenerational"; |
| 83 | } |
| 84 | // https://docs.oracle.com/en/java/javase/21/gctuning/z-garbage-collector.html |
| 85 | // Prevent ZGC from returning memory to the OS, as this might have a negative impact on the latency of Java threads. |
| 86 | args << "-XX:-ZUncommit"; |
| 87 | return args; |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | Q_ASSERT_X(false, "JavaPerformance::getGarbageCollectorArgs", "No arguments specified for current garbage collector preset"); |
| 92 | return {}; |
| 93 | } |
| 94 | |
| 95 | QStringList JavaPerformance::getCompletePerformanceArgs(const JavaVersion& version, |
| 96 | const bool useOptimized, |