আমি জানি যে জাভাতে জেএনআই কল করার সময় 'সীমানা পেরোন' ধীর হয়ে যায়।
তবে আমি জানতে চাই এটি কী এটি এটি ধীর করে তোলে? একটি জেএনআই কল করার সময় অন্তর্নিহিত জেভিএম বাস্তবায়ন কী করে যা এটি এত ধীর করে দেয়?
আমি জানি যে জাভাতে জেএনআই কল করার সময় 'সীমানা পেরোন' ধীর হয়ে যায়।
তবে আমি জানতে চাই এটি কী এটি এটি ধীর করে তোলে? একটি জেএনআই কল করার সময় অন্তর্নিহিত জেভিএম বাস্তবায়ন কী করে যা এটি এত ধীর করে দেয়?
উত্তর:
প্রথমত, এটি লক্ষণীয় যে "ধীর" দ্বারা আমরা এমন এমন কিছু বিষয়ে কথা বলছি যা দশক ন্যানোসেকেন্ড নিতে পারে। তুচ্ছ নেটিভ পদ্ধতিতে, ২০১০ সালে আমি আমার উইন্ডোজ ডেস্কটপে গড়ে ৪০ এনএস এবং ম্যাক ডেস্কটপে ১১ এনএস কল করেছিলাম। আপনি যদি অনেকগুলি কল না করেন তবে আপনি লক্ষ্য করবেন না।
এটি বলেছিল যে কোনও জাভা পদ্ধতিতে কল করার চেয়ে নেটিভ পদ্ধতিতে কল করা ধীর হতে পারে । কারণগুলির মধ্যে রয়েছে:
স্টিভ উইলসন এবং জেফ ক্যাসেলম্যান দ্বারা "জাভা প্ল্যাটফর্ম পারফরম্যান্স: কৌশল এবং কৌশল", 2000-এ "9.2: জেএনআইয়ের ব্যয় পরীক্ষা করা" বিভাগে কিছু অতিরিক্ত আলোচনার সম্ভাব্য তারিখ পাওয়া গেছে ¿ এটা নিচে পথ এক তৃতীয়াংশ সম্পর্কে এই পৃষ্ঠার নীচের @Philip দ্বারা মন্তব্যে দেওয়া।
২০০৯ এর আইবিএম বিকাশকারী ওয়ার্কস পেপার "জাভা নেটিভ ইন্টারফেস ব্যবহারের সেরা অভ্যাস" জেএনআইয়ের সাথে পারফরম্যান্সের ক্ষতিগুলি এড়াতে কিছু পরামর্শ সরবরাহ করে provides
sun.misc.Unsafe
এবং অন্যান্য অনেকগুলি জিনিস যেমন System.currentTimeMillis/nanoTime
জেভিএম দ্বারা 'যাদু' এর মাধ্যমে পরিচালিত হয়। এগুলি জেএনআই নয় এবং এগুলির যথাযথ .c / .h ফাইলগুলি নেই, নিজেই JVM ইমপ্লিকে বাধা দেয়। আপনি JVM কে লিখছেন / হ্যাক না করে পন্থা অনুসরণ করা যাবে না।
এটি উল্লেখযোগ্য যে সমস্ত জাভা পদ্ধতিগুলি চিহ্নিত native
"ধীর" নয়। এর মধ্যে কয়েকটি হ'ল আন্তঃব্যবস্থা যা এগুলি অত্যন্ত দ্রুত করে তোলে। কোনটি স্বতন্ত্র এবং কোনটি নয় তা পরীক্ষা করার জন্য আপনি vmSymbols.hppdo_intrinsic
এ সন্ধান করতে পারেন ।
মূলত JVM প্রতিটি JNI কলের জন্য ব্যাখ্যামূলকভাবে সি প্যারামিটারগুলি তৈরি করে এবং কোডটি অনুকূলিত হয় না।
এই গবেষণাপত্রে আরও অনেক বিশদ বর্ণিত হয়েছে
আপনি যদি জেএনআই বনাম স্থানীয় কোড বেঞ্চমার্কিং করতে আগ্রহী হন তবে এই প্রকল্পের বেনমার্কগুলি চালনার জন্য কোড রয়েছে।