Я решил сделать свой аналог этих меовси фагов.
Оригинальная страница с ними мне никогда не нравилась, поскольку там помимо действительно рабочих флагов насрано дефолтными флагами поверх.
Тут я к чёртовой матери вырезал все дефолтные, оставив только то, что не включено по умолчанию на graalvm25. А также добавил пару флагов от себя.
--add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:G1HeapWastePercent=5 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+UseStringDeduplication -XX:+OmitStackTraceInFastThrow -XX:+UseFastStosb -XX:+UseVectorCmov -XX:+AlignVector -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:+UseCompactObjectHeaders -XX:AutoBoxCacheMax=256 -XX:+TrustFinalNonStaticFields -Djdk.nio.maxCachedBufferSize=262144 -Djdk.graal.UsePriorityInlining=true -Djdk.graal.VectorizeHashes=true -Djdk.graal.VectorizeSIMD=true -Djdk.graal.TuneInlinerExploration=1 -Djdk.graal.CompilerConfiguration=enterprise
--add-modules=jdk.incubator.vector -XX:+UseZGC -XX:-ZProactive -XX:SoftMaxHeapSize=$((Memory - 2048))M -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:+AlwaysActAsServerClassMachine -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+UseStringDeduplication -XX:+OmitStackTraceInFastThrow -XX:+UseFastStosb -XX:+UseVectorCmov -XX:+AlignVector -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseVectorStubs -XX:UseAVX=2 -XX:+UseCompactObjectHeaders -XX:AutoBoxCacheMax=256 -XX:+TrustFinalNonStaticFields -Djdk.nio.maxCachedBufferSize=262144 -Djdk.graal.UsePriorityInlining=true -Djdk.graal.VectorizeHashes=true -Djdk.graal.VectorizeSIMD=true -Djdk.graal.TuneInlinerExploration=1 -Djdk.graal.CompilerConfiguration=enterprise
Касательно основы флагов можете почитать в оригинальной статье.
Я же добавил следующие флаги:
-XX:+UseCompactObjectHeaders - Флаг, который снижает расходы памяти на заголовки объектов, сжимая их до 64 бит на 64 битных архитектурах. После добавления заметен ощутимый спад потребления памяти.
-XX:AutoBoxCacheMax=256 - Флаг, задающий размер кеша интов для операций боксинга. Увеличен вдвое относительно базового значения. Потенциально может ускорить базовые операции при взаимодействии с коллекциями, где хранятся объекты Integer.
-XX:+TrustFinalNonStaticFields - Флаг, который заставляет java оптимизировать не-static final поля так же как и static (т.е. константы), что позволяет значительно оптимизировать обращения к ним.
В этом пункте важные моменты по флагам, которые могут навредить.
-XX:+UseFastUnorderedTimeStamps - Потенциально опасен тем, что заставляет использовать менее строгие метки памяти, не синхронизированные между потоками. При очень маловероятных сценариях способен нарушить задуманную кем-то в своих плагинах/ядрах логику работы System.nanoTime и System.currentTimeMillis. Сценарий маловероятный, но имеет место быть.
-XX:+UseStringDeduplication - Повышает потребление памяти в общем, за счёт дольшего хранения строк в памяти для их реюза, также повышает задержки между сборками мусора, поскольку ему теперь придётся ещё и эти строки прогонять, однако флаг может снизить затраты на пересоздание строк, что в реалиях, когда у всех миллион градиентных префиксов большой выигрыш. Вопрос лишь что важнее - затраты на сборщик или на пересоздания компонентов по миллиарду раз за тик.
-XX:+OmitStackTraceInFastThrow - Никогда не используйте на проде, где вам нужно отслеживать потенциальные проблемы. Флаг отключит вам вывод полного стактрейса от эксепшнов в консоль, в следствии чего если ВДРУГ у вас возникнет проблема - вы хуй чо поймёте.