سؤال

لقد قرأت مؤخرًا عن جميع وسائط JVM المتوفرة في JRE 6 [خيارات جافا VM] ورأيت هذا:

-XX:+StringCache :تمكين التخزين المؤقت للسلاسل المخصصة بشكل شائع.

الآن كنت دائمًا تحت الانطباع بأن Java احتفظت بمجموعة من السلاسل الداخلية (الكلمة الصحيحة؟) وعند القيام بشيء مثل تسلسل السلاسل مع القيم الحرفية، لم تكن تنشئ كائنات جديدة، بل تسحبها من هذه المجموعة.هل استخدم أي شخص هذه الحجة من قبل، أو يمكنه شرح سبب الحاجة إليها؟

يحرر: لقد حاولت إجراء اختبار مرجعي لمعرفة ما إذا كان لهذه الوسيطة أي تأثير ولم أتمكن من جعل Sun JVM يتعرف عليها.وكان هذا مع:

java version "1.6.0_11"  
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)

لذلك لست متأكدًا مما إذا كانت هذه الحجة تعمل على الإطلاق.

هل كانت مفيدة؟

المحلول 6

لم أتمكن من العثور على JVM واحد يقبل حتى هذه الحجة المفترضة - لذلك أعتقد أنه ليس هناك الكثير مما يمكن قوله.

نصائح أخرى

أعتقد عند استخدامها مع -XX:+AggressiveOpts أنها تمكن نفسه String الكائنات التي سيتم إرجاعها عند إنشاء String بنفس النص (وإن لم يكن من خلال new String, ، بالطبع).توجد مرحلة ملف تعريف حيث يتم إنشاء ذاكرة التخزين المؤقت، وبعد نقطة معينة يتم تحويل ذاكرة التخزين المؤقت للقراءة فقط.يحصل على درجات أعلى في معايير معينة.

-XX: -UseStringCache يعمل بشكل غريب بالنسبة لي.

يجب أن يكون إصدار jdk الخاص بي هو 1.6.0_22

أنا أيضًا لم أتمكن من تشغيل ما ورد أعلاه، لكن أحدث إصدار من JBB @ spec.org يُظهر استخدامه:-XX: -UseStringCache.سيتعين علي إعادة تشغيل المعايير لمعرفة ما إذا كان ذلك يحدث فرقًا (تطبيق XML ثقيل).

لم أتمكن أيضًا من العثور على JVM الذي يحترم هذا الإعداد؛كما علق، فإن جودة الوثائق حول معلمات JVM وبالتالي فائدتها أمر فظيع، ومع ذلك يبدو لسبب ما أنها منطقة يرى فيها بائعو JVM مجالًا للتمييز التنافسي - على الرغم من أن Oracle/Sun هي الأسوأ على الإطلاق.

على أي حال، إذا وجدت أن تطبيقك في منطقة معينة يستخدم عددًا صغيرًا من قيم السلسلة بشكل متكرر، فمن المنطقي بالتأكيد استخدام التدريب الداخلي - باستخدام طريقة String.intern() لإرجاع قيمة تجمع داخلي.لاحظ أنه يجب عليك استخدام القيمة المرجعة، وهذا ليس تأثيرًا جانبيًا على القيمة الأصلية.

كما هو الحال مع جميع تعديلات ملفات التعريف/الأداء، يجب إجراء ذلك بعناية باستخدام المقاييس والاختبارات.يمكن أن يكون مهمًا (كان ذلك بالنسبة لي) ولكن إذا لم تكن مجموعة القيم صغيرة، فإنها تؤدي إلى انخفاض الأداء ويجب أن تدرك أن مجموعة قيم السلسلة موجودة في Perm Gen وبالتالي فإن استخدامها سيؤثر على استخدام الذاكرة، GC إلخ.

اعتبارًا من JDK 8.0، تمت إزالة هذا الخيار.ليس من الواضح بالنسبة لي ما الذي يمكن استخدامه كبديل، إن وجد.

http://docs.Oracle.com/javase/8/docs/technotes/tools/unix/Java.html

 -XX:+UseStringCache

    Enables caching of commonly allocated strings. This option was removed from JDK 8 
    with no replacement.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top