لهجههای جیاوام
اگرچه جیاوام در بالا فقط با مقصود ترجمهٔ نرمافزارهای جاوا پا به عرصه گذارده بود، ولی امروزه بخش اعظمی از گویشهای دیگر نیز توانمند به اجرای نرمافزارهای خویش بر روی آن می باشند. جیاوامِ کنونی هیچسیرتکامل دفاع از گویشهایی که نظارت نوع در آنها به طور پویاست نمینماید، به این دلیلکه تحقیق نوع جان دار از نوع ایستاست. با این وجود از جیاوام طراحی اپلیکیشن در مشهد میاقتدار تحت عنوان مفسری برای لهجههایی با تحقیق نوع پویا، به کار گرفت.
امان از تغییرو تحول پویا در کلاسها و متدها در جیاوام به طور محصور شکل میپذیرد که به عبارتی هم زیر گوشه و کنار عیبیابی میباشد. با این وجود کلاسها و متدها را میقدرت به طور پویا اضافه نمود. از همدر حال حاضر برنامه ای برای جانبداری توکار از زبادهای پویا در کتابت هفتم جاوا در مشت میباشد.
چرا ماشین مجازی جاوا التفات داراست؟
پلتفرم غیروابسته بودن: یک کدام از مهم ترین مزایای جاوا، پلتفرم غیروابسته بودن آن میباشد. بدین معنا که درصورتی که یک اپلیکیشن جاوا را روی یک سیستم برهان خاص کامپایل فرمائید، میتوانید آن را فارغ از تغییرو تحول روی هر سیستم عاملی که JVM روی آن نصب گردیده، اعمال نمائید. این امکان به لطف JVM قابلیتپذیر گردیده است.
مدیر خاطر خود کار: JVM به طور خود کار یاد را مدیر مینماید و از نشت خاطر پرهیز مینماید. این خصوصیت منجر میشود که اپلیکیشننویسان جاوا کمتر نگران مدیر یاد باشند.
امنیت: JVM دارنده مکانیزمهای امنیتی توانمند میباشد که از اجرای کدهای مخرب خودداری مینماید.
عدهآوری آشغال: JVM به طور اتوماتیک یادای که دیگر آیتم استعمال قرار نمیگیرد را آزاد مینماید که بدین مراحل گردآوریآوری آشغال گفته میگردد.
چهگونه JVM عمل مینماید؟
کامپایل به بایتکد: هنگامی یک نرمافزار جاوا را کامپایل می کنید، خروجی آن یک فولدر با پسوند .class میباشد که دربردارنده بایتکد جاوا میباشد. بایتکد یک گویش ماشین سطح ذیل میباشد که برای JVM قابل فهم و شعور میباشد.
بار گذاری کلاس: هنگامی یک اپ جاوا را اعمال میکنید، JVM پوشه کلاس را بار گذاری کرده و آن را در یاد قرار میدهد.
تعبیر یا این که کامپایل JIT: JVM میتواند بایتکد را تعبیروتفسیر نماید یا این که آن را به کد ماشین ساکن کامپایل نماید (JIT یا این که Just-In-Time). کامپایل JIT سبب ساز میگردد که نرم افزارهای جاوا سریعخیس ایفا شوند.
اجرای نرمافزار: JVM بایتکد را انجام کرده و خروجی اپ را اکران می دهد.
مزایای استعمال از JVM
پلتفرم جداگانه بودن: همان گونه که تا قبل از اینً بیان شد، این خصوصیت سبب می شود که نرم افزارهای جاوا قابل حمل باشند.
امنیت: JVM دارنده مکانیزمهای امنیتی توانا میباشد که از اجرای کدهای مخرب دوری مینماید.
مدیر خاطر اتوماتیک: اپلیکیشننویسان جاوا نیازی به نگرانی در باب مدیر خاطر ندارند.
جامعه بلندمرتبه: جاوا یک لهجه نرم افزارنویسی بسیار دوستداشتنی میباشد و جامعه بزرگی از اپنویسان دارااست که منابع و ابزارهای متعددی برای آن مو جود میباشد.
در چه مواقعی از JVM استعمال میگردد؟
ماشین مجازی جاوا (JVM) یک ابزار بسیار کارکشته و پر کاربرد در دنیای اپلیکیشننویسی میباشد که کاربردهای پهناورای داراست. به دنبال به برخی از مهم ترین مواقعی که از JVM به کارگیری میگردد اشاره می کنیم:
۱. بسط نرم افزارهای زیر اینترنت:
سرولتها و JSP: بخش اعظمی از اینترنتخدمتها و اینترنتنرم افزارها با به کارگیری از سرولتها و JSP که بر روی JVM انجام می شوند، بسط داده می شوند.
فریمورکهای اینترنت: فریمورکهای محبوبی مانند Spring، Hibernate و Struts بر روی JVM ایفا می گردند و گسترش اینترنتنرم افزارهای بغرنج را تسهیل مینمایند.
میکروسرویسها: معماری میکروسرویسها که در آن یک نرم افزار به خدمتهای خردخیس تقسیم میگردد، به صورت پهناورای از جاوا و JVM استعمال مینماید.
۲. گسترش اپلیکیشنهای دسکتاپ:
جاوا اف ایکس: با استعمال از جاوا اف ایکس (JavaFX) میقدرت نرم افزارهای دسکتاپ گرافیکی خوشگل و پلتفرم مستقلی ساخت.
آپلتهای جاوا: اگرچه به کار گیری از آپلتها کمتر گردیده است، البته در قبل برای اجرای اپلیکیشنهای خرد در مرورگر از آن ها استعمال میشد.
۳. گسترش نرمافزارهای گوشی:
اندروید: سیستم استدلال اندروید از ماشین مجازی Dalvik و آنگاه از ART (Android Runtime) به کارگیری مینماید که مبتنی بر JVM پیاده سازی گردیدهاند.
نرمافزارهای کراس پلتفرم: بعضا از فریمورکها مانند Apache Cordova به توسعه و گسترشدهندگان اذن میدهند تا با به کارگیری از جاوا و بقیه گویشهای اپنویسی، نرم افزارهای موبایلی برای پلتفرمهای متفاوت ساختوساز نمایند.
۴. گسترش بازیها:
LibGDX: این فریمورک به توسعه و گسترشدهندگان اذن می دهد تا بازیهای دوبعدی و سهآتی را برای پلتفرمهای متفاوت با به کارگیری از جاوا ساختوساز نمایند.
Minecraft: بازی دوست داستنی Minecraft در صدر با استعمال از جاوا پیشرفت داده شد.
۵. بیگ دیتا و پردازش برابر:
Hadoop: فریمورک Hadoop برای پردازش وسعت عظیمی از دادهها از جاوا استعمال مینماید.
Spark: فریمورک Spark نیز برای پردازش دادههای تبارک به طور برابر و توزیع گردیده از جاوا به کارگیری مینماید.
۶. ابزارهای توسعه و گسترش و آزمایش:
JUnit: یکی دوست داستنیترین فریمورکهای آزمایش واحد در جاوا میباشد که برای اعتقاد و باور از چگونگی کد به کارگیری میشود.
Maven و Gradle: این ابزارها برای مدیر تعلقها و تشکیل داد پروژههای جاوا استعمال میگردند.
۷. سیستمهای امبدد:
کارتهای هوشمند: برخی از کارتهای هوشمند از جاوا برای اجرای نرم افزارهای خرد استعمال مینمایند.
دستگاههای IoT: برخی از دستگاههای وب شی ءها از جاوا برای اجرای اپ خویش به کار گیری مینمایند.
معماری داخلی JVM
در پایین به تفصیل معماری داخلی JVM میپردازیم. معماری JVM قسمت هایی نظیر classloader، memory area، execution engine و غیره … را مشتمل بر می گردد.
Classloader
Classloader زیرسامانه ی نرم افزار ی JVM بوده و class file هایی که دربردارنده bytecode جاوا است را در منطقه ای به اسم runtime data area یا این که جای ذخیره ی داده های فرصت اعمال لود می نماید.
Class (Method) Area / حوزه ی ذخیره ی داده ها کلاس
این منطقه ساختارهای مخصوص کلاس نظیر دسته ثوابت فرصت ایفا (runtime constant pool)، فیلد، داده و کد مرتبط با متدها را در خویش ذخیره می نماید.
Heap
حوزه ای در یاد که آبجکت ها در طی جاری ساختن در آن ذخیره میشوند.
Stack (حفاظه ی پشته)
حیطه ی stack در یاد که frame ها را در خویش ذخیره می نماید (stack به معنی کلی به حوزه ای از خاطر گفته میگردد که اطلاعات به طور static و در طی کامپایل در آن ذخیره میشوند). متغیرهای محلی و حاصل جزئی را نگه داشته و در فراخوانی مشی و بازگردانی خروجی از آن اسلوب، نقش دارااست. هر thread یک JVM stack دارااست که همزمان با thread ساخت و ساز میشود. همینطور با هربار فراخوانی اسلوب، یک frame تازه ساخته میشود. وقتی که فراخوانی روال خاتمه یافت، frame مربوطه حذف میگردد.
Program Counter Register (کانتر ی اپ)
این واحد خاطر ای با دسترسی سریع و سهل در پردازنده ی رایانه میباشد که نشانی دستوری از نرمافزار ی JVM که در حین حاضر در حالا اعمال میباشد را در خویش نگه میدارد.
Native method stack (خاطر پشته حمل کننده متدهای native)
این واحد همه متدهای native که در نرم افزار بکار میروند را دربر میگیرد.
Execution Engine (موتور مجری)
این واحد خویش قسمت های تحت را مشمول میگردد:
یک virtual processor: یک CPU فیزیکی که برای دستگاه مجازی اختصاص مییابد.
مفسر یا این که interpreter: کدهای کامپایل گردیده به گویش میانی یا این که bytecode را خوانده و آنگاه اوامر را ایفا نماید.
Just-In-Time (JIT) Compiler (قابلیت و امکان کامپایل و ترجمه در لحظه): این واحد جهت ارتقا سرعت اعمال و بهبود کوشش بکار می رود. JIT نصیب هایی از bytecode که قابلیت و امکان و سعی یکسان دارا هستند را هم زمان ترجمه کرده و به این وسیله مجال لازم برای کامپایل کلی کد را کاهش میدهد. قابل ذکر میباشد که در اینجا خواسته کلمه ی compiler، مترجمی میباشد که تیم اوامر jvm را به کد یا این که امرها قابل درک برای پردازنده/cpu دستگاه صاحبخانه تبدیل می نماید.
لهجههای جیاوام
اگرچه جیاوام در بالا فقط با مقصود ترجمهٔ نرمافزارهای جاوا پا به عرصه گذارده بود، ولی امروزه بخش اعظمی از گویشهای دیگر نیز توانمند به اجرای نرمافزارهای خویش بر روی آن می باشند. جیاوامِ کنونی هیچسیرتکامل دفاع از گویشهایی که نظارت نوع در آنها به طور پویاست نمینماید، به این دلیلکه تحقیق نوع جان دار از نوع ایستاست. با این وجود از جیاوام طراحی اپلیکیشن در مشهد میاقتدار تحت عنوان مفسری برای لهجههایی با تحقیق نوع پویا، به کار گرفت.
امان از تغییرو تحول پویا در کلاسها و متدها در جیاوام به طور محصور شکل میپذیرد که به عبارتی هم زیر گوشه و کنار عیبیابی میباشد. با این وجود کلاسها و متدها را میقدرت به طور پویا اضافه نمود. از همدر حال حاضر برنامه ای برای جانبداری توکار از زبادهای پویا در کتابت هفتم جاوا در مشت میباشد.
چرا ماشین مجازی جاوا التفات داراست؟
پلتفرم غیروابسته بودن: یک کدام از مهم ترین مزایای جاوا، پلتفرم غیروابسته بودن آن میباشد. بدین معنا که درصورتی که یک اپلیکیشن جاوا را روی یک سیستم برهان خاص کامپایل فرمائید، میتوانید آن را فارغ از تغییرو تحول روی هر سیستم عاملی که JVM روی آن نصب گردیده، اعمال نمائید. این امکان به لطف JVM قابلیتپذیر گردیده است.
مدیر خاطر خود کار: JVM به طور خود کار یاد را مدیر مینماید و از نشت خاطر پرهیز مینماید. این خصوصیت منجر میشود که اپلیکیشننویسان جاوا کمتر نگران مدیر یاد باشند.
امنیت: JVM دارنده مکانیزمهای امنیتی توانمند میباشد که از اجرای کدهای مخرب خودداری مینماید.
عدهآوری آشغال: JVM به طور اتوماتیک یادای که دیگر آیتم استعمال قرار نمیگیرد را آزاد مینماید که بدین مراحل گردآوریآوری آشغال گفته میگردد.
چهگونه JVM عمل مینماید؟
کامپایل به بایتکد: هنگامی یک نرمافزار جاوا را کامپایل می کنید، خروجی آن یک فولدر با پسوند .class میباشد که دربردارنده بایتکد جاوا میباشد. بایتکد یک گویش ماشین سطح ذیل میباشد که برای JVM قابل فهم و شعور میباشد.
بار گذاری کلاس: هنگامی یک اپ جاوا را اعمال میکنید، JVM پوشه کلاس را بار گذاری کرده و آن را در یاد قرار میدهد.
تعبیر یا این که کامپایل JIT: JVM میتواند بایتکد را تعبیروتفسیر نماید یا این که آن را به کد ماشین ساکن کامپایل نماید (JIT یا این که Just-In-Time). کامپایل JIT سبب ساز میگردد که نرم افزارهای جاوا سریعخیس ایفا شوند.
اجرای نرمافزار: JVM بایتکد را انجام کرده و خروجی اپ را اکران می دهد.
مزایای استعمال از JVM
پلتفرم جداگانه بودن: همان گونه که تا قبل از اینً بیان شد، این خصوصیت سبب می شود که نرم افزارهای جاوا قابل حمل باشند.
امنیت: JVM دارنده مکانیزمهای امنیتی توانا میباشد که از اجرای کدهای مخرب دوری مینماید.
مدیر خاطر اتوماتیک: اپلیکیشننویسان جاوا نیازی به نگرانی در باب مدیر خاطر ندارند.
جامعه بلندمرتبه: جاوا یک لهجه نرم افزارنویسی بسیار دوستداشتنی میباشد و جامعه بزرگی از اپنویسان دارااست که منابع و ابزارهای متعددی برای آن مو جود میباشد.
در چه مواقعی از JVM استعمال میگردد؟
ماشین مجازی جاوا (JVM) یک ابزار بسیار کارکشته و پر کاربرد در دنیای اپلیکیشننویسی میباشد که کاربردهای پهناورای داراست. به دنبال به برخی از مهم ترین مواقعی که از JVM به کارگیری میگردد اشاره می کنیم:
۱. بسط نرم افزارهای زیر اینترنت:
سرولتها و JSP: بخش اعظمی از اینترنتخدمتها و اینترنتنرم افزارها با به کارگیری از سرولتها و JSP که بر روی JVM انجام می شوند، بسط داده می شوند.
فریمورکهای اینترنت: فریمورکهای محبوبی مانند Spring، Hibernate و Struts بر روی JVM ایفا می گردند و گسترش اینترنتنرم افزارهای بغرنج را تسهیل مینمایند.
میکروسرویسها: معماری میکروسرویسها که در آن یک نرم افزار به خدمتهای خردخیس تقسیم میگردد، به صورت پهناورای از جاوا و JVM استعمال مینماید.
۲. گسترش اپلیکیشنهای دسکتاپ:
جاوا اف ایکس: با استعمال از جاوا اف ایکس (JavaFX) میقدرت نرم افزارهای دسکتاپ گرافیکی خوشگل و پلتفرم مستقلی ساخت.
آپلتهای جاوا: اگرچه به کار گیری از آپلتها کمتر گردیده است، البته در قبل برای اجرای اپلیکیشنهای خرد در مرورگر از آن ها استعمال میشد.
۳. گسترش نرمافزارهای گوشی:
اندروید: سیستم استدلال اندروید از ماشین مجازی Dalvik و آنگاه از ART (Android Runtime) به کارگیری مینماید که مبتنی بر JVM پیاده سازی گردیدهاند.
نرمافزارهای کراس پلتفرم: بعضا از فریمورکها مانند Apache Cordova به توسعه و گسترشدهندگان اذن میدهند تا با به کارگیری از جاوا و بقیه گویشهای اپنویسی، نرم افزارهای موبایلی برای پلتفرمهای متفاوت ساختوساز نمایند.
۴. گسترش بازیها:
LibGDX: این فریمورک به توسعه و گسترشدهندگان اذن می دهد تا بازیهای دوبعدی و سهآتی را برای پلتفرمهای متفاوت با به کارگیری از جاوا ساختوساز نمایند.
Minecraft: بازی دوست داستنی Minecraft در صدر با استعمال از جاوا پیشرفت داده شد.
۵. بیگ دیتا و پردازش برابر:
Hadoop: فریمورک Hadoop برای پردازش وسعت عظیمی از دادهها از جاوا استعمال مینماید.
Spark: فریمورک Spark نیز برای پردازش دادههای تبارک به طور برابر و توزیع گردیده از جاوا به کارگیری مینماید.
۶. ابزارهای توسعه و گسترش و آزمایش:
JUnit: یکی دوست داستنیترین فریمورکهای آزمایش واحد در جاوا میباشد که برای اعتقاد و باور از چگونگی کد به کارگیری میشود.
Maven و Gradle: این ابزارها برای مدیر تعلقها و تشکیل داد پروژههای جاوا استعمال میگردند.
۷. سیستمهای امبدد:
کارتهای هوشمند: برخی از کارتهای هوشمند از جاوا برای اجرای نرم افزارهای خرد استعمال مینمایند.
دستگاههای IoT: برخی از دستگاههای وب شی ءها از جاوا برای اجرای اپ خویش به کار گیری مینمایند.
معماری داخلی JVM
در پایین به تفصیل معماری داخلی JVM میپردازیم. معماری JVM قسمت هایی نظیر classloader، memory area، execution engine و غیره … را مشتمل بر می گردد.
Classloader
Classloader زیرسامانه ی نرم افزار ی JVM بوده و class file هایی که دربردارنده bytecode جاوا است را در منطقه ای به اسم runtime data area یا این که جای ذخیره ی داده های فرصت اعمال لود می نماید.
Class (Method) Area / حوزه ی ذخیره ی داده ها کلاس
این منطقه ساختارهای مخصوص کلاس نظیر دسته ثوابت فرصت ایفا (runtime constant pool)، فیلد، داده و کد مرتبط با متدها را در خویش ذخیره می نماید.
Heap
حوزه ای در یاد که آبجکت ها در طی جاری ساختن در آن ذخیره میشوند.
Stack (حفاظه ی پشته)
حیطه ی stack در یاد که frame ها را در خویش ذخیره می نماید (stack به معنی کلی به حوزه ای از خاطر گفته میگردد که اطلاعات به طور static و در طی کامپایل در آن ذخیره میشوند). متغیرهای محلی و حاصل جزئی را نگه داشته و در فراخوانی مشی و بازگردانی خروجی از آن اسلوب، نقش دارااست. هر thread یک JVM stack دارااست که همزمان با thread ساخت و ساز میشود. همینطور با هربار فراخوانی اسلوب، یک frame تازه ساخته میشود. وقتی که فراخوانی روال خاتمه یافت، frame مربوطه حذف میگردد.
Program Counter Register (کانتر ی اپ)
این واحد خاطر ای با دسترسی سریع و سهل در پردازنده ی رایانه میباشد که نشانی دستوری از نرمافزار ی JVM که در حین حاضر در حالا اعمال میباشد را در خویش نگه میدارد.
Native method stack (خاطر پشته حمل کننده متدهای native)
این واحد همه متدهای native که در نرم افزار بکار میروند را دربر میگیرد.
Execution Engine (موتور مجری)
این واحد خویش قسمت های تحت را مشمول میگردد:
یک virtual processor: یک CPU فیزیکی که برای دستگاه مجازی اختصاص مییابد.
مفسر یا این که interpreter: کدهای کامپایل گردیده به گویش میانی یا این که bytecode را خوانده و آنگاه اوامر را ایفا نماید.
Just-In-Time (JIT) Compiler (قابلیت و امکان کامپایل و ترجمه در لحظه): این واحد جهت ارتقا سرعت اعمال و بهبود کوشش بکار می رود. JIT نصیب هایی از bytecode که قابلیت و امکان و سعی یکسان دارا هستند را هم زمان ترجمه کرده و به این وسیله مجال لازم برای کامپایل کلی کد را کاهش میدهد. قابل ذکر میباشد که در اینجا خواسته کلمه ی compiler، مترجمی میباشد که تیم اوامر jvm را به کد یا این که امرها قابل درک برای پردازنده/cpu دستگاه صاحبخانه تبدیل می نماید.

منزلت تبلیغ در حاصل گوگل