JavaRush /جاوا بلاگ /Random-SD /8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو. حصو 1

8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو. حصو 1

گروپ ۾ شايع ٿيل
ڪتن، هيلو هرڪو)) سو، اڄ اسان 2020 ۾ آهيون، ۽ جاوا 14 جي ڇڏڻ تائين تمام ٿورڙو باقي آهي. توهان کي 17 مارچ تي مڪمل ٿيل ورزن جي توقع ڪرڻ گهرجي، اسان تجزيو ڪنداسين ته حقيقت کان پوءِ اتي ڇا تازو ۽ دلچسپ آهي، پر اڄ مان جاوا جي پوئين ورزن تي پنهنجي يادگيري کي تازو ڪرڻ چاهيان ٿو. هنن اسان کي ڪهڙو نئون آندو؟ اچو ته هڪ نظر وٺو. اچو ته جائزو شروع ڪريون جاوا 8 سان، ڇو ته اهو اڃا تائين ڪافي لاڳاپيل آهي ۽ اڪثر منصوبن ۾ استعمال ٿيندو آهي. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 1 - 1اڳي، نوان ورجن هر 3-5 سالن ۾ جاري ڪيا ويندا هئا، پر تازو Oracle هڪ مختلف طريقو اختيار ڪيو آهي - "نئون جاوا هر ڇهن مهينن ۾." ۽ ائين، هر ڇهن مهينن ۾ اسان خاصيتن جي ڇڏڻ کي ڏسندا آهيون. ڇا اهو سٺو يا خراب آهي، هرڪو ان کي مختلف طور تي ڏسي ٿو. مثال طور، مون کي اهو تمام گهڻو پسند نه آهي، ڇاڪاڻ ته نئين نسخن ۾ ڪيتريون ئي نيون خاصيتون نه هونديون آهن، پر ساڳئي وقت، ورجن مينهن کان پوء مشروم وانگر وڌي رهيا آهن. مون جاوا 8 سان گڏ هڪ پروجيڪٽ تي ٻه ڀيرا چمڪيو، ۽ جاوا 16 اڳ ۾ ئي جاري ڪيو ويو هو (پر جڏهن اهو گهٽ ۾ گهٽ نڪرندو آهي، نون خاصيتون جمع ٿينديون آهن، ۽ آخر ۾ اهو واقعو ڊگهي انتظار ۾ آهي، موڪلن وانگر: هرڪو بحث ڪري رهيو آهي. نيون شيون ۽ توهان ان کي پاس نه ٿا ڪري سگهو). سو اچو ته شروع ڪريون!

جاوا 8

فنڪشنل انٽرفيس

هي ڇا آهي؟ هڪ فنڪشنل انٽرفيس هڪ انٽرفيس آهي جنهن ۾ هڪ غير لاڳو ٿيل (خلاصو) طريقو شامل آهي. @FunctionalInterface هڪ اختياري تشريح آهي جيڪا اهڙي انٽرفيس جي مٿان رکيل آهي. چيڪ ڪرڻ جي ضرورت آهي ته ڇا اهو هڪ فنڪشنل انٽرفيس جي گهرجن کي پورو ڪري ٿو (صرف هڪ خلاصو طريقو آهي). پر هميشه وانگر، اسان وٽ ڪجهه احتياط آهن: ڊفالٽ ۽ جامد طريقا انهن گهرجن جي تحت نه ٿا اچن. تنهن ڪري، اهڙا ڪيترائي طريقا ٿي سگهن ٿا + هڪ خلاصو هڪ، ۽ انٽرفيس فنڪشنل ٿيندو. اهو شايد آبجیکٹ ڪلاس جا طريقا به شامل ڪري سگھن ٿا جيڪي انٽرفيس جي فعل جي تعريف کي متاثر نٿا ڪن. مان ڊفالٽ ۽ جامد طريقن بابت ڪجھ لفظ شامل ڪندس:
  1. ڊفالٽ موڊيفائر سان طريقا توهان کي اجازت ڏين ٿا ته توهان نوان طريقا شامل ڪرڻ جي انٽرفيس ۾ بغير ڪنهن موجوده عمل کي ٽوڙڻ جي.

    public interface Something {
      default void someMethod {
          System.out.println("Some text......");
      }
    }

    ها، ها، اسان انٽرفيس ۾ لاڳو ٿيل طريقو شامل ڪندا آهيون، ۽ جڏهن هن طريقي تي عمل ڪيو وڃي، توهان ان کي ختم نه ٿا ڪري سگهو، پر ان کي وراثت طور استعمال ڪريو. پر جيڪڏهن ڪو ڪلاس ٻن انٽرفيس کي ڏنل طريقي سان لاڳو ڪري ٿو، ته اسان وٽ هڪ تالیف جي غلطي هوندي، ۽ جيڪڏهن اهو انٽرفيس کي لاڳو ڪري ٿو ۽ هڪ مخصوص هڪجهڙائي واري طريقي سان ڪلاس کي ورثي ۾ ڏئي ٿو، ته والدين طبقي جو طريقو انٽرفيس جي طريقن کي اوورليپ ڪندو ۽ استثنا ڪم نه ڪندو.

  2. هڪ انٽرفيس ۾ جامد طريقا ڪم ڪن ٿا ساڳيا ڪلاس ۾ جامد طريقا. نه وساريو: توهان جامد طريقا وارث نٿا ڪري سگهو، جيئن توهان نسلي طبقي مان جامد طريقو نه ٿا سڏي سگهو.

تنهن ڪري، فنڪشنل انٽرفيس بابت ڪجهه وڌيڪ لفظ ۽ اچو ته اڳتي وڌون. هتي FIs جون مکيه فهرستون آهن (باقي انهن جون قسمون آهن):

    Predicate - ڪجھ قدر T وٺي ٿو ھڪڙي دليل جي طور تي، موٽائي ٿو بوليان.

    مثال:boolean someMethod(T t);

  • صارف - ٽائيپ ٽائيپ جو دليل وٺندو آهي، ڪجھ به نه موٽائي ٿو (باطل).

    مثال:void someMethod(T t);

  • فراهم ڪرڻ وارو - ان پٽ جي طور تي ڪجھ به نه وٺندو آهي، پر ڪجهه قدر واپس ڪري ٿو T.

    مثال:T someMethod();

  • فنڪشن - ان پٽ جي طور تي ٽائپ جو هڪ پيٽرولر وٺي ٿو، آر جي قسم جي قيمت ڏي ٿو.

    مثال:R someMethod(T t);

  • UnaryOperator - هڪ T دليل وٺندو آهي ۽ ٽائيپ جي قيمت ڏي ٿو.

    مثال:T someMethod(T t);

وهڪرو

اسٽريمز هڪ فنڪشنل انداز ۾ ڊيٽا جي جوڙجڪ کي سنڀالڻ جو هڪ طريقو آهي. عام طور تي اهي مجموعا آهن (پر توهان انهن کي ٻين، گهٽ عام حالتن ۾ استعمال ڪري سگهو ٿا). وڌيڪ سمجھڻ واري ٻولي ۾، اسٽريم ھڪڙو ڊيٽا اسٽريم آھي جنھن کي اسين پروسيس ڪريون ٿا ڄڻ ھڪڙي ئي وقت سڀني ڊيٽا سان ڪم ڪري رھيا آھيون، ۽ طاقت سان نه، جيئن ھر ھڪ لاءِ. اچو ته هڪ ننڍڙو مثال ڏسو. اچو ته چئو ته اسان وٽ انگن جو هڪ سيٽ آهي جنهن کي اسين فلٽر ڪرڻ چاهيون ٿا (50 کان گهٽ)، 5 کان وڌايو، ۽ پهرين 4 نمبرن کي آئوٽ ڪيو باقي انهن مان ڪنسول ڏانهن. اسان اڳ ۾ اهو ڪيئن ڪيو ها:
List<Integer> list = Arrays.asList(46, 34, 24, 93, 91, 1, 34, 94);

int count = 0;

for (int x : list) {

  if (x >= 50) continue;

  x += 5;

  count++;

  if (count > 4) break;

  System.out.print(x);

}
اتي گهڻو ڪوڊ نٿو لڳي، ۽ منطق اڳ ۾ ئي ٿورو پريشان آهي. اچو ته ڏسو ته اهو وهڪرو استعمال ڪندي ڪيئن نظر ايندو:
Stream.of(46, 34, 24, 93, 91, 1, 34, 94)

      .filter(x -> x < 50)

      .map(x -> x + 5)

      .limit(4)

      .forEach(System.out::print);
اسٽريمز زندگي کي تمام آسان بڻائي ٿو ڪوڊ جي مقدار کي گهٽائڻ ۽ ان کي وڌيڪ پڙهڻ جي قابل بڻائي. انهن لاءِ جيڪي هن موضوع تي وڌيڪ تفصيل سان غور ڪرڻ چاهيندا آهن، هتي هڪ سٺو آهي (مان به چوان ها ته شاندار) مضمون هن موضوع تي .

لمبدا

شايد سڀ کان اهم ۽ ڊگهي انتظار جي خصوصيت lambdas جي ظاهر آهي. lambda ڇا آهي؟ هي ڪوڊ جو هڪ بلاڪ آهي جنهن کي چوڌاري مختلف هنڌن تي منتقل ڪري سگهجي ٿو، تنهنڪري ان کي بعد ۾ عمل ڪري سگهجي ٿو جيترو وقت گهربل. آواز ڏاڍو مونجهارو، آهي نه؟ سادي لفظ ۾، lambdas استعمال ڪندي، توهان هڪ فنڪشنل انٽرفيس جو هڪ طريقو لاڳو ڪري سگهو ٿا (هڪ قسم جو هڪ گمنام طبقي تي عمل درآمد):
Runnable runnable = () -> { System.out.println("I'm running !");};

new Thread(runnable).start();
اسان رن () طريقو تڪڙو ۽ غير ضروري ڳاڙهي ٽيپ جي بغير لاڳو ڪيو. ۽ ها: هلائڻ وارو هڪ فنڪشنل انٽرفيس آهي. مان لامبڊاس پڻ استعمال ڪريان ٿو جڏهن اسٽريمز سان ڪم ڪري رهيو آهيان (جيئن مٿين اسٽريمز سان مثالن ۾). اسان تمام گهڻي اونهائي نه وينداسين، ڇو ته توهان تمام گهڻي کوٽائي ڪري سگهو ٿا، مان ڪجهه لنڪس ڇڏي ڏيندس ته جيئن اهي ماڻهو جيڪي اڃا تائين دل کي کوٽي رهيا آهن اهي وڌيڪ کوٽي سگهن:

هر هڪ لاءِ

جاوا 8 وٽ ھڪڙو نئون اڳوڻو آھي جيڪو ڪم ڪري ٿو ھڪڙي ڊيٽا اسٽريم وانگر ھڪڙو وهڪرو. هتي هڪ مثال آهي:
List<Integer> someList = Arrays.asList(1, 3, 5, 7, 9);

someList.forEach(x -> System.out.println(x));
(someList.stream().foreach(…))

طريقو حوالو

حوالا طريقا ھڪڙو نئون، مفيد نحو آھي جيڪو موجوده طريقن يا جاوا طبقن يا شين جي ٺاھيندڙن جو حوالو ڏيڻ لاءِ ٺاھيو ويو آھي:: طريقن جا حوالا چار قسمن ۾ اچن ٿا:
  1. ڊزائنر سان ڳنڍيل:

    SomeObject obj = SomeObject::new

  2. جامد طريقو حوالو:

    SomeObject::someStaticMethod

  3. هڪ خاص قسم جي اعتراض جي غير جامد طريقي جو حوالو:

    SomeObject::someMethod

  4. هڪ خاص اعتراض جي باقاعده (غير جامد) طريقي جو حوالو

    obj::someMethod

گهڻو ڪري، طريقن جا حوالا ليمبڊاس جي بدران اسٽريمز ۾ استعمال ٿيندا آهن (حوالو طريقا ليمبڊاس کان تيز آهن، پر پڙهڻ جي قابليت ۾ گهٽ آهن).
someList.stream()

        .map(String::toUpperCase)

      .forEach(System.out::println);
انهن لاء جيڪي حوالن جي طريقن تي وڌيڪ معلومات چاهيندا آهن:

API وقت

تاريخن ۽ وقتن سان ڪم ڪرڻ لاءِ هڪ نئين لائبريري آهي - java.time. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 1 - 2نئون API ڪنهن به جودا-وقت سان ملندڙ جلندڙ آهي. هن API جا سڀ کان اهم حصا آهن:
  • مقامي تاريخ هڪ مخصوص تاريخ آهي، مثال طور - 2010-01-09؛
  • LocalTime - وقت جي حساب سان وقت زون - 19:45:55 (مقامي تاريخ جي مطابق)؛
  • LocalDateTime - combo LocalDate + LocalTime - 2020-01-04 15:37:47؛
  • ZoneId - وقت زون جي نمائندگي ڪري ٿو؛
  • گھڙي - هن قسم کي استعمال ڪندي توهان موجوده وقت ۽ تاريخ تائين رسائي ڪري سگهو ٿا.
هتي هن موضوع تي ڪجهه واقعي دلچسپ مضمون آهن:

اختياري

هي java.util پيڪيج ۾ هڪ نئون طبقو آهي ، هڪ قدر لفافي آهي جنهن جي چال اها آهي ته اهو پڻ محفوظ طور تي null تي مشتمل ٿي سگهي ٿو . اختياري وصول ڪرڻ: جيڪڏهن اسان Optional.ofOptional<String> someOptional = Optional.of("Something"); ۾ null پاس ڪريون ٿا ، اسان حاصل ڪنداسين اسان جي پسنديده NullPointerException . اهڙين حالتن لاءِ اهي استعمال ڪن ٿا: - هن طريقي ۾ توهان کي نال کان ڊڄڻ جي ضرورت ناهي. اڳيون، شروعاتي طور تي خالي اختياري ٺاھيو: چيڪ ڪرڻ لاءِ ته اھو خالي آھي، استعمال ڪريو: اسان ڏانھن صحيح يا غلط موٽندو. ھڪڙي خاص عمل کي انجام ڏيو جيڪڏھن ھڪڙي قدر آھي، ۽ ڪجھ به نه ڪريو جيڪڏھن ڪو قدر نه آھي: ھڪڙو ريورس طريقو جيڪو منظور ٿيل قدر واپس ڪري ٿو جيڪڏھن اختياري خالي آھي (بڪ اپ پلان جي ترتيب): توھان جاري ڪري سگھو ٿا تمام گھڻو، تمام ڊگھي وقت ( خوشقسمتيءَ سان، اختياري ٻنهي سخاوت وارن هٿن سان طريقا شامل ڪيا آهن) پر اسان ان تي نه رهنداسين. اهو بهتر آهي ته منهنجي لاءِ شروع ڪرڻ وارن لاءِ ڪجهه لنڪ ڇڏي ڏيان: Optional<String> someOptional = Optional.ofNullable("Something");Optional<String> someOptional = Optional.empty();someOptional.isPresent();someOptional.ifPresent(System.out::println);System.out.println(someOptional.orElse("Some default content")); اسان جاوا 8 ۾ سڀ کان وڌيڪ مشهور جدت تي ويا - اهو سڀ ڪجهه ناهي. جيڪڏھن توھان وڌيڪ ڄاڻڻ چاھيو ٿا، ته پوءِ مان توھان لاءِ ھي ڇڏي ڏنو:

جاوا 9

تنهن ڪري، سيپٽمبر 21، 2017 تي، دنيا ڏٺو JDK 9. هي Java 9 خاصيتن جي هڪ ڀرپور سيٽ سان اچي ٿو. جڏهن ته ڪو به نئون ٻولي تصور نه آهي، نئين APIs ۽ تشخيصي حڪمن کي يقيني طور تي ڊولپرز لاء دلچسپي هوندي. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 1 - 4

JShell (REPL - read-eval-print loop)

هي هڪ انٽرفيس ڪنسول جو جاوا عمل آهي جيڪو ڪارڪردگي کي جانچڻ ۽ ڪنسول ۾ مختلف تعميرات استعمال ڪرڻ لاءِ استعمال ڪيو ويندو آهي، جهڙوڪ انٽرفيس، ڪلاس، اينيم، آپريٽر وغيره. JShell شروع ڪرڻ لاء ، توهان کي صرف ٽرمينل ۾ jshell لکڻ جي ضرورت آهي. پوءِ اسان لکي سگھون ٿا جيڪو ڪجھ اسان جي تخيل جي اجازت ڏئي ٿو: 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 1 - 5JShell استعمال ڪندي، توھان ٺاھي سگھوٿا اعليٰ سطحي طريقا ۽ انھن کي ساڳي سيشن ۾ استعمال ڪريو. طريقا جامد طريقن وانگر ڪم ڪندا، سواءِ ان جي ته جامد لفظ کي ختم ڪري سگھجي ٿو. وڌيڪ پڙھو Java 9 REPL (JShell) مينوئل ۾ .

خانگي

جاوا جي ورزن 9 سان شروع ڪندي، اسان وٽ موقعا آھن پرائيويٽ طريقا استعمال ڪرڻ جو انٽرفيس ۾ (ڊفالٽ ۽ جامد طريقا، ڇاڪاڻ ته اسان صرف ناقص رسائي جي ڪري ٻين کي اوور رائڊ نٿا ڪري سگھون). private static void someMethod(){} try-with-resources ڪوشش سان گڏ وسيلن جي استثنا کي سنڀالڻ جي صلاحيت کي اپڊيٽ ڪيو ويو آهي:
BufferedReader reader = new BufferedReader(new FileReader("....."));
  try (reader2) {
  ....
}

ماڊلرٽي ( Jigsaw )

هڪ ماڊل لاڳاپيل پيڪيجز ۽ وسيلن جو هڪ گروپ آهي جنهن سان گڏ هڪ نئين ماڊل وضاحت ڪندڙ فائل آهي. اهو طريقو استعمال ڪيو ويندو آهي ڪوڊ جي ملائڻ کي ختم ڪرڻ لاء. لوز ڪپلنگ ڪوڊ برقرار رکڻ ۽ وڌائڻ لاءِ هڪ اهم عنصر آهي. ماڊليت مختلف سطحن تي لاڳو ڪئي وئي آهي:
  1. پروگرامنگ ٻولي.
  2. مجازي مشين.
  3. معياري جاوا API.
JDK 9 92 ماڊلز سان گڏ اچي ٿو: اسان انھن کي استعمال ڪري سگھون ٿا يا پنھنجو پاڻ ٺاھي سگھون ٿا. هتي ڪجهه ڳنڍيون آهن گہرائي ڏسڻ لاءِ:

اڻ مٽ مجموعو

جاوا 9 ۾، اهو ممڪن ٿيو ته هڪ لڪير سان گڏ هڪ مجموعو ٺاهي ۽ ڀريو، جڏهن ته ان کي ناقابل عمل بڻائي (اڳ ۾، هڪ ناقابل قابل مجموعو ٺاهڻ لاء، اسان کي گڏ ڪرڻ جي ضرورت هئي، ان کي ڊيٽا سان ڀريو، ۽ هڪ طريقو ڪال ڪريو، مثال طور، Collections.unmodifiableList). اهڙي تخليق جو هڪ مثال: List someList = List.of("first","second","third");

ٻيا جدت:

  • وڌايل اختياري (نئون طريقا شامل ڪيا ويا)؛
  • ProcessHandle ۽ ProcessHandle انٽرفيس ظاهر ٿيا آپريٽنگ سسٽم جي عملن کي ڪنٽرول ڪرڻ لاءِ؛
  • G1 - ڊفالٽ ڪچرو ڪليڪٽر؛
  • HTTP ڪلائنٽ ٻنهي HTTP/2 پروٽوڪول ۽ ويب ساکٽ جي مدد سان؛
  • وڌايل وهڪرو؛
  • شامل ٿيل Reactive Streams API فريم ورڪ (رد عمل پروگرامنگ لاءِ)؛
جاوا 9 ۾ وڌيڪ مڪمل وسرجن لاءِ، مان توهان کي پڙهڻ جي صلاح ڏيان ٿو:

جاوا 10

تنهن ڪري، جاوا 9 جي ڇڏڻ کان ڇهه مهينا، مارچ 2018 ۾ (مون کي ياد آهي ته ڪالهه وانگر)، جاوا 10 منظر تي آيو. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 1 - 6

var

هاڻي اسان کي ڊيٽا جو قسم مهيا ڪرڻ جي ضرورت ناهي. اسان پيغام کي var طور نشان لڳايو ۽ مرتب ڪندڙ پيغام جو قسم طئي ڪري ٿو ساڄي پاسي موجود ابتدائي ڪندڙ جي قسم سان. هي خصوصيت صرف مقامي متغيرن لاءِ هڪ ابتدائي ڪندڙ سان موجود آهي: اهو طريقو دليلن، واپسي جي قسمن، وغيره لاءِ استعمال نٿو ڪري سگهجي، ڇاڪاڻ ته قسم جي وضاحت ڪرڻ لاءِ ڪو به ابتدائي ڪندڙ نه آهي. مثال var (اسٽرنگ جي قسم لاءِ):
var message = "Some message…..";
System.out.println(message);
var هڪ لفظ نه آهي: اهو بنيادي طور تي هڪ محفوظ قسم جو نالو آهي، جهڙوڪ int . var جو فائدو وڏو آهي: قسم جا بيان تمام گهڻو ڌيان وٺندا آهن بغير ڪنهن فائدي جي، ۽ هي خاصيت وقت بچائيندو. پر ساڳئي وقت، جيڪڏهن هڪ متغير طريقن جي ڊگهي زنجير مان حاصل ڪيو وڃي، ڪوڊ گهٽ پڙهي سگهجي ٿو، ڇاڪاڻ ته اهو فوري طور تي واضح ناهي ته ڪهڙي قسم جو اعتراض آهي. انهن لاء وقف آهي جيڪي هن ڪارڪردگي سان وڌيڪ واقف ٿيڻ چاهيندا آهن:

JIT مرتب ڪندڙ (GraalVM)

اڳتي وڌڻ جي بغير، مان توهان کي ياد ڏيان ٿو ته جڏهن توهان javac ڪمانڊ هلائيندا آهيو، جاوا ايپليڪيشن جاوا ڪوڊ مان JVM bytecode ۾ مرتب ڪئي وئي آهي، جيڪا ايپليڪيشن جي بائنري نمائندگي آهي. پر هڪ باقاعده ڪمپيوٽر پروسيسر صرف JVM بائيٽ ڪوڊ تي عمل نٿو ڪري سگهي. توھان جي JVM پروگرام کي ڪم ڪرڻ لاءِ، توھان کي ھن بائيٽ ڪوڊ لاءِ ھڪ ٻئي ڪمپلر جي ضرورت آھي، جيڪو مشين ڪوڊ ۾ تبديل ٿئي ٿو جيڪو پروسيسر اڳ ۾ ئي استعمال ڪرڻ جي قابل آھي. javac جي مقابلي ۾، هي ڪمپلر تمام گهڻو پيچيده آهي، پر پڻ اعلي معيار جي مشين ڪوڊ پيدا ڪري ٿو. في الحال، OpenJDK HotSpot ورچوئل مشين تي مشتمل آهي، جنهن جي نتيجي ۾ ٻه مکيه JIT مرتب ڪندڙ آهن. پهريون، C1 ( ڪلائنٽ ڪمپلر )، تيز رفتار آپريشن لاء ٺهيل آهي، پر ڪوڊ اصلاح جو شڪار آهي. ٻيو آهي C2 (سرور ڪمپلر). عمل جي رفتار متاثر ٿئي ٿي، پر ڪوڊ وڌيڪ بهتر آهي. جڏهن استعمال ڪيو ويندو آهي؟ C1 ڊيسڪ ٽاپ ايپليڪيشنن لاءِ وڏو آهي جتي ڊگهي JIT رڪاوٽون ناپسنديده آهن، ۽ C2 ڊگھي هلندڙ سرور پروگرامن لاءِ بهترين آهي جتي ڪمپليشن تي وڌيڪ وقت خرچ ڪرڻ بلڪل قابل برداشت آهي. ملٽي سطحي تاليف اهو آهي جڏهن تاليف پهريون ڀيرو C1 ذريعي ٿئي ٿو، ۽ نتيجو C2 ذريعي وڃي ٿو (وڌيڪ اصلاح لاءِ استعمال ٿيل). GraalVM ھڪڙو منصوبو آھي جيڪو مڪمل طور تي هٽ اسپاٽ کي تبديل ڪرڻ لاءِ ٺاھيو ويو آھي. اسان Graal بابت ڪيترن ئي لاڳاپيل منصوبن جي باري ۾ سوچي سگهون ٿا: هڪ نئين JIT مرتب ڪندڙ HotSpot لاءِ ۽ هڪ نئين پوليگلوٽ ورچوئل مشين. هن JIT ڪمپيلر جي خاص ڳالهه اها آهي ته اهو جاوا ۾ لکيل آهي. Graal compiler جو فائدو حفاظت آهي، اهو آهي، حادثي نه، پر استثنا، نه ميموري ليک. اسان وٽ پڻ سٺي IDE سپورٽ هوندي، ۽ اسان ڊيبگر، پروفائيلرز يا ٻيا آسان اوزار استعمال ڪرڻ جي قابل هوندا. ان کان علاوه، گڏ ڪرڻ وارو شايد HotSpot کان آزاد ٿي سگهي ٿو، ۽ اهو پنهنجو پاڻ جو هڪ تيز JIT-مرتب ٿيل نسخو ٺاهي سگهندو. کوٽائي ڪندڙن لاءِ:

متوازي G1

G1 گاربيج ڪليڪٽر ٿڌو آهي، ڪو شڪ ناهي، پر ان ۾ پڻ هڪ ڪمزور نقطو آهي: اهو هڪ واحد ڌاڳو مڪمل GC چڪر انجام ڏئي ٿو. هڪ دفعي جڏهن توهان کي هارڊويئر جي تمام طاقت جي ضرورت آهي ته توهان غير استعمال ٿيل شيون ڳولڻ لاء گڏ ڪري سگهو ٿا، اسان هڪ واحد سلسلي تائين محدود آهيون. اهو جاوا 10 ۾ طئي ڪيو ويو هو. هاڻي GC انهن سڀني وسيلن سان ڪم ڪري ٿو جيڪي اسان ان ۾ شامل ڪيون ٿا (يعني اهو ملٽي ٿريڊ ٿي وڃي ٿو). هن کي حاصل ڪرڻ لاءِ، ٻولي ڊولپرز GC کان مکيه ذريعن جي الڳ ٿيڻ کي بهتر ڪيو آهي، GC لاءِ هڪ سٺو صاف انٽرفيس ٺاهي. هن پياري جي ڊولپرز، OpenJDK، خاص طور تي ڪوڊ ۾ ڊمپ کي صاف ڪرڻو پيو ته نه رڳو ممڪن طور تي نئين GCs جي تخليق کي آسان بڻائي، پر اهو پڻ ممڪن آهي ته اسيمبلي مان غير ضروري GCs کي جلدي بند ڪرڻ. ڪاميابي جي بنيادي معيارن مان هڪ آهي انهن سڀني سڌارن کان پوءِ آپريٽنگ اسپيڊ ۾ گهٽتائي جي غير موجودگي. اچو ته پڻ ڏسو: ٻيا جدت:
  1. ھڪڙو صاف ڪچرو ڪليڪٽر انٽرفيس متعارف ڪرايو ويو آھي. هي مختلف ڪچري جي جمع ڪندڙن کان ماخذ ڪوڊ جي الڳ ٿيڻ کي بهتر بڻائي ٿو، اهو ممڪن بڻائي ٿو ته متبادل گڏ ڪندڙن کي جلدي ۽ تڪليف سان ضم ڪرڻ؛
  2. JDK ذريعن کي هڪ مخزن ۾ گڏ ڪرڻ؛
  3. مجموعن کي هڪ نئون طريقو مليو آهي - ڪاپي آف (مجموعي) ، جيڪو هن مجموعن جي هڪ غير مٽائي ڪاپي موٽائي ٿو؛
  4. اختياري (۽ ان جي مختلف قسمن) ۾ ھڪڙو نئون طريقو آھي .orElseThrow() ;
  5. ھاڻي کان، JVMs کي خبر آھي ته اھي ھڪڙي ڊاکر ڪنٽينر ۾ ھلائي رھيا آھن ۽ ڪنٽينر جي مخصوص تشڪيل حاصل ڪندا بجاءِ پاڻ آپريٽنگ سسٽم کان پڇڻ جي.
جاوا 10 جي وڌيڪ تفصيلي تعارف لاءِ هتي ڪجهه وڌيڪ مواد آهن: مون کي ان حقيقت کان تمام گهڻو پريشان ٿيڻو هو ته جاوا جا ڪجهه ورجن 1.x سڏيندا هئا. مان صاف ٿيڻ چاهيان ٿو: جاوا ورزن 9 کان اڳ ۾ صرف هڪ مختلف نالي جي اسڪيم هئي. مثال طور، جاوا 8 کي 1.8 ، جاوا 5 - 1.5 وغيره پڻ سڏي سگھجي ٿو. ۽ ھاڻي اسان ڏسون ٿا ته جاوا 9 مان رليز ڏانھن منتقلي سان، نالو ڏيڻ واري اسڪيم پڻ تبديل ٿي چڪي آھي، ۽ جاوا ورجن ھاڻي 1.x سان اڳي ئي نه آھن. . هي پهرئين حصي جو پڄاڻي آهي: اسان جاوا 8-10 جي نئين دلچسپ خصوصيتن تي غور ڪيو. اچو ته اسان جي واقفيت کي ايندڙ پوسٽ ۾ تازو سان جاري رکون .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION