درک جاوا داخلی: سرعت و عملکرد
در بیشتر مکالمات در مورد برنامه نویسی، سرعت و کارایی در جاوا اصطلاحات تکراری هستند زیرا زبان بومی این ویژگی ها است.
شاید بپرسید جاوا چیست؟ همچنین ممکن است تعجب کنید که معنی یک زبان برنامه نویسی تفسیر یا کامپایل چیست. بیایید این مفاهیم را در بخش های بعدی تحلیل کنیم.
زبان برنامه نویسی جاوا چیست؟
جاوا یک زبان برنامه نویسی است که مستقل از پلتفرم است و از ساختار برنامه نویسی شی گرا برای ساخت نرم افزار استفاده می کند. این نه تنها به وب محدود می شود بلکه موبایل و دسکتاپ نیز محدود می شود.
ممکن است بپرسید که مستقل بودن از پلتفرم به چه معن است. این در مورد توانایی برنامههای جاوا برای کار کردن بدون زحمت بر روی سیستمعاملهای مختلف مانند ویندوز، مک و لینوکس است.
برخلاف زبانهایی مانند C یا C++ که میتوانند به یک سیستمعامل منفرد محدود شوند، سازگاری جاوا محدودیت وابستگی به یک سیستم عامل خاص را برای کار کردن از بین میبرد.
برای درک بهتر جاوا، بیایید نگاهی به تاریخچه آن و هدفی که برای آن ایجاد شده است بیاندازیم.
تاریخچه مختصری از جاوا
در سال ۱۹۹۱، جاوا توسط جیمز گاسلینگ و تیمش در Sun Microsystems توسعه یافت. اولین نسخه این زبان، ۱.۰، در سال ۱۹۹۶ منتشر شد.
این زبان به گونه ای طراحی شده بود که نحوی مشابه با سایر زبان های سطح بالاتر مانند C و C++ داشته باشد تا مهندسان در آن زمان در درک و توسعه برنامه با جاوا مشکلی نداشته باشند.
این برنامه با هدف توسعه تعامل تلویزیونی ساخته شد، اما برای زمان خود بسیار پیشرفته بود. زیرساخت های فناوری و دستگاه های آن زمان به اندازه کافی برای استفاده از ویژگی های پیشرفته جاوا آماده نشده بودند.
در زمانهای اخیر، جاوا را همچنان در کانون توجه قرار دادهایم، زیرا این نرمافزاری است که اکثر شرکتهای بزرگ فناوری به دلیل تطبیقپذیری آن از آن استفاده میکنند. این زبان به عنوان زبان اصلی برای ساخت برنامه های کاربردی در سطح سازمانی در پلتفرم های مختلف بسیار مورد تقاضا است.
با حرکت رو به جلو در کاوش در عملکرد درونی جاوا، مفاهیم کلیدی وجود دارد که باید آنها را درک کنید. این مفاهیم درک معنای تفسیر یا کامپایل شدن یک زبان برنامه نویسی است.
ترجمه شده در مقابل زبان های کامپایل شده
ما اغلب در مورد این اصطلاحات شنیده ایم، اما برای درک بهتر آنها، اجازه دهید یک دانشجوی خارجی را در حال عازم دو سفر به مکان های مختلف تصور کنیم.
در سناریوی اول، آنها بدون دانستن زبان یا آداب و رسوم محلی به محل میرسند، پس به مترجم یا مترجمی تکیه میکنند تا بتوانند با بومیان آن منطقه ارتباط برقرار کنند. این بسیار شبیه این است که چگونه یک مفسر در یک زبان برنامه نویسی تفسیر شده، کد را در لحظه برای رایانه برای درک آن ترجمه می کند.
در سناریوی دوم، دانش آموز آینده نگری داشت تا در کلاس ها شرکت کند تا زبان مورد نیاز خود را بیاموزد و با آداب و رسوم مکانی که قرار است به آنجا برود آشنا است. در بدو ورود نیازی به مترجم ندارند تا با بومیان آن منطقه ارتباط برقرار کنند. این شبیه به نحوه عملکرد یک زبان کامپایل شده است.
با درک این دو سناریو، می توانید تفاوت بین یک زبان تفسیری و یک زبان کامپایل شده را تشخیص دهید.
اولی هر خط کد را در حال حرکت ترجمه می کند. این یک ترجمه بیدرنگ است، دقیقاً شبیه نحوه استفاده دانشآموز در مثال از مترجم/مترجم.
از سوی دیگر، دومی ابتدا کد را پیشهیج میکند تا جریان روان را تضمین کند. سپس آن را "کامپایل" می کند یا به کد ماشین تبدیل می کند که کامپیوتر می تواند آن را بفهمد و اجرا کند، شبیه به دانش آموز آماده شده ما که به طور روان ارتباط برقرار می کند.
هر یک از این اصطلاحات برنامه نویسی دارای هدف مشابهی است که اجازه می دهد بین سیستم های کامپیوتری و برنامه نویسان ارتباط برقرار کند.
اکنون، همانطور که شما در مورد این اصطلاحات برنامه نویسی تحقیق می کنید، بیایید نحوه عملکرد جاوا را درک کنیم.
جاوا چگونه کار می کند؟
جاوا از این نظر منحصر به فرد است که هم کامپایل و هم تفسیر می شود.
جریان اصلی این است که ابتدا از کد منبع به چیزی که ما بایت کد می نامیم کامپایل می شود. سپس با استفاده از مفسری به نام JVM که مخفف Java Virtual Machine است به کد ماشین تفسیر می شود. این تفسیر در زمان اجرا اتفاق می افتد، پس می توانید به جاوا به عنوان یک زبان تفسیر شده و همچنین یک زبان کامپایل شده اشاره کنید.
حال ممکن است بپرسید بایت کد چیست؟
اصطلاحات رایجی که در کامپایل و تفسیر برنامه می شنویم، بیشتر کد منبع و کد ماشین هستند، بایت کد شبیه کد ماشین است به این معنا که یک کد منبع کامپایل شده است، اما در این مورد، تا زمانی که توسط ماشین مجازی تفسیر نشود، قابل اجرا نیست. ، ماشین مجازی جاوا.
ماشین مجازی جاوا چیست؟
JVM (ماشین مجازی جاوا) یک ماشین مجازی وابسته به پلتفرم است که برنامه های جاوا را در بایت کد و هر برنامه دیگری از زبان های دیگر که به بایت کد جاوا کامپایل می شود، تفسیر و اجرا می کند.
بایت کد جاوا کیفیت خاصی دارد: به پلتفرم خاصی وابسته نیست.
بایت کد جاوا، که شبیه به یک گویش جهانی است، می تواند توسط یک ماشین مجازی جاوا (JVM) در اکثر سیستم عامل هایی که می توانید تصور کنید، اجرا شود. در حال حاضر، هنگامی که JVM پردازش خود را آغاز می کند، آن بایت کد را به کد ماشین تبدیل می کند که دقیقاً مطابق با سیستم عاملی است که روی آن اجرا می شود.
اما اینجاست که جالب می شود: در حالی که بایت کد جاوا مانند آفتاب پرست است که می تواند با پلتفرم های مختلف سازگار شود، خود JVM چندان انعطاف پذیر نیست. این مانند داشتن نسخه های مختلف یک ابزار است که هر کدام برای یک سیستم عامل خاص ساخته شده است.
پس ، شما انواع مختلفی از JVM ها را دارید تا با انواع سیستم عامل های موجود مطابقت داشته باشد.
اکنون ممکن است تعجب کنید که از آنجایی که جاوا تحت دو فرآیند کامپایل و تفسیر قرار می گیرد، آیا این باعث کندی آن می شود؟ پاسخ منفی است. اگرچه تحت پردازش های مختلفی قرار می گیرد، اما همچنان سریع است.
برای درک این موضوع، باید برخی از اصولی را که در JVM دیده میشود، مانند JIT (Just In Time Compilation)، Hotspot JVM، و منحصربهفرد بودن حافظه/ذخیرهسازی آن مورد بحث قرار دهیم.
جاوا چگونه به سرعت بالا می رسد؟
توجه به این نکته مهم است که جاوا کامپایل خود را برای اجرای سریع ساده کرد و از پلتفرم مستقل یک زبان تفسیری استفاده کرد.
زبان های کامپایل شده به دلیل سرعت پردازش آنها به دلیل تبدیل کد منبع به طور کامل و نه خط به خط، بر خلاف همتای خود در زبان های تفسیر شده، شناخته شده اند. جاوا به بایت کدی کامپایل می شود که به دلیل فشرده بودن و بهینه سازی بایت کد با استفاده از JVM سریعتر تفسیر می شود.
JVM دارای چندین مؤلفه مانند توانایی آن برای دستکاری حافظه در زمان اجرا است. به دلیل مدیریت خودکار حافظه، زمان کمتری برای تخصیص اندازه حافظه برای داده ها با استفاده از زباله جمع کننده داخلی آن صرف می شود.
چگونه از کامپایلر JIT برای دستیابی به اجرای سریعتر استفاده کنیم
یکی دیگر از ویژگی های جالب در JVM که به کاهش زمان صرف شده برای بهبود سرعت پردازش کد کمک می کند، JIT است که مخفف Just In Time است.
کامپایلر JIT هسته اصلی موتور اجرایی در JVM است. مشاهده می کند که بایت کد تفسیر و اجرا می شود و یک "Hotspot" را ذخیره می کند. این یک مجموعه تکراری از بایت کد اجرا شده است.
کامپایلر JIT به جای تفسیر مجدد و اجرای مجدد همان بایت کد، این بایت کد را که اغلب اجرا می شود در حافظه به عنوان یک کد ماشین بومی برای استفاده در آینده ذخیره می کند.
این کد ماشین ذخیره شده همان چیزی است که وقتی بایت کد خود را اجرا می کنید اجرا می شود که منجر به زمان اجرای سریعتر می شود. کل این فرآیند را می توان یک کامپایل پویا نامید.
جمع آوری زباله چیست و چگونه عملکرد JVM را بهبود می بخشد؟
JVM در روشی که مدیریت حافظه را خودکار می کند منحصر به فرد است. این شامل تخصیص حافظه برای برنامه هایی است که اجرا می کند.
برخلاف C/C++، که در آن یک کد می نویسید و سپس تخصیص حافظه برنامه را به صورت دستی محاسبه می کنید، این ویژگی باعث بهبود و افزایش بهره وری برنامه نویسان می شود. همچنین برخی از خطاهایی که ممکن است به دلیل تمام شدن حافظه یا نشت حافظه ایجاد شود را کاهش می دهد.
جمع آوری زباله با بازیابی خودکار حافظه اشغال شده توسط اشیاء در برنامه ای که دیگر استفاده نمی شود به این امر کمک می کند. با انجام این کار، آن حافظه برای استفاده در آینده آزاد می شود.
ممکن است بپرسید این چگونه کار می کند. مراحل زیر را دنبال می کند:
ابتدا اشیاء غیرقابل دسترس را شناسایی می کند. اینها اشیایی در یک برنامه هستند که در حال استفاده نیستند. در انجام این کار سختگیرانه است زیرا اگر یک شی در حال استفاده را انتخاب کند و آن را بازیابی کند، برنامه ما را خراب می کند زیرا یک خطای شی ارجاع شده وجود خواهد داشت. این اصطلاحی است به نام ارجاعات آویزان.
سپس، حافظه اشیاء استفاده نشده انتخاب شده را بازیابی می کند، که حافظه را برای سایر اشیاء آینده آزاد می کند.
در برخی موارد، در طول این جمع آوری، زباله جمع کن اشیای باقی مانده در حافظه را فشرده می کند، که باعث بهبود موقعیت حافظه می شود. این اختیاری است، زیرا به الگوریتم های جمع آوری زباله در حال استفاده بستگی دارد.
این خلاصه ای از نحوه کار فرآیند جمع آوری زباله در ماشین مجازی جاوا است.
بسته به الگوریتم جمعآوری زباله تنظیم شده، توجه به این نکته مهم است که JVM هنگامی که فضای حافظه کم را شناسایی میکند، راهاندازی میشود و مراحل بالا را شروع میکند.
همچنین ذکر این نکته ضروری است که گاهی اوقات یک مکث در اجرا در فضای دیگر حافظه رخ می دهد.
بهینه سازی بایت کد
چند تکنیک اضافی روی کامپایلر انجام می شود که به افزایش کارایی کمک می کند.
کامپایلر با توجه به محاسبات مشابه، بایت کد را بهینه می کند. به جای اجرای مجدد این محاسبات، فقط نتیجه را به نمایش می گذارد. به این حالت تا شدن ثابت می گویند.
همچنین کدهای خارج از محدوده یا کدهایی که هرگز اجرا نمی شوند را حذف می کند. انجام این کار، محاسبات غیر ضروری را حذف می کند.
تکنیک دیگری که توسط کامپایلر استفاده میشود، بهینهسازی چشمانداز است که شامل جایگزینی دستورالعملهای بایت کد با یک دنباله کارآمدتر است.
عوامل زیادی در عملکرد و سرعت برنامه های جاوا نقش دارند.
این موارد از کامپایل و تفسیر آن گرفته تا پیچیدگیهای برخی مؤلفهها در مفسر آن (ماشین مجازی جاوا) را شامل میشود. همه اینها نقش اساسی در دستیابی به سرعت بالا دارند.
در نهایت، برای داشتن برنامههای سریعتر، برنامهنویس باید کدهای تمیزتر و سازمانیافتهتر را با استفاده از ساختارهای داده خوب بنویسد.
نتیجه
در این مقاله با تاریخچه مختصری از جاوا و تفاوت های زبان های کامپایل شده و ترجمه شده آشنا شدید. همچنین با برخی از اجزای اصلی جاوا، مانند ماشین مجازی جاوا، و نحوه کمک آن به عملکرد برنامه های جاوا آشنا می شوید.
اگر از خواندن این مقاله لذت بردید، می توانید من را در توییتر و لینکدین به اشتراک بگذارید و دنبال کنید.
ارسال نظر