هذا دليل لضبط Java لـ Minecraft. يتم قياس كل علامة وتعديل بشكل فردي لاختبار التراجعات، والتحقق من إعدادات Java الافتراضية لتجنب التكرار.
في حين أن هذه التعديلات تقلل بشكل ملحوظ من بعض تعثرات الخادم والعميل، توقع فقط مكاسب متواضعة في عدد الإطارات في الثانية + الحد الأدنى من مكاسب في الثانية في أحسن الأحوال، وزيادة إلى حد ما في استخدام ذاكرة الوصول العشوائي + وحدة المعالجة المركزية. وهي ليست بديلاً عن التخلص من الأشياء البطيئة باستخدام تعديلات مثل Spark أو Observable.
الخلاف للأسئلة وما شابه: https://discord.gg/zeFSR9PnUw
يتم اختبار جميع العلامات باستخدام البرنامج النصي Benchmark.py. راجع Benchmarks.md العمل الجاري.
بالنسبة إلى إصدار Minecraft 1.16.5 والإصدارات الأحدث، استخدم Java 17. تطلب منك بعض المشغلات مثل Curseforge وPrism Launcher استخدام Java 8 على الإصدار 1.16.X، ولكن إصدار Minecraft 1.16.5+ وجميع تعديلات 1.18+ ومعظم تعديلات 1.16.5 متوافقة مع جافا 17.
في بعض الأحيان، يعمل Java 11 حيث لا يعمل Java 17.
يتطلب الإصدار 1.12.2 والإصدارات الأقدم بشكل عام Java 8.
أوقات تشغيل Java من Azul وMicrosoft وAdoptium وAmazon وما إلى ذلك متطابقة بشكل أساسي. بعض الاستثناءات البارزة:
يتميز Oracle GraalVM Enterprise Edition بمترجم Java أكثر قوة. هذا هو ما أستخدمه شخصيًا في تشغيل لعبة Minecraft، راجع قسم GraalVM أدناه.
يستخدم Clear Linux OpenJDK من Intel نفس التعليمات البرمجية مثل أي OpenJDK آخر (مما يجعله متوافقًا إلى حد كبير)، ولكن تم تحسين عملية الإنشاء نفسها والتبعيات لوحدات المعالجة المركزية الأحدث. احصل عليه من مستودعات Clear Linux عبر swupd
أو من Distrobox أو من Docker. لاحظ أنه يجب عليك العودة إلى إصدار Java 17، وأن Java 18 يعيد بعض تحسينات الأداء.
يعد Azul's Prime OpenJDK سريعًا جدًا لأنه يرتبط بـ llvm، ولكنه غير متوافق حاليًا مع معظم التعديلات وهو يعمل بنظام التشغيل Linux فقط. احصل عليه من هنا: https://docs.azul.com/prime/prime-quick-start-tar
يحتوي Red Hat Java 8 على أداة تجميع القمامة Shenandoah. إنه مسور خلف تسجيل مجاني عبر البريد الإلكتروني: https://developers.redhat.com/products/openjdk/download
يعد OpenJ9 من IBM ... أبطأ بكثير في Minecraft، ويستخدم إشارات مختلفة تمامًا عن أي إصدار Java آخر، ولكنه يستهلك ذاكرة أقل من أوقات التشغيل المستندة إلى OpenJDK. راجع الأسئلة الشائعة، ومجلد المعايير، وهذا Gist للتعرف على علامات انخفاض استهلاك الذاكرة.
إذا كنت لا تعرف ماذا تختار، فإنني أوصي بـ GraalVM EE (انظر أدناه) أو أحدث إصدار من Adoptium Java 17 JRE: https://adoptium.net/
تحتفظ Couleur بقائمة تشغيل جيدة لـ JREs هنا: https://rentry.co/JREs
تعمل هذه العلامات المحسنة مع أي إصدار Java 11+. إنهم يعملون على كل من الخوادم والعملاء:
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3
يجب عليك إضافة إشارات جمع البيانات المهملة إلى وسائط جافا هذه.
-Xmx8G -Xms8G -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:+PerfDisableSharedMem -XX:G1HeapRegionSize=16M -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:SurvivorRatio=32 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5.0 -XX:G1ConcRSHotCardLimit=16 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:GCTimeRatio=99 -XX:+UseLargePages -XX:LargePageSizeInBytes=2m
يجب ضبط الحد الأدنى والحد الأقصى للذاكرة ( -xms
و -xmx
) على نفس القيمة، كما هو موضح هنا: https://dzone.com/articles/benefits-of-setting-initial-and-maximum-memory-siz
استثناء واحد: إذا كنت تستخدم نظامًا ذو ذاكرة منخفضة، وتستهلك لعبة Minecraft كل ذاكرة الوصول العشوائي (RAM) لديك تقريبًا، فقم بتعيين الحد الأدنى للذاكرة لديك أسفل الحد الأقصى للذاكرة لديك للحفاظ على أكبر قدر ممكن.
يتم تعيين الأحجام بالميغابايت ( -Xms4096M
) أو الجيجابايت ( -Xmx8G
)
يمكن أن يؤدي تخصيص قدر كبير جدًا من الذاكرة إلى تعطيل لعبة gc أو إبطاء لعبة Minecraft، حتى لو كان لديك الكثير من الذاكرة الاحتياطية. تخصيص القليل جدًا يمكن أن يؤدي أيضًا إلى إبطاء اللعبة أو كسرها. راقب عن كثب مدير مهام Windows (أو شاشة نظام DE الخاص بك) أثناء تشغيل Minecraft، وخصص فقط ما تحتاجه (والذي عادة ما يكون أقل من 8 جيجا). سيخبرك sparkc gcmonitor
ما إذا كان تخصيصك مرتفعًا جدًا (ستكون فترات الإيقاف المؤقت طويلة جدًا) أو منخفضًا جدًا (GC متكرر مع تحذير من انخفاض الذاكرة في الإشعار).
يجب إضافة علامات جمع البيانات المهملة إلى خوادم وعملاء Minecraft ، باعتبارها "الإيقاف المؤقت" الافتراضي لإيقاف بيان البيانات المهملة وتجميعها كتعثر على العميل وتأخر في الخوادم. استخدم الأمر /sparkc gcmonitor
في Spark mod لمراقبة فترات التوقف المؤقت داخل اللعبة. تعتبر أي فترات توقف مؤقتة للجيل القديم أمرًا سيئًا، ويجب أن تكون مجموعات G1GC للجيل الجديد نادرة، ولكنها قصيرة بما يكفي لتكون غير محسوسة.
اختر مجموعة واحدة من الأعلام. أوصي بـ Shenandoah على العملاء ، وZGC على خوادم Java 17 القوية ، و G1GC على Graal أو على الخوادم/العملاء الذين لديهم ذاكرة وصول عشوائي أقل وعدد أقل من النوى:
يعد ZGC رائعًا للخوادم ذات الذاكرة العالية/عدد النواة العالي. لا يوجد به أي معدل إنتاجية للخادم يمكنني قياسه، ولا يتلعثم على الإطلاق. ومع ذلك، فهو يتطلب المزيد من ذاكرة الوصول العشوائي (RAM) والمزيد من النوى مقارنة بجامعي البيانات المهملة الآخرين.
لسوء الحظ، فقد تم ضرب عميل FPS مهم على جهاز الكمبيوتر المحمول الخاص بي (8 النواة/16 خيطًا). راجع معيار "ZGC" في مجلد المعايير. إنه غير متوفر في Java 8، وأداءه أقل بكثير في Java 11 منه في Java 17.
-XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:-ZProactive
يمكّنها، ولكن قم بتخصيص المزيد من ذاكرة الوصول العشوائي (RAM) والمزيد من ConcGCThreads
أكثر مما تفعله عادةً مع GC الأخرى. لاحظ أن ZGC لا يحب AllocatePrefetchStyle=3، وبالتالي فإن تعيينه على 1 يتجاوز الإدخال السابق. ش
يؤدي Shenandoah أداءً جيدًا على العملاء، لكنه يقتل إنتاجية الخادم في اختباراتي. قم بتمكينه باستخدام -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:ShenandoahGuaranteedGCInterval=1000000 -XX:AllocatePrefetchStyle=1
شاهد المزيد من خيارات الضبط هنا. لا يتغير خيارا "الهروستيك" و"الوضع" كثيرًا بالنسبة لي (باستثناء الخيار "المضغوط" الذي لا ينبغي عليك استخدامه). مثل ZGC، لا يحب Shenandoah تخصيص AllocatePrefetchStyle=3.
لاحظ أن Shenandoah ليس موجودًا في Java 8. كما أنه ليس موجودًا في أي من إصدارات Oracle Java! إذا كنت من مستخدمي Java 8، فيجب عليك استخدام Red Hat OpenJDK لاستخدام Shenandoah: https://developers.redhat.com/products/openjdk/download
G1GC هو مجمّع البيانات المهملة الافتراضي، وهو مجمّع البيانات المهملة الوحيد المتوفر لمستخدمي GraalVM. تعمل وسيطات G1GC الخاصة بخادم Minecraft الشهيرة من Aikar بشكل رائع على العملاء، مع تحذيرين: فهي تعمل بشكل فعال على تثبيت معلمة MaxGCPauseMillis
عن طريق تعيين G1NewSizePercent
على مستوى عالٍ جدًا، مما ينتج عنه تلعثمًا طويلًا على بعض العملاء، ويقومون بجمع القمامة القديمة بقوة شديدة (حيث ينتج العميل أقل بكثير من الخادم المأهول).
تشبه هذه أعلام aikar، ولكن مع فترات توقف مؤقتة أقصر وأكثر تكرارًا، ومجموعة مختلطة G1 أقل عدوانية ومجموعة خلفية أكثر عدوانية: -XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:+PerfDisableSharedMem -XX:G1HeapRegionSize=16M -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:SurvivorRatio=32 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5.0 -XX:G1ConcRSHotCardLimit=16 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:GCTimeRatio=99
يمكن استخدام G1NewSizePercent
و MaxGCPauseMillis
لضبط تكرار/مدة مجموعات جيلك الشاب. يجب إزالة G1HeapWastePercent=18
إذا كنت تحصل على أي توقف مؤقت للجيل القديم في الإعداد الخاص بك. وبدلاً من ذلك، يمكنك رفعه وتعيين G1MixedGCCountTarget
على 2 أو 1 لجعل تجميع البيانات المهملة المختلطة أكثر كسلاً (على حساب استخدام ذاكرة أعلى).
تعد فترات الإيقاف المؤقت الأطول أكثر قبولًا على الخوادم. هذه الأعلام قريبة جدًا من إعدادات aikar الافتراضية:
-XX:+UseG1GC -XX:MaxGCPauseMillis=130 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1ConcRSHotCardLimit=16 -XX:G1ConcRefinementServiceIntervalMillis=150
-XX:ConcGCThreads=[Some Number]
يتحكم في الحد الأقصى لعدد سلاسل العمليات الخلفية التي يُسمح لأداة تجميع البيانات المهملة باستخدامها، والإعدادات الافتراضية هي logical (hyperthreaded) cores / 4
. ستعمل الإصدارات الحديثة من Java على تقليل عدد سلاسل رسائل gc، إذا لزم الأمر.
في بعض الحالات (خاصة مع ZGC أو Shenandoh) تريد زيادة الحد الأقصى لمؤشر الترابط هذا إلى ما هو أبعد من الإعداد الافتراضي. أوصي بـ "2" على وحدات المعالجة المركزية التي تحتوي على 4 خيوط، و [number of real cores - 2]
على معظم وحدات المعالجة المركزية الأخرى، ولكن قد تحتاج إلى اللعب بهذه المعلمة. إذا كان مستوى جمع البيانات المهملة منخفضًا جدًا، فلن تتمكن مجموعة البيانات المهملة من مواكبة لعبة Minecraft، وستتلعثم اللعبة و/أو تبدأ في استهلاك كميات كبيرة من ذاكرة الوصول العشوائي (RAM) وتتعطل. إذا كان مرتفعًا جدًا، فقد يؤدي ذلك إلى إبطاء اللعبة، خاصة إذا كنت تستخدم Java 8.
لا توجد علامات "مؤشرات ترابط" أخرى مثل ParallelGCThreads
أو JVMCIThreads
ضرورية، حيث يتم تمكينها افتراضيًا باستخدام إعدادات تلقائية جيدة في Java 8+.
ملاحظة: تتطلب الصفحات الكبيرة امتيازات المسؤول على نظام التشغيل Windows. يعد هذا خطرًا أمنيًا، ويجب عليك تخطي هذا القسم إذا لم تكن مرتاحًا لذلك.
يؤدي تمكين الصفحات الكبيرة إلى تحسين أداء خوادم وعملاء Minecraft. فيما يلي بعض البرامج التعليمية الرائعة لتمكينه:
على نظام التشغيل Windows، يجب عليك تشغيل Java والمشغل الخاص بك كمسؤول. وهذا يعني تحديد مربع اختيار التوافق "تشغيل كمسؤول" لـ javaw.exe
و java.exe
و your launcher.exe
، وإلا ستفشل الصفحات الكبيرة بصمت. أضف -XX:+UseLargePages -XX:LargePageSizeInBytes=2m
إلى الوسائط الخاصة بك.
في نظام التشغيل Linux، تريد عمومًا استخدام -XX:+UseTransparentHugePages
. لتخصيص الذاكرة يدويًا بدلاً من ذلك (لتعزيز الأداء بشكل أكبر)، لدى Red Hat برنامج تعليمي جيد لتوزيعات Linux المشابهة لـ RHEL، مثل Fedora أو CentOS أو Oracle Linux: https://www.redhat.com/en/blog/optimizing -rhel-8-run-java-implementation-minecraft-server
تحقق ومعرفة ما إذا كانت الصفحات الكبيرة تعمل مع وسيطة Java -Xlog:gc+init
في Java 17.
في أي إصدار/نظام أساسي لـ Java، إذا لم تعمل الصفحات الكبيرة، فستتلقى تحذيرًا في السجل مشابهًا لما يلي:
تحذير Java HotSpot(TM) 64-Bit Server VM: لا يمكن لـ JVM استخدام ذاكرة الصفحات الكبيرة لأنه لا يتمتع بامتيازات كافية لقفل الصفحات في الذاكرة.
GraalVM هو Java VM جديد من Oracle يمكنه تحسين أداء لعبة Minecraft (المعدلة والفانيليا). على الرغم من أن مكاسب FPS للعميل متواضعة، إلا أن أحمال العمل على جانب الخادم مثل إنشاء القطع يمكن أن تحصل على تعزيز بنسبة 20%+!
فقط GraalVM Enterprise Edition يأتي مع مجموعة كاملة من التحسينات. قم بتحميله عبر روابط مباشرة من أوراكل:
ويندوز AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA17_22_3_1/graalvm-ee-java17-windows-amd64-22.3.1.zip
Linux AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA17_22_3_1/graalvm-ee-java17-linux-amd64-22.3.1.tar.gz
Linux AARCH64 (ARM 64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA17_22_3_1/graalvm-ee-java17-linux-aarch64-22.3.1.tar.gz
ماك AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA17_22_3_1/graalvm-ee-java17-darwin-amd64-22.3.1.tar.gz
Windows AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA11_22_3_1/graalvm-ee-java11-windows-amd64-22.3.1.zip
Linux AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA11_22_3_1/graalvm-ee-java11-linux-amd64-22.3.1.tar.gz
Linux AARCH64 (ARM 64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA11_22_3_1/graalvm-ee-java11-linux-aarch64-22.3.1.tar.gz
ماك AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA11_22_3_1/graalvm-ee-java11-darwin-amd64-22.3.1.tar.gz
Windows AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA8_21_3_5/graalvm-ee-java8-windows-amd64-21.3.5.zip
Linux AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA8_21_3_5/graalvm-ee-java8-linux-amd64-21.3.5.tar.gz
ماك AMD64 (64 بت): https://oca.opensource.Oracle.com/gds/GRAALVM_EE_JAVA8_21_3_5/graalvm-ee-java8-darwin-amd64-21.3.5.tar.gz
(تتوفر أيضًا إصدارات مختارة من GraalVM EE على AUR وعلى مستودعات Oracle Linux)
تتطلب الإصدارات الجديدة لأجهزة ARM Mac تسجيلًا مجانيًا على صفحة التنزيل الرئيسية لشركة Oracle: https://www.Oracle.com/downloads/graalvm-downloads.html
هذه الإصدارات ليست مثبتات Java. تحتاج إلى استبدال إصدار Java الخاص بالمشغل يدويًا، أو استخدام مشغل Minecraft الذي يدعم تحديد مسار Java الخاص بك. أوصي باستخدام ATLauncher أو Prism Launcher أو GDLauncher. عند تحديد مسار Java، انتقل إلى المجلد "bin" في تنزيل GraalVM واستخدم "javaw.exe" أو "java.exe".
بالنسبة للخوادم، تحتاج إلى استبدال أمر "Java" في الخادم الخاص بك، بدء ملف sh/bat بالمسار الكامل إلى graalvm java، بين علامتي الاقتباس.
وبدلاً من ذلك، يمكنك تثبيته على مستوى النظام باتباع دليل Oracle: https://www.graalvm.org/22.2/docs/getting-started/#install-graalvm
وسيطات GraalVM EE 22+ Java 17 (أو Java 11):
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseNUMA -XX:AllocatePrefetchStyle=3 -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:+EagerJVMCI -Dgraal.TuneInlinerExploration=1 -Dgraal.CompilerConfiguration=enterprise
يجب عليك استخدام G1GC مع هذه الوسائط. لا يعمل GraalVM حاليًا مع ZGC أو Shenandoah.
يعمل GraalVM EE 22.3.0 على إصلاح جميع أخطاء Minecraft المعروفة
إذا قمت بتشغيل إصدار أقدم من GraalVM يستند إلى Java 8، فهناك بعض المشكلات المحتملة:
يقوم VectorizeSIMD
بتحويل الكيانات إلى غير مرئية باستخدام تعديلات التظليل مثل Optifine أو Iris أو Occulus... ولكن في ظل ظروف معينة فقط. سيتم إصلاح ذلك في GraalVM EE 22.3.0. انظر: أوراكل/جرال#4849
يقوم كل من GraalVM CE وEE بكسر عرض الكوكبة في 1.16.5 Astral Sorcery. من المحتمل أن يكون هذا مرتبطًا بخلل التظليل. انظر: HellFirePvP/AstralSorcery#1963
لم ألاحظ أي أخطاء من جانب الخادم حتى الآن.
إذا واجهت أي مشكلات أخرى تتعلق بالتعديل، فيمكنك إرجاعها إلى GraalVM، فيرجى إنشاء مشكلة Github أو نشرها في Discord! بشكل عام، يمكنك التغلب عليها عن طريق تعطيل علامات تحسين dgraal
الرئيسية، أو عن طريق العثور على الوظيفة الصحيحة باستخدام Dgraal.PrintCompilation=true
، والتغلب عليها باستخدام -Dgraal.GraalCompileOnly=~...
بمجرد العثور على الوظيفة التي تمت ترجمتها بشكل خاطئ.
يعد SpecialK أحد أنظمة Windows "العالمية" المشابهة لـ ReShade، ويتميز بميزتين رئيسيتين للأداء:
محدد الإطار "الذكي" الذي يقلل من التأتأة، ويزيل التمزق، ويوفر الطاقة، ويوفر وحدة المعالجة المركزية TDP لتعزيزها عند الحاجة. حتى أنه يعمل بالتزامن مع VRR أو Nvidia Reflex.
برنامج تضمين OpenGL-to-DirectX11 يسمى OpenGL-IK والذي يزيل الحمل الزائد لوضع النوافذ في Minecraft، ويمكّن ميزات أخرى (مثل HDR التلقائي أو نافذة بلا حدود يمكن تغيير حجمها).
قم بتنزيله من هنا: https://wiki.special-k.info/en/SpecialK/Tools
أضف مشغل MC الخاص بك، وحدد مربع الاختيار "الخدمة المرتفعة". ثم انتقل إلى مجلد Java bin الخاص بك حيث يوجد ملف javaw.exe، وقم بإنشاء ملف فارغ يسمى SpecialK.OpenGL32
. قم بتشغيل مشغل Minecraft الخاص بك باستخدام مشغل SpecialK، وسيقوم المشغل بعد ذلك "بإدخال" SpecialK في Minecraft.
يمكنك إنشاء اختصار على سطح المكتب لمشغل Minecraft الخاص بك من خلال واجهة SpecialK UI لمزيد من الراحة.
تأكد من إيقاف تشغيل VSync ومحدد إطارات Minecraft داخل اللعبة.
أبلغ أحد المستخدمين عن انخفاض معدل الإطارات في الثانية عند تشغيل SpecialK. إذا حدث هذا لك، فيرجى إبلاغي بذلك عبر Discord أو Github!
بعد تشغيل لعبة Minecraft، قم بتعيين Java ليتم تشغيلها بأولوية عملية "فوق العادية" في نظام التشغيل Windows باستخدام إدارة المهام:
يمكن لمستخدمي Linux إضافة sudo nice -n -10
إلى بداية أمر الإطلاق، لكن لاحظ أن المستويات الرائعة أقل من 0 (حيث يكون "max" هو -20) تتطلب تشغيل Minecraft كـ sudo
. وبدلاً من ذلك، استخدم الأمر renice
بعد تشغيل Minecraft لتجنب هذه المخاطر الأمنية.
يعد هذا مستودعًا رائعًا للعثور على تعديلات الأداء: https://github.com/NordicGamerFE/usefulmods
بدلاً من Optifine، أوصي ببدائل أكثر توافقًا مثل Sodium + Iris أو Rubidium + Oculus.
أوصي باستخدام Java 17 أو، إذا فشل ذلك، Java 11 ما لم يكن الإصدار 8 ضروريًا للغاية. ولكن إذا كان الأمر كذلك، فستعمل هذه العلامات مع OpenJDK8، جنبًا إلى جنب مع Shenandoh GC (لـ Red Hat OpenJDK على العملاء) أو G1GC (لكل شيء آخر):
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+ParallelRefProcEnabled -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:MaxInlineLevel=15 -XX:MaxVectorSize=32 -XX:+UseCompressedOops -XX:ThreadPriorityPolicy=1 -XX:+UseNUMA -XX:+UseDynamicNumberOfGCThreads -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=350M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseFPUForSpilling -Dgraal.CompilerConfiguration=community
يمكن لمستخدمي x86 Java 8 (ويُعرف أيضًا باسم معظم مستخدمي Java 8) إضافة هذه الوسائط الإضافية:
-XX:+UseXMMForArrayCopy
يمكنك أيضًا الحصول على إصدارات Java 8 من GraalVM EE من قسم 21.X على موقع Oracle، واستخدام هذه الوسائط:
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+AlwaysActAsServerClassMachine -XX:+ParallelRefProcEnabled -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:AllocatePrefetchStyle=1 -XX:ThreadPriorityPolicy=1 -XX:+UseNUMA -XX:+UseDynamicNumberOfGCThreads -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=350M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseFPUForSpilling -XX:+EnableJVMCI -XX:+UseJVMCICompiler -XX:+EagerJVMCI -Dgraal.TuneInlinerExploration=1 -Dgraal.CompilerConfiguration=enterprise -Dgraal.UsePriorityInlining=true -Dgraal.Vectorization=true -Dgraal.OptDuplication=true -Dgraal.DetectInvertedLoopsAsCounted=true -Dgraal.LoopInversion=true -Dgraal.VectorizeHashes=true -Dgraal.EnterprisePartialUnroll=true -Dgraal.VectorizeSIMD=true -Dgraal.StripMineNonCountedLoops=true -Dgraal.SpeculativeGuardMovement=true -Dgraal.InfeasiblePathCorrelation=true
تأكد من ضبط -Dgraal.VectorizeSIMD
على false
إذا قمت بتشغيل التظليل.
قم بتشغيل خوادم Minecraft الخاصة بك على Clear Linux! إنه إلى حد بعيد توزيع Linux الأمثل، ويحتوي على بعض الميزات الرائعة الأخرى (مثل نظام التكوين عديم الحالة). كما أنه يدير العملاء على وحدات معالجة الرسومات AMD/Intel بشكل جيد: https://web.archive.org/web/20220916090057/https://docs.01.org/clearlinux/latest/tutorials/multi-boot/dual-boot- win.html
يعد Oracle Linux أيضًا خيارًا جيدًا للخوادم، نظرًا لأنه محسّن بشكل جيد بشكل معقول وجاهز ويتوفر Graalvm EE عبر مدير الحزم. بالنسبة للعملاء، تعتبر التوزيعات المستندة إلى Arch مثل CachyOS أو EndeavourOS ممتازة، حيث أنها تتمتع بدعم واسع لمعظم الأجهزة.
تأكد من أن عميل Minecraft يستخدم وحدة معالجة الرسومات المنفصلة الخاصة بك! تحقق من علامة التبويب F3، وأجبر لعبة Minecraft على استخدامها في " إعدادات رسومات Windows "، وليس لوحة تحكم AMD/Nvidia (حيث يبدو أنها لم تعد تعمل بعد الآن).
يجب على مستخدمي Linux عميل Minecraft مراجعة https://github.com/Admicos/minecraft-wayland
أغلق كل شيء في الخلفية، بما في ذلك Discord ومشغلات الألعاب ومتصفحك! لعبة Minecraft كثيفة الاستخدام للموارد، ولا تحب التطبيقات الأخرى التي تولد مقاطعات لوحدة المعالجة المركزية أو تأكل إدخال/إخراج القرص وذاكرة الوصول العشوائي وما إلى ذلك.
يحتوي Java 18/19 على بعض حالات عدم التوافق مع التعديل. يقال إنهم يعملون مع بعض حزم التعديل، لكنني لست متأكدًا مما إذا كانت هناك أي فوائد في الأداء.
تعمل تعديلات Java على تحسين أداء الخادم وتلعثم العميل، لكنها لا تعزز معدل الإطارات في الثانية للعميل كثيرًا (إن وجدت). ولهذا السبب، يعد تشغيل برامج تشغيل الرسومات وتعديلات الأداء الصحيحة/المحدثة أكثر أهمية بكثير: https://github.com/NordicGamerFE/usefulmods
يفترض هذا الدليل أن لديك ذاكرة وصول عشوائي احتياطية صغيرة عند تشغيل لعبة Minecraft. إذا كان الإعداد الخاص بك مقيدًا بذاكرة الوصول العشوائي (RAM)، فحاول إزالة الوسائط التالية على وجه الخصوص: -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M
، وجرب الخادم الحجج G1GC.
يقوم برنامج OpenJ9 من IBM بالفعل بحفظ ذاكرة الوصول العشوائي (RAM)، كما توحي سمعته، ولكنه أبطأ بنسبة تزيد عن 30% في خادم Chunkgen في اختباراتي. إذا كان هناك أي علامات تجعله منافسًا لـ OpenJDK، فيرجى إبلاغي بها على Discord أو هنا: #9
-XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions
ما عليك سوى فتح المزيد من العلامات لاستخدامها. يمكن إدراجها مع علامتي -XX:+PrintFlagsFinal
و- -XX:+JVMCIPrintProperties
، راجع تفريغات العلامات-XX:G1MixedGCCountTarget=3
: هذا هو عدد كتل oldgen gc التي سيتم استهدافها في gc "المختلط". هذه المجموعات المختلطة أبطأ بكثير، ولا يقوم عميل Minecraft بإنشاء Oldgen بسرعة كبيرة، لذلك يمكننا خفض هذه القيمة إلى 3 أو 2 أو حتى 1 لإيقاف مؤقت GC أقصر.-XX:+UseNUMA
يتيح تحسينات للأنظمة متعددة المقابس، إن أمكن. لست متأكدًا مما إذا كان هذا ينطبق على وحدات المعالجة المركزية MCM مثل Ryzen أو Epyc، ولكن يتم تعطيله تلقائيًا إذا لم يكن قابلاً للتطبيق.-XX:-DontCompileHugeMethods
يسمح بتجميع الأساليب الضخمة. تحتوي لعبة Minecraft المعدلة على بعض من هذه العناصر، ونحن لا نهتم باستخدام وحدة المعالجة المركزية (CPU) ذات الخلفية العالية.-XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000
تمكين تحسين الطرق الأكبر. راجع: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8058148-XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M
يحجز مساحة أكبر للتعليمات البرمجية المترجمة. يجب أن "تضيف" كافة الأقسام إلى ReservedCodeCacheSize
. لقد لاحظت أن لعبة Minecraft المعدلة تصل إلى الحد الافتراضي البالغ 250 ميغابايت مع XX:+PrintCodeCache
، ولكن حتى إذا لم يتم ملؤها، فإن الحجم الأكبر يجعل إخلاء التعليمات البرمجية المجمعة أقل عدوانية.-XX:NmethodSweepActivity=1
(الافتراضي 10) يحتفظ بالرمز "البارد" في ذاكرة التخزين المؤقت لفترة أطول. لا يوجد خطر "ملء" ذاكرة التخزين المؤقت للتعليمات البرمجية أيضًا، حيث تتم إزالة التعليمات البرمجية الباردة بقوة أكبر عند امتلائها.-XX:+UseStringDeduplication
-XX:+UseFastUnorderedTimeStamps
تجنب مكالمات النظام للحصول على الوقت. سيختلف تأثير ذلك باختلاف النظام، لكننا لسنا مهتمين حقًا بدقة الطابع الزمني للتسجيل.-XX:+UseCriticalJavaThreadPriority
لا شيء يجب أن يستبق سلاسل Minecraft. يمكن أن تنتظر سلاسل عمليات GC وCompiler.-XX:ThreadPriorityPolicy=1
استخدم نطاقًا أوسع من أولويات سلسلة المحادثات. يتطلب سودو على لينكس للعمل. تقوم بعض JDKs (مثل Graal) بتمكين هذا بشكل افتراضي، ولكن البعض الآخر لا يفعل ذلك.-XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1ConcRSHotCardLimit=16 -XX:G1ConcRefinementServiceIntervalMillis=150
: تحسين سلاسل عمليات المجموعة المتزامنة لـ G1GC، لا تزال قيد الاختبار: https://research.spec.org/icpe_proceedings/2014/p111.pdf-XX:G1RSetUpdatingPauseTimePercent=0
: نريد أن يتم كل هذا العمل في سلاسل G1GC المتزامنة، وليس فترات التوقف المؤقت.-XX:G1HeapWastePercent=18
لا تهتم بالتحصيل من الجيل القديم حتى تتجاوز هذه النسبة. يؤدي هذا إلى تجنب تشغيل GCs للجيل الشاب "المختلط" الأبطأ، وهو أمر جيد نظرًا لأن Minecraft (مع ذاكرة كافية) لا تملأ الجيل القديم بهذه السرعة. فكرة من: https://www.reddit.com/r/Minecraft/comments/k9zb7m/tuning_jvm_gc_for_singleplayer/-XX:GCTimeRatio=99
كهدف، يجب قضاء 1% من وقت وحدة المعالجة المركزية في جمع البيانات المهملة. الافتراضي هو 12، والذي يبدو منخفضًا جدًا. كان الإعداد الافتراضي لـ Java 8 هو 99.-XX:AllocatePrefetchStyle=3
قم بإنشاء تعليمات جلب مسبق واحدة لكل سطر من ذاكرة التخزين المؤقت. يعد الجلب المسبق الأكثر قوة مفيدًا بشكل عام في وحدات المعالجة المركزية الأحدث ذات ذاكرة التخزين المؤقت الكبيرة. يبدو أن كسر ZGC. انظر: https://github.com/openjdk/jdk/blob/bd90c4cfa63ba2de26f7482ed5d1704f9be9629f/src/hotspot/share/opto/macro.cpp#L1806-Dgraal.LoopRotation=true
تحسين غير افتراضي، من المحتمل أن يكون افتراضيًا قريبًا.-Dgraal.TuneInlinerExploration=1
اقض المزيد من الوقت في اتخاذ القرارات المضمنة. بالنسبة إلى لعبة Minecraft، نريد أن يكون برنامج التحويل البرمجي C2 بطيئًا وقويًا قدر الإمكان.-Dgraal
الأخرى بشكل افتراضي، وهي إما موجودة كفحص سلامة، أو لتصحيح الأخطاء أو كأداة آمنة للفشل (على سبيل المثال، إذا قام شخص ما بتعطيل JVCMI باستخدام علامة أخرى دون علمه).-XX:MaxInlineLevel=15 -XX:MaxVectorSize=32
) من إعدادات Java 17 الافتراضية. البعض الآخر (مثل +AggressiveOpts
) غير افتراضي في بعض إصدارات Java 8 الأقدم.-Dgraal.BaseTargetSpending=160
(الافتراضي 120) في Graal وبعض العلامات الأخرى في OpenJDK. قد تستفيد وحدات المعالجة المركزية (CPUs) التي تحتوي على ذاكرات تخزين مؤقت أكبر من هذا.-XX:+AlignVector -XX:+OptoBundling -XX:+OptimizeFill -XX:+AlwaysCompileLoopMethods -XX:+EnableVectorAggressiveReboxing -XX:+EnableVectorSupport -XX:+OptoScheduling -XX:+UseCharacterCompareIntrinsics -XX:+UseCopySignIntrinsic -XX:+UseVectorStubs
-Dgraal.LSRAOptimization=true
-Dgraal.OptWriteMotion=true
و graal.WriteableCodeCache=true
، والتي لا تبدو مستقرة، ولكنها قد تكون أكثر استقرارًا في GraalVM 22.3.0G1HeapWastePercent
المتطرفة.-XX:+PrintFlagsFinal
و- -XX:+JVMCIPrintProperties
لتفريغ أوصاف/افتراضيات العلامة.