۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

JVM چیست؟ معرفی ماشین مجازی جاوا

ماشین مجازی جاوا حافظه برنامه را مدیریت می کند و یک محیط اجرایی قابل حمل برای برنامه های کاربردی مبتنی بر جاوا فراهم می کند. توسعه دهندگان از مزایای عملکرد، ثبات و زمان اجرا قابل پیش بینی بهره مند می شوند.

ماشین مجازی جاوا حافظه برنامه را مدیریت می کند و یک محیط اجرایی قابل حمل برای برنامه های کاربردی مبتنی بر جاوا فراهم می کند. توسعه دهندگان از مزایای عملکرد، ثبات و زمان اجرا قابل پیش بینی بهره مند می شوند.

ماشین مجازی جاوا برنامه ای است که هدف آن اجرای برنامه های دیگر است. این یک ایده ساده است که همچنین به عنوان یکی از بهترین نمونه های ما از کدگذاری کونگ فو است. JVM وضعیت موجود در زمان خود را بر هم زد و امروز به حمایت از نوآوری برنامه نویسی ادامه می دهد.

JVM چه کاری انجام می دهد؟

JVM دارای دو عملکرد اصلی است: به برنامه‌های جاوا اجازه می‌دهد روی هر دستگاه یا سیستم عاملی اجرا شوند (معروف به اصل “یک بار بنویس، هرجا اجرا شود”)، و مدیریت و بهینه‌سازی حافظه برنامه. زمانی که جاوا در سال ۱۹۹۵ منتشر شد، تمام برنامه های کامپیوتری روی یک سیستم عامل خاص نوشته می شد و حافظه برنامه توسط توسعه دهنده نرم افزار مدیریت می شد. JVM یک مکاشفه بود.

Javaworld > سری توضیحی JVM / JDK / JRE > ماشین مجازی جاوا > نمای کلی” border=”0″ class=”lazy” data-imageid=”100790558″ data-license=”IDG” data-original=” https://images.idgesg.net/images/article/2019/03/javaworld_jvm_jdk_jre_explainer_java_virtual_machine_debug_and_optimize_3x2_overview_update-100790558=”heightswear=100790558″ height=lage.b7=100790558-alge. zy” width=”1200″/ ></p>
<p>شکل ۱. نمای سطح بالا از JVM.</p>
<p>داشتن یک تعریف فنی برای JVM مفید است، و همچنین یک روش روزمره وجود دارد که توسعه دهندگان نرم افزار در مورد آن فکر می کنند. بیایید آن را تجزیه کنیم:</p>
<ul>
<li><strong>تعریف فنی</strong>: JVM مشخصات یک برنامه نرم افزاری است که کد را اجرا می کند و محیط زمان اجرا را برای آن کد فراهم می کند.</li>
<li><strong>تعریف روزمره</strong>: JVM نحوه اجرای برنامه های جاوا است. ما تنظیمات را پیکربندی می کنیم و سپس برای مدیریت منابع برنامه در حین اجرا به JVM تکیه می کنیم.</li>
</ul>
<p>زمانی که توسعه‌دهندگان در مورد JVM صحبت می‌کنند، منظور ما معمولاً فرآیندی است که روی یک ماشین اجرا می‌شود، به‌ویژه یک سرور، که استفاده از منابع را برای یک برنامه جاوا نشان می‌دهد و کنترل می‌کند. این را با <em>مشخصات JVM</em> مقایسه کنید، که الزامات ساخت برنامه‌ای را که آن وظایف را انجام می‌دهد توضیح می‌دهد.</p>
<h2>زبان های JVM</h2>
<p>در حالی که زمانی فقط برای جاوا بود، JVM به اندازه کافی انعطاف پذیر و قدرتمند است که امروزه از بسیاری از زبان های دیگر پشتیبانی می کند. از محبوب‌ترین‌ها می‌توان به <a>Scala</a> که برای برنامه‌های هم‌زمان و هم‌زمان استفاده می‌شود، و <a>Groovy</a>، یک زبان برنامه‌نویسی با تایپ پویا، اشاره کرد. نمونه برجسته دیگر <a>Kotlin</a> است که ترکیبی از سبک های شی گرا و کاربردی را ارائه می دهد. همه اینها <em>زبان‌های JVM</em> در نظر گرفته می‌شوند، به این معنی که، حتی اگر در جاوا کدنویسی نمی‌کنند، برنامه‌نویس دسترسی به اکوسیستم وسیع کتابخانه‌های جاوا را حفظ می‌کند.</p>
<h2>چه کسی JVM را توسعه و نگهداری می کند؟</h2>
<p>JVM به طور گسترده ای استقرار یافته، به شدت مورد استفاده قرار می گیرد و توسط برخی برنامه نویسان بسیار باهوش، هم شرکتی و هم منبع باز نگهداری می شود. پروژه <a href=OpenJDK با تصمیم Sun Microsystems به جاوا منبع باز آغاز شد و تا Oracle ادامه یافت. سرپرستی.

جمع آوری زباله

متداول‌ترین تعامل با JVM در حال اجرا، بررسی میزان استفاده از حافظه در پشته و پشته است. رایج ترین تنظیم، تنظیم عملکرد تنظیمات حافظه JVM است.

استفاده از پروژه YARP مایکروسافت برای پروکسی میکروسرویس های مبتنی بر وب

قبل از جاوا، تمام حافظه برنامه توسط برنامه نویس مدیریت می شد. در جاوا، حافظه برنامه توسط JVM مدیریت می شود. JVM حافظه را از طریق فرآیندی به نام جمع آوری زباله مدیریت می کند که به طور مداوم حافظه استفاده نشده را در برنامه های جاوا شناسایی و حذف می کند. جمع آوری زباله در یک JVM در حال اجرا انجام می شود.

در روزهای اول، جاوا به دلیل اینکه به اندازه C++ «نزدیک به فلز» نبود و بنابراین به آن سرعتی نداشت، مورد انتقاد بسیاری قرار گرفت. روند جمع آوری زباله به ویژه بحث برانگیز بود. از آن زمان، الگوریتم‌ها و رویکردهای مختلفی برای جمع‌آوری زباله پیشنهاد و استفاده شده‌اند. با توسعه و بهینه سازی مداوم، جمع آوری زباله بسیار بهبود یافته است. (مدیریت خودکار حافظه نیز مورد توجه قرار گرفت و یکی از ویژگی‌های مشترک سایر زبان‌های مدرن مانند جاوا اسکریپت و Python است.)

«نزدیک به فلز» به چه معناست؟

وقتی برنامه نویسان می گویند یک زبان برنامه نویسی یا پلتفرم “نزدیک به فلز” است، منظور ما این است که توسعه دهنده قادر است به صورت برنامه نویسی (با نوشتن کد) حافظه یک سیستم عامل را مدیریت کند. در تئوری، برنامه نویسان می توانند با تعیین میزان استفاده و زمان کنار گذاشتن آن، عملکرد بیشتری را از برنامه های ما حذف کنند. در بیشتر موارد، واگذاری مدیریت حافظه به یک فرآیند بسیار پیشرفته مانند JVM عملکرد بهتر و خطاهای کمتری نسبت به انجام آن توسط خودتان دارد.

سه بخش JVM

می توان گفت JVM سه جنبه دارد: مشخصات، پیاده سازی و نمونه. بیایید هر یک از این موارد را در نظر بگیریم.

مشخصات JVM

اول، JVM یک است مشخصات نرم افزار. به شکلی دایره‌ای، مشخصات JVM نشان می‌دهد که جزئیات پیاده‌سازی آن در مشخصات تعریف نشده است تا حداکثر خلاقیت را در تحقق آن ایجاد کند:

برای پیاده سازی صحیح ماشین مجازی جاوا، فقط باید بتوانید قالب فایل class را بخوانید و عملیات مشخص شده در آن را به درستی انجام دهید.

J.S. باخ یک بار ایجاد موسیقی را به طور مشابه شرح داد:

تنها کاری که باید انجام دهید این است که کلید سمت راست را در زمان مناسب لمس کنید.

بنابراین، تنها کاری که JVM باید انجام دهد اجرای صحیح برنامه های جاوا است. ساده به نظر می رسد، و حتی ممکن است از بیرون ساده به نظر برسد، اما این یک کار بزرگ است، به خصوص با توجه به قدرت و انعطاف پذیری زبان جاوا.

ماشین مجازی

JVM یک ماشین مجازی است که فایل‌های کلاس جاوا را به روشی قابل حمل اجرا می‌کند. ماشین مجازی بودن به این معنی است که JVM انتزاعی از یک ماشین اصلی و واقعی است – مانند سروری که برنامه شما روی آن اجرا می شود. صرف نظر از اینکه واقعاً چه سیستم عامل یا سخت افزاری وجود دارد، JVM یک محیط قابل پیش بینی برای اجرای برنامه ها ایجاد می کند. با این حال، برخلاف یک ماشین مجازی واقعی، JVM یک سیستم عامل مجازی ایجاد نمی کند. دقیق تر است که JVM را به عنوان محیط زمان اجرا مدیریت شده یا ماشین مجازی پردازش توصیف کنیم.

اجراهای JVM

اجرای مشخصات JVM منجر به یک برنامه نرم افزاری واقعی می شود که یک پیاده سازی JVM است. در واقع، پیاده سازی JVM وجود دارد، هم منبع باز و هم اختصاصی. HotSpot OpenJDK اجرای مرجع JVM است. این پایگاه یکی از کاملاً آزمایش‌شده‌ترین و آزمایش‌شده‌ترین پایگاه‌های کد در جهان است.

رویارویی با چالش های چند خوشه ای Kubernetes

HotSpot ممکن است رایج ترین JVM مورد استفاده باشد، اما به هیچ وجه تنها نیست. یکی دیگر از پیاده‌سازی‌های جالب و محبوب GraalVM است که دارای عملکرد بالا و پشتیبانی از سایر زبان‌های سنتی غیر JVM مانند C++ و < a>Rust از طریق مشخصات LLVM. JVMهای مختص دامنه مانند JVM رباتیک جاسازی شده، LeJOS

نیز وجود دارد.

به طور معمول، شما JVM را دانلود و نصب می‌کنید بخش همراه یک محیط زمان اجرا جاوا (JRE ). JRE بخشی روی دیسک جاوا است که یک JVM در حال اجرا ایجاد می کند.

نمونه JVM

پس از پیاده سازی و انتشار مشخصات JVM به عنوان یک محصول نرم افزاری، می توانید آن را به صورت یک برنامه دانلود و اجرا کنید. آن برنامه دانلود شده یک نمونه (یا نسخه نمونه) از JVM است.

بیشتر اوقات، زمانی که توسعه دهندگان در مورد “JVM” صحبت می کنند، ما به یک نمونه JVM اشاره می کنیم که در یک محیط توسعه یا تولید نرم افزار اجرا می شود. ممکن است بگویید، “هی آناند، JVM روی آن سرور چقدر از حافظه استفاده می کند؟” یا، “باورم نمی‌شود که یک تماس دایره‌ای ایجاد کردم و یک خطای سرریز پشته JVM من را خراب کرد. چه اشتباه تازه‌کاری!”

مشخصات نرم افزار چیست؟

یک مشخصات نرم افزار (یا مشخصات) یک سند طراحی قابل خواندن برای انسان است که نحوه عملکرد یک سیستم نرم افزاری را توضیح می دهد. هدف از مشخصات، ایجاد توضیحات و الزامات واضح برای مهندسین برای کدنویسی است.

چگونه JVM فایل های کلاس را بارگیری و اجرا می کند

ما در مورد نقش JVM در اجرای برنامه های جاوا صحبت کرده ایم، اما چگونه عملکرد خود را انجام می دهد؟ برای اجرای برنامه های جاوا، JVM به بارگذار کلاس جاوا و موتور اجرای جاوا بستگی دارد.

لودر کلاس جاوا

همه چیز در جاوا یک کلاس است و همه برنامه های جاوا از کلاس ها ساخته می شوند. یک برنامه می تواند از یک کلاس یا هزاران کلاس تشکیل شده باشد. برای اجرای یک برنامه جاوا، یک JVM باید فایل های .class کامپایل شده را در یک زمینه، مانند یک سرور، بارگذاری کند، جایی که بتوان به آنها دسترسی داشت. یک JVM برای انجام این عملکرد به بارگذار کلاس خود بستگی دارد.

وقتی java classfile را تایپ می کنید، می گویید: یک JVM راه اندازی کنید و کلاس نامگذاری شده را در آن بارگذاری کنید.

لودر کلاس جاوا بخشی از JVM است که کلاس ها را در حافظه بارگذاری می کند و آنها را می سازد. در دسترس برای اجرا بارگذارهای کلاس از تکنیک هایی مانند بارگذاری تنبل و کش استفاده می کنند تا بارگذاری کلاس تا جایی که می تواند کارآمد باشد. همانطور که گفته شد، بارگذاری کلاس آن بازی فکری حماسی نیست که (مثلاً) مدیریت حافظه قابل حمل قابل حمل است، بنابراین تکنیک ها نسبتاً ساده هستند.

هر ماشین مجازی جاوا شامل یک کلاس لودر است. مشخصات JVM روش های استانداردی را برای پرس و جو و دستکاری بارگذار کلاس در زمان اجرا توصیف می کند، اما پیاده سازی های JVM مسئول تحقق این قابلیت ها هستند. از دیدگاه توسعه‌دهنده، مکانیسم بارگذار کلاس زیرین یک جعبه سیاه است.

پایان منبع باز با پشتوانه فروشنده؟

موتور اجرا

هنگامی که بارگذار کلاس کار خود را در بارگیری کلاس ها انجام داد، JVM شروع به اجرای کد در هر کلاس می کند. موتور اجرا جزء JVM است که این عملکرد را مدیریت می کند. موتور اجرا برای JVM در حال اجرا ضروری است. در واقع، برای تمام اهداف عملی، این نمونه JVM است.

اجرای کد شامل مدیریت دسترسی به منابع سیستم است. موتور اجرای JVM بین برنامه در حال اجرا – با نیازهای آن به منابع فایل، شبکه و حافظه – و سیستم عاملی که این منابع را تامین می کند، قرار می گیرد.

منابع سیستم را می توان به دو دسته کلی تقسیم کرد: حافظه و هر چیز دیگری. به یاد بیاورید که JVM مسئول از بین بردن حافظه استفاده نشده است و جمع آوری زباله مکانیزمی است که این دفع را انجام می دهد. JVM همچنین مسئول تخصیص و حفظ ساختار مرجع است که توسعه‌دهنده آن را بدیهی می‌داند. به عنوان مثال، موتور اجرایی JVM مسئول گرفتن چیزی شبیه کلمه کلیدی new در جاوا و تبدیل آن به یک درخواست خاص سیستم عامل برای تخصیص حافظه است.

فرای حافظه، موتور اجرایی منابع را برای دسترسی به سیستم فایل و I/O شبکه مدیریت می کند. از آنجایی که JVM در بین سیستم عامل ها قابل همکاری است، این کار ساده ای نیست. علاوه بر نیازهای منابع هر برنامه، موتور اجرا باید به هر محیط سیستم عامل پاسخگو باشد. اینگونه است که JVM قادر به رسیدگی به نیازهای درونی است.

تکامل JVM: گذشته، حال، آینده

از آنجایی که JVM یک زمان اجرا شناخته شده با پیکربندی، نظارت و مدیریت استاندارد است، برای توسعه کانتینری با استفاده از فناوری هایی مانند Docker و Kubernetes مناسب است. همچنین برای platform-as-a-a-service (PaaS) به خوبی کار می کند، و مختلفی وجود دارد رویکردهای بدون سرور. به دلیل همه این عوامل، JVM برای معماری های میکروسرویس مناسب است.

یکی دیگر از ویژگی های مهم در افق Project Loom است که به دنبال معرفی رشته های مجازی به JVM است. رشته‌های مجازی می‌توانند همزمان در انتزاع بالاتر در بالای فرآیندهای سیستم عامل باشند. رشته‌های مجازی می‌توانند حافظه را بین آنها به اشتراک بگذارند تا پیشرفت‌های بالقوه زیادی در اصطلاحات و عملکرد کدنویسی داشته باشند.

نتیجه گیری

در سال ۱۹۹۵، JVM دو مفهوم انقلابی را معرفی کرد که از آن زمان به عنوان نرخ استاندارد برای توسعه نرم‌افزار مدرن تبدیل شده‌اند: “یک بار بنویس، هر جا اجرا شود” و مدیریت حافظه خودکار. قابلیت همکاری نرم افزاری در آن زمان مفهوم جسورانه ای بود، اما امروزه کمتر توسعه دهنده ای به آن فکر می کند. به همین ترتیب، در حالی که پیشینیان مهندسی ما مجبور بودند خودشان حافظه برنامه را مدیریت کنند، نسل من با جمع آوری زباله بزرگ شد.

می‌توانیم بگوییم که جیمز گاسلینگ و برندن آیخ برنامه‌نویسی مدرن را اختراع کردند، اما هزاران نفر دیگر ایده‌های خود را در دهه‌های بعد اصلاح کرده‌اند. در حالی که ماشین مجازی جاوا در ابتدا فقط برای جاوا بود، امروزه برای پشتیبانی از بسیاری از زبان های برنامه نویسی و برنامه نویسی از جمله Scala، Groovy و Kotlin تکامل یافته است. با نگاه به آینده، دیدن آینده ای که در آن JVM بخش برجسته ای از چشم انداز توسعه نباشد، دشوار است.