متى وكيف يتم تحرير المخازن المؤقتة المباشرة NIO؟

StackOverflow https://stackoverflow.com/questions/1246983

  •  12-09-2019
  •  | 
  •  

سؤال

لدي مكتبة ج ترغب في وجود مخزن مؤقت مؤقت لمساحة الصفر. أنا أفكر في اجتياز عنوان المخزن المؤقت البايت مباشرة إليه.

  • هل يسمح VM بالانتقال إلى المخزن المؤقت قبل إطلاق سراحه في النهاية؟ ستستمر المكتبة الأصلية إلى المؤشر بعد يزول إطار JNI. فهمي هو أن مراجع الكائنات المحلية JNI لا يمكن تخزينها مؤقتا لأن VM قد تنقل إليهم خلال GC. هل هذا ينطبق على عنوان المخزن المؤقت؟

  • أنا أفهم أن VM ستقوم بحرية الذاكرة العازلة إذا قمت بتخصيص مخزن مؤقت في جافا ثم دع الكائن المخزن المؤقت يخرج من النطاق. إذا قمت بإنشاء مخزن مؤقت جديد في التعليمات البرمجية الأصلية باستخدام NewDirectBytebuffer، فمن مسؤولية ذلك هي تحرير ذاكرة الدعم؟

  • ماذا يحدث إذا قمت بإنشاء مخزن مؤقت جديد في التعليمات البرمجية الأصلية باستخدام NewDirectBytebuffer وعن عنوان قيد الاستخدام بالفعل بواسطة مخزن مؤقت مباشر؟ هل سيتم إطلاق سراح الذاكرة؟ هل ستعتبر مرجع VM كتلة الذاكرة ومحاولة تحريرها عندما يكون آخر مخزن مؤقت يشير إلى القمامة التي تم جمعها؟

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

المحلول

هل يسمح VM بالانتقال إلى المخزن المؤقت قبل إطلاق سراحه في النهاية؟

لن ينتقله، لأن المخزن المؤقت المباشر ليس جزءا من كومة GC.

إذا قمت بإنشاء مخزن مؤقت جديد في التعليمات البرمجية الأصلية باستخدام NewDirectBytebuffer، فمن مسؤولية ذلك هي تحرير ذاكرة الدعم؟

انها مسؤولية الخاص بك (الرمز الأصلي) لتحريرها. لا يمكن ل JVM معرفة الطريقة التي تم استخدامها في تخصيص أن متجر الدعم (قد يكون malloc'd، يمكن أن يكون مخزن مؤقت ثابت، إلخ)

ماذا يحدث إذا قمت بإنشاء مخزن مؤقت جديد في التعليمات البرمجية الأصلية باستخدام NewDirectBytebuffer وعن عنوان قيد الاستخدام بالفعل بواسطة مخزن مؤقت مباشر؟

بالنظر إلى أن VM لن يحاول تحرير الذاكرة التي يتم تمرير عنوانها إلى newdirectbytebuffer، لن يحدث شيء إذا قمت بتمرير نفس العنوان مرتين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top