نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

نصب ماشین جاوا. JVM (ماشین مجازی جاوا)

می توان آن را در بایت کد جاوا کامپایل کرد که سپس می تواند توسط JVM اجرا شود.

JVM جزء کلیدی پلتفرم جاوا است. از آنجایی که ماشین‌های مجازی جاوا برای بسیاری از پلتفرم‌های سخت‌افزاری و نرم‌افزاری در دسترس هستند، جاوا را می‌توان هم به‌عنوان میان‌افزار و هم به‌عنوان یک پلت‌فرم مستقل در نظر گرفت، از این رو اصل نوشتن یک بار، اجرا در هر کجاست. استفاده از یک بایت کد برای بسیاری از پلتفرم ها به جاوا اجازه می دهد تا به عنوان "یک بار کامپایل شده، هرجا اجرا شود" (یک بار کامپایل، هر جا اجرا شود) توصیف شود.

مشخصات JVM

بن بست Sun در مقابل IBM

در سال 2001، با هدف توسعه استانداردی برای برنامه های دسکتاپ چند پلتفرمی، Eclipse.

IBM VisualAge. IBM موفق شده است بین منافع جامعه آزاد و منافع کسب و کار (منافع خود) در مجوز عمومی Eclipse که توسط FSF به رسمیت شناخته شده است، تعادل برقرار کند.

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


بنیاد ویکی مدیا 2010.

ببینید «ماشین مجازی جاوا» در فرهنگ‌های دیگر چیست:

    ماشین مجازی جاوا- بخش اصلی محیط زمان اجرا جاوا (JRE). ماشین مجازی جاوا کد بایت جاوا را که قبلاً از کد منبع جاوا برنامه جاوا توسط کامپایلر جاوا تولید شده بود، تفسیر و اجرا می کند. JVM می تواند برای ... استفاده شود - توسعه یافته توسط JavaSoft. برنامه های وب ساخته شده با استفاده از آن می توانند به طور طبیعی در سیستم عامل یا مرورگر وب یا در یک محیط شبیه سازی معروف به ماشین مجازی جاوا اجرا شوند. فرهنگ لغت تجارت الکترونیک

    - (JPF) ابزار رایگان برای آزمایش برنامه های جاوا چند رشته ای. در اصل، این یک ماشین مجازی جاوا است که بر اساس آن روش‌های بررسی مدل پیاده‌سازی می‌شوند. این بدان معناست که ... ... ویکی پدیا

    ماشین مجازی جاوا- کد بایت مترجم برنامه های جاوا. یک ماشین مجازی که برای اجرای اپلت های جاوا طراحی شده است. JVM در اکثر مرورگرهای وب تعبیه شده است. این امکان اجرای سمت کلاینت اپلت های جاوا را فراهم می کند که فراخوانی آن ها در ... ... راهنمای مترجم فنی

    نام دیگر این مفهوم "جاوا" است. معانی دیگر را نیز ببینید نباید با جاوا اسکریپت اشتباه گرفته شود. کلاس زبان جاوا ... ویکی پدیا

    بررسی کیفیت ترجمه و آوردن مقاله مطابق با قوانین سبک ویکی پدیا ضروری است. شما می توانید با اصلاح خطاها به بهبود این مقاله کمک کنید. اصل n ... ویکی پدیا

JVM جزء کلیدی پلتفرم جاوا است. ماشین مجازی جاوا بایت کد جاوا را که قبلا از کد منبع جاوا توسط کامپایلر جاوا (javac) تولید شده بود، تفسیر و اجرا می کند.

از آنجایی که ماشین‌های مجازی جاوا برای بسیاری از پلتفرم‌های سخت‌افزاری و نرم‌افزاری در دسترس هستند، جاوا را می‌توان هم به‌عنوان میان‌افزار و هم به‌عنوان یک پلت‌فرم مستقل مشاهده کرد، از این رو اصل نوشتن یک بار، اجرا در هر کجاست. استفاده از یک بایت کد در چندین پلتفرم به جاوا اجازه می دهد تا به عنوان "یک بار کامپایل، هرجا اجرا" توصیف شود.

برنامه هایی که برای اجرا بر روی JVM در نظر گرفته شده اند باید در قالب استاندارد باینری قابل حمل که معمولاً به صورت فایل های .class نمایش داده می شود، کامپایل شوند. یک برنامه می تواند از کلاس های زیادی تشکیل شده باشد که در فایل های مختلف قرار دارند. برای سهولت در قرار دادن برنامه های بزرگ، برخی از فایل های .class را می توان با هم در یک فایل به اصطلاح jar (مخفف Java Archive) بسته بندی کرد.

ماشین مجازی JVM در حال اجرای فایل ها .کلاسیا .شیشهبا شبیه‌سازی دستورالعمل‌های نوشته شده برای JVM با تفسیر یا استفاده از یک کامپایلر به‌موقع (JIT) مانند HotSpot Sun microsystems. کامپایل JIT این روزها توسط اکثر JVM ها به خاطر سرعت مورد استفاده قرار می گیرد. همچنین کامپایلرهای پیش از موعدی وجود دارند که به توسعه دهندگان برنامه اجازه می دهند فایل های کلاس را در کدهای مخصوص پلتفرم از پیش کامپایل کنند.

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

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

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

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

اطلاعات رسیدگی به استثناها حاوی پیوندهایی به بخش های رسیدگی به استثنا در متد کلاس است.

زمان اجرا همچنین به داده های موجود در محدوده کلاس، از جمله ثابت ها و متغیرهای کلاس دسترسی دارد.

دستورات JVM از یک کد عملیاتی یک بیتی تشکیل شده است و همچنین می تواند شامل عملوند باشد. تعداد و اندازه عملوندها توسط کد عملیاتی تعیین می شود، برخی دستورالعمل ها هیچ عملوندی ندارند

JVM چیست؟

JVM موتوری است که محیط زمان اجرا را برای درایو کد یا برنامه های کاربردی جاوا فراهم می کند. بایت کد جاوا را به زبان ماشین تبدیل می کند. JVM بخشی از JRE (Java Run Environment) است. مخفف Java Virtual Machine است

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

در این آموزش، شما یاد خواهید گرفت که

معماری JVM

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

1) ClassLoader

کلاس لودر زیرسیستمی است که برای بارگذاری فایل های کلاس استفاده می شود. این سه عملکرد عمده یعنی. بارگذاری، پیوند، و مقداردهی اولیه.

2) منطقه روش

JVM Method Area ساختارهای کلاس مانند ابرداده، مخزن زمان اجرا ثابت و کد متدها را ذخیره می کند.

همه اشیا، متغیرهای نمونه مرتبط با آنها و آرایه ها در پشته ذخیره می شوند. این حافظه مشترک است و در چندین رشته مشترک است.

4) پشته های زبان JVM

پشته های زبان جاوا متغیرهای محلی را ذخیره می کنند و نتایج جزئی است. هر رشته دارای پشته JVM خود است که همزمان با ایجاد نخ ایجاد می شود. هر زمان که یک متد فراخوانی می شود یک فریم جدید ایجاد می شود و با تکمیل فرآیند فراخوانی متد حذف می شود.

5) PC Registers

ثبت PC آدرس دستور ماشین مجازی جاوا را که در حال اجراست ذخیره می کند. در جاوا، هر رشته دارای رجیستر PC جداگانه است.

6) پشته های روش بومی

پشته های متد بومی دستورالعمل کد بومی را نگه می دارند که به کتابخانه بومی بستگی دارد. به جای جاوا به زبان دیگری نوشته شده است.

7) موتور اجرا

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

8) رابط Native Method

رابط Native Method یک چارچوب برنامه نویسی است. این اجازه می دهد تا کد جاوا که در یک JVM اجرا می شود، توسط کتابخانه ها و برنامه های کاربردی بومی فراخوانی شود.

9) کتابخانه های روش بومی

کتابخانه های بومی مجموعه ای از کتابخانه های بومی (C, C ++) هستند که توسط Execution Engine مورد نیاز هستند.

فرآیند تدوین و اجرای کد نرم افزار

برای نوشتن و اجرای یک برنامه نرم افزاری به موارد زیر نیاز دارید

1) ویرایشگر- برای تایپ برنامه خود، می توان از یک دفترچه یادداشت برای این کار استفاده کرد

2) کامپایلر- برای تبدیل برنامه زبان بالا به کد ماشین بومی

3) پیوند دهنده- برای ترکیب فایل های برنامه های مختلف مرجع در برنامه اصلی خود با هم.

4) لودر- برای بارگذاری فایل ها از دستگاه ذخیره سازی ثانویه خود مانند هارد دیسک، فلش درایو، سی دی در RAM برای اجرا. زمانی که کد خود را اجرا می کنید، بارگیری به طور خودکار انجام می شود.

5) اعدام- اجرای واقعی کدی که توسط سیستم عامل و پردازنده شما مدیریت می شود.

با این پیش زمینه به ویدیوی زیر مراجعه کنید و کار و معماری ماشین مجازی جاوا را یاد بگیرید.

فرآیند کامپایل و اجرای کد C

برای درک فرآیند کامپایل جاوا در جاوا. اجازه دهید ابتدا نگاهی گذرا به فرآیند کامپایل و پیوند در C بیندازیم.

فرض کنید در حالت اصلی، دو تابع f1 و f2 را فراخوانی کرده اید. تابع اصلی در فایل a1.c ذخیره می شود.

تابع f1 در فایل a2.c ذخیره می شود

تابع f2 در فایل a3.c ذخیره می شود

تمام این فایل ها، یعنی a1.c، a2.c و a3.c به کامپایلر داده می شود. خروجی آن فایل های شی مربوطه است که کد ماشین هستند.

مرحله بعدی ادغام همه این فایل های شی در یک فایل exe. با کمک لینکر است. پیوند دهنده تمام این فایل ها را با هم جمع می کند و فایل exe را تولید می کند.

در طول اجرای برنامه، یک برنامه لودر a.exe را برای اجرا در RAM بارگذاری می کند.

کامپایل و اجرای کد جاوا در جاوا VM

اجازه دهید به روند JAVA نگاه کنیم. در اصلی خود، دو روش f1 و f2 دارید.

  • روش اصلی در فایل a1.java ذخیره می شود
  • f1 در یک فایل به صورت a2.java ذخیره می شود
  • f2 در یک فایل به صورت a3.java ذخیره می شود

کامپایلر سه فایل را کامپایل کرده و 3 فایل .class متناظر را تولید می کند که از کد BYTE تشکیل شده است. برخلاف C، هیچ پیوندی انجام نمی شود.

جاوا VM یا ماشین مجازی جاوا روی رم قرار دارد. در حین اجرا، با استفاده از کلاس لودر، فایل های کلاس روی رم آورده می شوند. کد BYTE برای هر گونه نقض امنیتی تأیید شده است.

در مرحله بعد، موتور اجرایی بایت کد را به کد ماشین بومی تبدیل می کند. این درست در زمان تدوین است. این یکی از دلایل اصلی کند بودن جاوا است.

توجه داشته باشید: JITیا کامپایلر Just-in-time بخشی از ماشین مجازی جاوا (JVM) است. بخشی از کد بایت را تفسیر می کند که همزمان عملکرد مشابهی دارد.

چرا جاوا هم زبان تفسیری و هم زبان کامپایل شده است؟

زبان های برنامه نویسی به عنوان دسته بندی می شوند
  • زبان سطح بالاتر C ++، جاوا
  • زبان های سطح متوسط ​​به عنوان مثال سی
  • Level Level Language Ex Assembly
  • در نهایت پایین ترین سطح به عنوان زبان ماشین.

آ کامپایلربرنامه ای است که یک برنامه را از یک سطح زبان به سطح دیگر تبدیل می کند. مثال تبدیل برنامه ++C به کد ماشین.

کامپایلر جاوا کدهای جاوای سطح بالا را به بایت کد (که نوعی کد ماشین نیز هست) تبدیل می کند.

یک مترجمبرنامه ای است که یک برنامه را در یک سطح به زبان برنامه نویسی دیگر در سطح تبدیل می کند همان سطحمثال تبدیل برنامه جاوا به C ++

در جاوا، مولد کد Just In Time بایت کد را به کد ماشین بومی تبدیل می کند که در همان سطوح برنامه نویسی هستند.

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

چرا جاوا کند است؟

دو دلیل اصلی کندی جاوا هستند

  1. پیوند پویا:برخلاف C، هر بار که برنامه در جاوا اجرا می شود، پیوند در زمان اجرا انجام می شود.
  2. مترجم زمان اجرا:تبدیل کد بایت به کد ماشین بومی در زمان اجرا در جاوا انجام می شود که باعث کاهش سرعت می شود.

با این حال، آخرین نسخه جاوا تا حد زیادی به گلوگاه های عملکردی رسیدگی کرده است.

خلاصه:

  • JVM یا ماشین مجازی جاوا موتوری است که کد جاوا را هدایت می کند. بایت کد جاوا را به زبان ماشین تبدیل می کند.
  • در JVM، کد جاوا به کد بایت کامپایل می شود. این بایت کد در ماشین های مختلف تفسیر می شود
  • JIT یا کامپایلر Just-in-time بخشی از ماشین مجازی جاوا (JVM) است. برای سرعت بخشیدن به زمان اجرا استفاده می شود
  • در مقایسه با سایر ماشین های کامپایلر، جاوا ممکن است در اجرا کند باشد.
JVM (ماشین مجازی جاوا) قلب زبان برنامه نویسی جاوا است. محیط جاوا از پنج عنصر تشکیل شده است:
■ زبان جاوا
■ تعریف بایت کد
■ کتابخانه های کلاس جاوا / Sun
■ ماشین مجازی جاوا
■ ساختار فایل .class

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

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

1.3.1 ماشین مجازی جاوا چیست؟

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

کامپایلر کد منبع را به کدی تبدیل می کند که بر اساس یک سیستم دستوری رایانه ای خیالی است و به ویژگی های پردازنده بستگی ندارد. مفسر برنامه ای است که این جریان دستورات را درک می کند و این دستورات را برای سخت افزار مورد استفاده که مفسر به آن تعلق دارد ترجمه می کند. JVM یک سیستم پشتیبانی اجرا را به صورت داخلی ایجاد می کند که به اجرای کد کمک می کند
■ آپلود فایل های .class،
■ مدیریت حافظه
■ انجام رسیدگی به استثنا.

به دلیل ناهماهنگی پلتفرم های سخت افزاری، ماشین مجازی از مفهوم پشته استفاده می کند که حاوی اطلاعات زیر است:
■ توصیفگرهای حالت روش
■ به کدهای بایت عمل می کند
■ پارامترهای روش
■ متغیرهای محلی

هنگامی که کد توسط JVM اجرا می شود، یک ثبات خاص وجود دارد که به عنوان شمارنده برای نشان دادن اینکه کدام دستورات در حال اجرا هستند استفاده می شود. در صورت لزوم، دستورات برنامه را تغییر می دهند، جریان اجرا را تغییر می دهند، در غیر این صورت جریان متوالی است و از یک دستور به دستور دیگر می رود.

مفهوم دیگری که در حال محبوب شدن است استفاده از یک کامپایلر Just In Time (JIT) است. مرورگرهایی مانند Netscape Navigator 4.0 و Internet Explorer 4.0 شامل کامپایلرهای JIT هستند که اجرای کد جاوا را سرعت می بخشند. هدف اصلی JIT تبدیل مجموعه دستورات بایت کد به دستورات کد ماشینی است که به یک ریزپردازنده خاص هدف گذاری شده است. هر زمان که درخواستی به این روش خاص داده شود، این دستورات ذخیره می شوند و استفاده می شوند.

1.3.2 زمان اجرا جاوا

JRE (Java Runtime Environment) JVM که از یک طرف با سخت افزار و از طرف دیگر با یک برنامه تعامل دارد. JRE کد کامپایل شده برای JVM را اجرا می کند:
در حال بارگیری فایل های .class
اجرا شده توسط "Class Loader"
کلاس loader یک بررسی امنیتی انجام می دهد که آیا فایل ها در شبکه در حال استفاده هستند.
بررسی بایت کد
انجام شده توسط "تأیید کننده بایت کد"
تأییدکننده بایت کد، فرمت کد، تبدیل نوع شیء را بررسی می کند و نقض دسترسی را بررسی می کند.
اجرای کد
اجرا شده توسط "مترجم در زمان اجرا"
مفسر بایت کدها را اجرا می کند و در مورد تجهیزات مورد استفاده پرس و جو می کند.


شکل 1.3: زمان اجرا جاوا

1.3.3 مدیریت استثنا و مدیریت حافظه

در C، C ++ یا پاسکال، برنامه نویسان از روش های ابتدایی برای تخصیص و آزادسازی بلوک های حافظه استفاده می کردند - حافظه پشته. حافظه پویا یک تکه بزرگ از حافظه است که به مقدار کل حافظه نشان داده می شود.

حافظه پویا استفاده می شود:
لیست بلوک رایگان
لیست بلوک های توزیع شده

لیست رایگان هر زمان که درخواستی ارائه شود، یک بلوک از حافظه را بررسی می کند. مکانیسم تخصیص "روش بلوک اول برازش" است که به موجب آن اولین کوچکترین بلوک حافظه بسته به درخواست تخصیص می یابد. این روش مقدار کمی از حافظه را با اندازه های مختلف از هیپ اختصاص داده و آزاد می کند، در حالی که تکه تکه شدن پشته را به حداقل می رساند.

مرحله ای وجود دارد که از طریق آن یک درخواست حافظه ایجاد می شود - برای به دست آوردن یک بلوک حافظه بزرگتر از آنچه در دسترس است. در چنین مواردی، مدیر پشته باید حافظه بیشتری ایجاد کند. این تکنیک فشرده سازی نامیده می شود. این فرآیندی است که طی آن تمام بلوک‌های رایگان موجود حافظه با هم ادغام می‌شوند و حافظه آزاد را به یک انتهای پشته منتقل می‌کنند و در نتیجه یک بلوک بزرگ از حافظه ایجاد می‌کنند.

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

حافظه پویا - مدیریت استثناهای حافظه پویا را انجام نمی دهد، که تمام خصوصیات کلاس، استخر پایدار و جداول متد را حفظ می کند.

پشته دوم دوباره به دو بخش تقسیم می شود که در صورت نیاز می توان آن ها را در جهت مخالف گسترش داد. یک بخش برای ذخیره اشیاء نمونه و بخش دیگر برای ذخیره توصیفگرهای این نمونه ها استفاده می شود. توصیفگر ساختاری است که از دو نشانگر تشکیل شده است. به جدول روش یک شی و موارد دیگر به نمونه ای از آن شی اشاره کنید. این قرارگیری اساساً نیاز به حفظ مسیرهای شی را هنگام اصلاح نشانگرها پس از فشرده سازی حذف می کند. تنها کاری که باید انجام دهیم این است که مقدار نشانگر دسته را به روز کنیم.

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

جمع‌آورنده استثنا قبل از جمع‌آوری یک شی نمونه با استفاده از مدیریت استثنا، متد پایان‌دهنده را فراخوانی می‌کند. روش پایان‌دهنده برای پاکسازی منابع خارجی مانند فایل‌ها و جریان‌هایی استفاده می‌شود که باز هستند و در رسیدگی استاندارد استثنایی به آنها توجهی نمی‌شود. حتی اگر به صراحت مدیریت استثنا را با متد (System.gc ()) فراخوانی کنیم، به سرعت کار نخواهد کرد. فقط قرار است کار کند همچنین به این معنی است که نمی توان از مدیریت استثنا استفاده کرد. این به این دلیل است که رشته های مدیریت استثنا با اولویت بسیار پایین اجرا می شوند و می توانند به طور مکرر قطع شوند. این می تواند زمانی اتفاق بیفتد که شی ما قبلاً هرگز در حافظه قرار نداشته باشد.

مقالات مرتبط برتر