الوصول المباشر للذاكرة لبطاقة الشبكة في جافا

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

  •  08-07-2019
  •  | 
  •  

سؤال

وبعض بطاقات شبكة حديثة تدعم الوصول المباشر إلى الذاكرة لتحسين الأداء. كيف يمكنني الاستفادة من هذه الميزة من جافا؟

هل تقدم JVM بذلك تلقائيا، أو هل أنا بحاجة للقيام allocateDirect على ByteBuffers أن أستخدمه لاجراء محادثات مع أن NIC؟

هل لديها الوثائق التي تناقش هذا؟

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

المحلول

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

نصائح أخرى

وهذه هي المهمة أنظمة التشغيل لاستخدام ميزة DMA للبطاقة الشبكة. وJVM لا يهتم حقا كيف OS يفعل ذلك، ويستخدم ببساطة وظائف نظام التشغيل لاجراء محادثات مع "واجهات الشبكة".

ونعم - إجابة ankon هي الصحيحة. جافا تعمل في رمل - جهاز ظاهري (وبالتالي، "VM" في JVM، الشمس في الواقع بنيت ONE النسخة البدني - انها على الشاشة في مكان ما)
. كان جافا أبدا تصميم (عمدا) لتصل إلى خارج الحماية، على عكس اكتف، والتي يمكن أن تذهب في أي مكان تقريبا على جهاز كمبيوتر.

ومجرد التفكير في كل الأشياء السيئة فعلت اكتف على مر السنين من خلال المتصفح. كنت لا تريد أن يحدث ذلك مع جافا، هل؟

وعلى الرغم من أن ...

ولكم <م> قد تكون قادرة على مثيل كائن في جافا التي لا يستطيعون الوصول إلى الأجهزة (مثل واحد من تلك عناصر تحكم ActiveX أو بعض DLL، على سبيل المثال - التي كنت قد لكتابة، أيضا).

والمشكلة أرى غير الإنتاجية. مع 100MB أو 1000MB بطاقات، فإن JVM (تذكر، وهذا هو VM التي تعمل على نظام التشغيل، لذلك كنت بضع طبقات إزالتها من الأجهزة) لديها سرعة للتعامل مع ما سيأتي في تحت الحمل؟ هل تريد برنامج جافا عقد الاحتياطي للبيانات في NIC في حين انها العبث معها (التفكير في التأثير على بقية النظام)؟

وعند هذه النقطة، وكنت أفضل ربما من كتابة الشجاعة الكادحين من الحل في C. وإذا كنت لا تزال بحاجة جافا للعب مع هذه البيانات، ووضعها في مكان حيث يمكن للجافا الحصول عليه.

إذا كنت لا تحصل على سرعة الشبكة التي تحتاج إليها في جاوة، ثم كنت بحاجة الى الذهاب الى إرسال بريد المجمع C من أجل الوصول إليه.

هل قياسها التعليمات البرمجية لتجد فيها مشكلات في الأداء الخاصة بك حقا؟ إذا ما تركت لنا أن نعرف أن نتمكن من المرجح أن تساعدك على الخروج من دون اللجوء الى JNI.

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