سؤال

والآن أنا باستخدام JNA للاتصال جافا الأصلي، وأنا مسرور مع بساطته. ومع ذلك أنا لا حاجة إلى الأداء الأمثل، وأنا تفكر في استخدام الارتباطات الأخرى.

وسؤالي هو: ما هو جزء من الاتصالات جافا الأصلي هو "مكلفة" جزء؟ هل مرور البيانات فيما بينها؟

واسمحوا لي أن أطرح الأمر بطريقة أخرى. الحق الآن مهامي واجهة JNA تدعو لا تمر أية بيانات إلى جاوة في كل شيء، وظائف ليست حتى سمي ذلك في كثير من الأحيان. وبعبارة أخرى، جافا يدعو مكالمة المكتبة ومن ثم الدعوة المكتبة لا شيء خاص بها لفترة من الوقت وتقوم بإرجاع نوع بدائي. إرادة JNI / جرعة كبيرة / الخ يكون أي أسرع من الجيش الشعبي اليوغوسلافي في هذا النوع من الحالات؟

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

المحلول

وسوف بالنظر استخدامك حدة JNI لا يكون هناك أي أسرع من الجيش الشعبي اليوغوسلافي.

وما مكلفة حول التفاعل جافا الأصلي ونقل كميات كبيرة من الذاكرة. على وجه الخصوص، يمكن أن تكون مكلفة جدا لجعل ذاكرة جافا متاحة للالتعليمات البرمجية الأصلية. IIRC هذا يرجع جزئيا جافا يمكن أن تختار لشريحة الذاكرة إلا أنه يحب، ولكن التعليمات البرمجية الأصلية يتوقعون قطع متجاورة من الذاكرة - حركة / نسخ من الذاكرة يحتاج إلى بعض الوقت

إذا كنت تشعر بالقلق إزاء الأداء يجب عليك التأكد من أن شفرة JNA يستخدم وصول طراز "مباشر" بدلا من وصول نمط واجهة الأصلي.

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

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