JavaRush /جاوا بلاگ /Random-SD /جاوا ايپليڪيشنن کي گڏ ڪرڻ ۽ ان تي عمل ڪرڻ
Павел Голов
سطح
Москва

جاوا ايپليڪيشنن کي گڏ ڪرڻ ۽ ان تي عمل ڪرڻ

گروپ ۾ شايع ٿيل

مواد:

  1. تعارف
  2. بائيٽ ڪوڊ کي گڏ ڪرڻ
  3. پروگرام جي تاليف ۽ عمل جو مثال
  4. هڪ مجازي مشين تي هڪ پروگرام هلائڻ
  5. صرف وقت ۾ (JIT) تاليف
  6. نتيجو
جاوا ايپليڪيشنن کي گڏ ڪرڻ ۽ ان تي عمل ڪرڻ هود جي تحت - 1

1. تعارف

هيلو سڀ! اڄ مان ڄاڻڻ چاهيان ٿو ته JVM (جاوا ورچوئل مشين) جي هود هيٺ ڇا ٿئي ٿو جڏهن اسان جاوا لکيل ايپليڪيشن هلائڻ کان پوءِ. اڄڪلهه، رجحاناتي ترقي وارا ماحول آهن جيڪي توهان جي مدد ڪن ٿا JVM جي اندروني بابت سوچڻ کان بچڻ، جاوا ڪوڊ کي گڏ ڪرڻ ۽ عمل ڪرڻ، جيڪي نوان ڊولپرز کي انهن اهم حصن کي وڃائڻ جو سبب بڻائين ٿا. ساڳئي وقت، هن موضوع بابت سوال اڪثر انٽرويو دوران پڇيا ويا آهن، ڇو ته مون هڪ مضمون لکڻ جو فيصلو ڪيو.

2. بائيٽ ڪوڊ کي گڏ ڪرڻ

2
اچو ته نظريي سان شروع ڪريون. جڏهن اسان ڪا به ايپليڪيشن لکندا آهيون، اسان هڪ ايڪسٽينشن سان هڪ فائل ٺاهيندا آهيون .java۽ ان ۾ جاوا پروگرامنگ ٻولي ۾ ڪوڊ رکون ٿا. اهڙي فائل جنهن ۾ انساني پڙهڻ جي قابل ڪوڊ هجي ان کي سورس ڪوڊ فائل چئبو آهي . هڪ دفعو سورس ڪوڊ فائل تيار آهي، توهان کي ان تي عمل ڪرڻو پوندو! پر اسٽيج تي اهو معلومات تي مشتمل آهي صرف انسانن کي سمجهي سگهجي ٿو. جاوا هڪ گھڻن پليٽ فارم پروگرامنگ ٻولي آهي. ان جو مطلب اهو آهي ته جاوا ۾ لکيل پروگرامن کي ڪنهن به پليٽ فارم تي عمل ڪري سگهجي ٿو جنهن ۾ هڪ وقف جاوا رن ٽائم سسٽم نصب ٿيل آهي. هن سسٽم کي جاوا ورچوئل مشين (JVM) سڏيو ويندو آهي. هڪ پروگرام جو سورس ڪوڊ مان ڪوڊ ۾ ترجمو ڪرڻ لاءِ جيڪو JVM سمجهي سگهي ٿو، توهان کي ان کي گڏ ڪرڻ جي ضرورت آهي. ڪوڊ جيڪو JVM سمجهي ٿو ان کي بائيٽ ڪوڊ سڏيو ويندو آهي ۽ ان ۾ هدايتن جو هڪ سيٽ شامل آهي جنهن کي ورچوئل مشين بعد ۾ عمل ڪندي. بائيٽ ڪوڊ ۾ ماخذ ڪوڊ گڏ ڪرڻ لاءِ، اتي ھڪڙو گڏ ڪندڙ آھي جيڪو javacJDK (جاوا ڊولپمينٽ کٽ) ۾ شامل آھي. ان پٽ جي طور تي، ڪمپيلر هڪ فائل کي ايڪسٽينشن سان قبول ڪندو آهي .java، جنهن ۾ پروگرام جو سورس ڪوڊ هوندو آهي، ۽ آئوٽ پُٽ جي طور تي، اهو ايڪسٽينشن سان گڏ هڪ فائيل ٺاهيندو آهي .class، جنهن ۾ پروگرام کي ورچوئل مشين ذريعي هلائڻ لاءِ ضروري بائيٽ ڪوڊ شامل هوندو آهي. هڪ دفعو هڪ پروگرام بائيٽ ڪوڊ ۾ مرتب ڪيو ويو آهي، اهو هڪ مجازي مشين استعمال ڪندي عمل ڪري سگهجي ٿو.

3. پروگرام جي تاليف ۽ عمل جو مثال

فرض ڪريو اسان وٽ ھڪڙو سادو پروگرام آھي، ھڪڙي فائل ۾ موجود آھي Calculator.java، جيڪو 2 عددي ڪمانڊ لائن دليلن کي وٺي ٿو ۽ انھن جي اضافي جو نتيجو پرنٽ ڪري ٿو:
class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
هن پروگرام کي بائيٽ ڪوڊ ۾ گڏ ڪرڻ لاءِ، اسان javacڪمانڊر لائن تي ڪمپلر استعمال ڪنداسين:
javac Calculator.java
تاليف ڪرڻ کان پوء، اسان کي بائيٽ ڪوڊ سان گڏ هڪ آئوٽ جي طور تي هڪ فائل ملي ٿي Calculator.class، جنهن کي اسان ڪمانڊ لائن تي جاوا ڪمانڊ استعمال ڪندي پنهنجي ڪمپيوٽر تي نصب ڪيل جاوا مشين استعمال ڪري سگھون ٿا:
java Calculator 1 2
نوٽ ڪريو ته فائل جي نالي کان پوء، 2 ڪمانڊ لائن دليلن کي بيان ڪيو ويو آھي - نمبر 1 ۽ 2. پروگرام کي عمل ڪرڻ کان پوء، نمبر 3 ڪمان لائن تي ڏيکاريو ويندو. مٿين مثال ۾، اسان وٽ ھڪڙو سادي ڪلاس ھو جيڪو پنھنجي طور تي رھندو آھي. . پر ڇا جيڪڏهن ڪلاس ڪجهه پيڪيج ۾ آهي؟ اچو ته ھيٺ ڏنل صورتحال کي نقل ڪريون: ڊاريڪٽري ٺاھيو src/ru/javarush۽ پنھنجي ڪلاس کي اتي رکو. ھاڻي اھو ڏسڻ ۾ اچي ٿو (اسان فائل جي شروعات ۾ پيڪيج جو نالو شامل ڪيو آھي):
package ru.javarush;

class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
اچو ته اهڙي ڪلاس کي هيٺين ڪمانڊ سان گڏ ڪريون.
javac -d bin src/ru/javarush/Calculator.java
هن مثال ۾، اسان هڪ اضافي ڪمپيلر آپشن استعمال ڪيو آهي -d binجيڪو مرتب ڪيل فائلن کي ڊاريڪٽري ۾ رکي ٿو binڊاريڪٽري سان ملندڙ جلندڙ src، پر ڊاريڪٽري کي binاڳ ۾ ئي ٺاهيو وڃي. هي ٽيڪنڪ استعمال ڪيو ويندو آهي الجھن کان بچڻ لاءِ سورس ڪوڊ فائلن کي بائيٽ ڪوڊ فائلن سان. مرتب ڪيل پروگرام کي هلائڻ کان اڳ، اهو تصور جي وضاحت ڪرڻ جي قابل آهي classpath. Classpathاهو رستو آهي جنهن سان واسطو رکندڙ ورچوئل مشين پيڪيجز ۽ مرتب ڪيل طبقن کي ڏسندي. اهو آهي، هن طريقي سان اسين ورچوئل مشين کي ٻڌايون ٿا ته فائل سسٽم ۾ ڪهڙيون ڊائريڪٽريون جاوا پيڪيج جي درجي بندي جو روٽ آهن. Classpathجھنڊو استعمال ڪندي پروگرام شروع ڪرڻ وقت بيان ڪري سگھجي ٿو -classpath. اسان حڪم استعمال ڪندي پروگرام شروع ڪيو:
java -classpath ./bin ru.javarush.Calculator 1 2
هن مثال ۾، اسان کي ڪلاس جو پورو نالو گهربل آهي، جنهن ۾ پيڪيج جو نالو جنهن ۾ اهو رهي ٿو. آخري فائيل وڻ هن طرح ڏسڻ ۾ اچي ٿو:
├── src
│     └── ru
│          └── javarush
│                  └── Calculator.java
└── bin
      └── ru
           └── javarush
                   └── Calculator.class

4. ورچوئل مشين ذريعي پروگرام جو عمل

سو، اسان لکيل پروگرام شروع ڪيو. پر ڇا ٿيندو جڏهن هڪ مرتب ڪيل پروگرام هڪ ورچوئل مشين ذريعي شروع ڪيو وڃي؟ پهرين، اچو ته اهو سمجهون ته تاليف ۽ ڪوڊ جي تشريح جا مفهوم ڇا آهن. Compilation هڪ پروگرام جو ترجمو آهي جيڪو اعليٰ سطحي ماخذ ٻوليءَ ۾ لکيل هڪ برابر پروگرام کي گهٽ-سطح واري ٻولي ۾ مشين ڪوڊ سان ملندڙ جلندڙ آهي. تشريح هڪ آپريٽر پاران بيان آهي (حڪم-طرف-لائن، لائن-بائي-لائن) تجزيو، پروسيسنگ ۽ فوري طور تي منبع پروگرام يا درخواست جي عمل (جيئن ته تاليف جي مخالفت، جنهن ۾ پروگرام ان کي عمل ڪرڻ کان سواء ترجمو ڪيو ويندو آهي). جاوا ٻوليءَ ۾ هڪ ڪمپيلر ( javac) ۽ هڪ مترجم ٻئي آهن، جيڪا هڪ ورچوئل مشين آهي جيڪا بائيٽ ڪوڊ کي مشين ڪوڊ لائين ۾ تبديل ڪري ٿي ۽ فوري طور تي ان تي عمل ڪري ٿي. اهڙيء طرح، جڏهن اسان هڪ مرتب ڪيل پروگرام کي هلائيندا آهيون، مجازي مشين ان جي تشريح ڪرڻ شروع ڪري ٿي، اهو آهي، بائيٽ ڪوڊ کي مشين ڪوڊ ۾ لائن-بائي-لائن تبديل ڪرڻ، انهي سان گڏ ان جي عمل کي. بدقسمتي سان، خالص بائيٽ ڪوڊ تعبير هڪ ڊگهو عمل آهي ۽ جاوا کي پنهنجي مقابلي جي مقابلي ۾ سست ڪري ٿو. هن کان بچڻ لاء، هڪ ميڪانيزم متعارف ڪرايو ويو بائيٽ ڪوڊ جي تفسير کي تيز ڪرڻ لاء مجازي مشين ذريعي. ھن ميکانيزم کي Just-in-time compilation (JITC) چئبو آھي.

5. Just-in-time (JIT) تاليف

سادي اصطلاحن ۾، Just-In-Time گڏ ڪرڻ جو ميکانيزم هي آهي: جيڪڏهن پروگرام ۾ ڪوڊ جا حصا آهن جن تي ڪيترائي ڀيرا عمل ڪيو وڃي ٿو، ته پوءِ انهن کي هڪ ڀيرو مشين ڪوڊ ۾ مرتب ڪري سگهجي ٿو ته جيئن مستقبل ۾ انهن جي عمل کي تيز ڪري سگهجي. پروگرام جي اهڙي حصي کي مشين ڪوڊ ۾ مرتب ڪرڻ کان پوءِ، پروگرام جي هن حصي کي ايندڙ هر ايندڙ ڪال سان، ورچوئل مشين ان جي تشريح ڪرڻ بجاءِ مرتب ڪيل مشين ڪوڊ کي فوري طور تي عمل ۾ آڻيندي، جيڪو قدرتي طور تي پروگرام جي عمل کي تيز ڪندو. پروگرام کي تيز ڪرڻ ميموري جي استعمال کي وڌائڻ سان حاصل ڪيو ويندو آهي (اسان کي گڏ ڪيل مشين ڪوڊ کي ڪٿي ذخيرو ڪرڻ جي ضرورت آهي!) ۽ پروگرام جي عمل جي دوران گڏ ڪرڻ تي خرچ ٿيل وقت کي وڌائڻ سان. JIT تاليف هڪ بلڪه پيچيده ميکانيزم آهي، تنهنڪري اچو ته مٿي تي وڃو. مشين ڪوڊ ۾ بائيٽ ڪوڊ جي JIT تاليف جا 4 سطحون آھن. تالیف جي سطح جيترو اعلي، اهو وڌيڪ پيچيده آهي، پر ساڳئي وقت اهڙي سيڪشن جو عمل هيٺين سطح سان سيڪشن جي ڀيٽ ۾ تيز ٿيندو. JIT - مرتب ڪندڙ اهو فيصلو ڪري ٿو ته هر پروگرام جي ٽڪڙي لاءِ ڪهڙي ڪمپليشن ليول کي مقرر ڪيو وڃي ان بنياد تي ته اهو ٽڪڙو ڪيتري وقت تي عمل ۾ اچي ٿو. هود جي تحت، JVM استعمال ڪري ٿو 2 JIT مرتب ڪندڙ - C1 ۽ C2. C1 مرتب ڪندڙ کي ڪلائنٽ ڪمپلر پڻ سڏيو ويندو آهي ۽ صرف 3rd سطح تائين ڪوڊ گڏ ڪرڻ جي قابل آهي. C2 مرتب ڪندڙ 4th، سڀ کان وڌيڪ پيچيده ۽ تيز ترين تاليف جي سطح لاء ذميوار آهي.
جاوا ايپليڪيشنن کي گڏ ڪرڻ ۽ ان تي عمل ڪرڻ هود جي تحت - 3
مٿين مان، اسان اهو نتيجو ڪري سگهون ٿا ته سادي ڪلائنٽ ايپليڪيشنن لاء، اهو استعمال ڪرڻ وڌيڪ فائدي وارو آهي C1 ڪمپلر، ڇو ته هن معاملي ۾ اهو اسان لاء ضروري آهي ته ايپليڪيشن ڪيئن جلدي شروع ٿئي. سرور جي پاسي، ڊگھي زندگي گذارڻ واري ايپليڪيشنن کي شروع ڪرڻ ۾ وڌيڪ وقت وٺي سگھي ٿو، پر مستقبل ۾ انھن کي ڪم ڪرڻ گھرجي ۽ پنھنجي ڪم کي جلدي انجام ڏيڻ گھرجي - ھتي C2 گڏ ڪرڻ وارو اسان لاء مناسب آھي. جڏهن JVM جي x32 ورزن تي جاوا پروگرام هلائي رهيا آهيون، اسان دستي طور تي وضاحت ڪري سگهون ٿا ته اسان ڪهڙي موڊ کي استعمال ڪرڻ چاهيون ٿا -client۽ پرچم استعمال ڪندي -server. جڏهن هي پرچم بيان ڪيو ويو آهي، -clientJVM پيچيده بائيٽ ڪوڊ اصلاحن کي انجام نه ڏيندو، جيڪو ايپليڪيشن جي شروعاتي وقت کي تيز ڪندو ۽ استعمال ڪيل ميموري جي مقدار کي گھٽائيندو. جڏهن پرچم جي وضاحت ڪندي، -serverايپليڪيشن پيچيده بائيٽ ڪوڊ اصلاحن جي ڪري شروع ٿيڻ ۾ گهڻي وقت وٺندي ۽ مشين ڪوڊ کي ذخيرو ڪرڻ لاءِ وڌيڪ ميموري استعمال ڪندي، پر پروگرام مستقبل ۾ تيزيءَ سان هلندو. JVM جي x64 ورزن ۾، پرچم کي -clientنظر انداز ڪيو ويو آھي ۽ ايپليڪيشن سرور جي ترتيب کي ڊفالٽ طور استعمال ڪيو ويندو آھي.

6. نتيجو

اهو منهنجو مختصر جائزو ختم ڪري ٿو ته جاوا ايپليڪيشن ڪيئن ڪم ڪرڻ ۽ عمل ڪرڻ. اهم نقطا:
  1. javac compiler هڪ پروگرام جي سورس ڪوڊ کي بائيٽ ڪوڊ ۾ تبديل ڪري ٿو جيڪو ڪنهن به پليٽ فارم تي عمل ڪري سگهجي ٿو جنهن تي جاوا ورچوئل مشين نصب ٿيل آهي؛
  2. تاليف کان پوء، JVM نتيجو بائيٽ ڪوڊ جي وضاحت ڪري ٿو؛
  3. جاوا ايپليڪيشنن کي تيز ڪرڻ لاءِ، JVM هڪ Just-In-Time ڪمپليشن ميڪانيزم استعمال ڪري ٿو جيڪو هڪ پروگرام جي اڪثر ايگزيڪيوٽو ڪيل حصن کي مشين ڪوڊ ۾ تبديل ڪري ٿو ۽ انهن کي ميموري ۾ محفوظ ڪري ٿو.
مون کي اميد آهي ته هي آرٽيڪل توهان کي وڌيڪ ڄاڻ حاصل ڪرڻ ۾ مدد ڪئي آهي ته اسان جي پسنديده پروگرامنگ ٻولي ڪيئن ڪم ڪري ٿي. پڙهڻ لاءِ مهرباني، تنقيد ڀلي ڪري آيا!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION