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

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

گروپ ۾ شايع ٿيل
هي آرٽيڪل جاوا ورزن 8-13 ۾ جدت جي منهنجي جائزي جو ٻيو حصو آهي. پهريون حصو هتي آهي . وڌيڪ اشتهارن جي بغير، اچو ته اڳتي وڌو: سيپٽمبر 25، 2018 تائين، جڏهن نئون JDK جاري ڪيو ويو:

جاوا 11

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

var (لمبدا ۾)

ھاڻي کان وٺي، اسان ليمبڊا پيٽرولر جي قسمن جي وضاحت ڪري سگھون ٿا يا انھن کي ختم ڪري سگھون ٿا جڏھن لمبڊا ايڪسپريشن (واضح طور تي ٽائيپ ٿيل ليمبڊا ايڪسپريشن):
Function<String, String> append = (var string) -> string + " Text";
String appendedString = append.apply("Some");
System.out.println(appendedString);
توهان مڪمل متغير قسم جو نالو لکڻ جي بغير لامبڊا پيرا ميٽرز ۾ تشريح شامل ڪري سگهو ٿا:
Function<String, String> append = (@NonNull var string) -> string + " Text";

Z(ZGC)

ZGC ھڪڙو نئون ڪچرو ڪليڪٽر آھي جيڪو ڪم نٿو ڪري. اهو نئين ياداشت مختص ڪري ٿو پر ڪڏهن به ان کي ٻيهر شروع نٿو ڪري. ZGC واعدو ڪري ٿو ته ميموري جي وڏي مقدار کي اعلي throughput ۽ گهٽ ويڪرائي سان منظم ڪرڻ (ZGC صرف 64-bit پليٽ فارمن تي موجود آهي). Reference Coloring - ZGC استعمال ڪري ٿو 64-bit پوائنٽر هڪ ٽيڪنڪ سان جنهن کي پوائنٽر رنگنگ سڏيو ويندو آهي. رنگين پوائنٽر شين جي باري ۾ اضافي معلومات کي گڏ ڪن ٿا. جڏهن ياداشت ورهائجي وڃي ٿي، اهو ڪارڪردگي جي تباهي کان بچڻ ۾ مدد ڪري ٿو جڏهن GC کي نئين مختص ڪرڻ لاء ڪمرو ڳولڻ جي ضرورت آهي. ZGC استعمال ڪندي ڪچرو گڏ ڪرڻ هيٺ ڏنل قدمن تي مشتمل آهي:
  1. ورلڊ اسٽاپ: اسان شروعاتي پوائنٽن کي ڳوليندا آهيون شين تائين پهچڻ لاءِ هيپ تي (جهڙوڪ مقامي متغير يا جامد فيلڊ)؛
  2. روٽ لنڪس کان شروع ٿيندڙ آبجیکٹ گرافس جو چونڪ. اسان هر شئي کي نشان لڳايو جنهن تي اسان پهچون ٿا (ZGC اعتراض جي گراف ذريعي هلندو آهي ۽ رنگين نشانن کي جانچيندو آهي، دستياب شين کي نشانو بڻائيندي)؛
  3. ڪجهه ڪنارن جي ڪيسن کي سنڀالڻ، جهڙوڪ ڪمزور لنڪس؛
  4. جاندار شين کي منتقل ڪرڻ، مختص کي تيز ڪرڻ لاء ڍير جي وڏي ايراضيء کي آزاد ڪرڻ.
  5. جڏهن حرڪت وارو مرحلو شروع ٿئي ٿو، ZGC ڍير کي صفحن ۾ ورهائي ٿو ۽ هڪ وقت ۾ هڪ صفحو ڪم ڪري ٿو.
  6. ZGC ڪنهن به روٽ جي حرڪت کي ختم ڪري ٿو ۽ باقي حرڪت ٿئي ٿي.
هي موضوع تمام پيچيده ۽ مونجهارو آهي. تفصيلي بحث لاءِ الڳ مضمون جي ضرورت پوندي، تنهنڪري مان ان کي هتي ڇڏي ڏيندس:

Epsilon GC

Epsilon هڪ گند ڪچري جو ڪليڪٽر آهي جيڪو ميموري مختص ڪرڻ کي سنڀاليندو آهي پر ڪنهن به حقيقي ياداشت جي بحالي واري ميڪانيزم کي لاڳو نٿو ڪري. هڪ دفعو موجود جاوا هيپ ختم ٿي ويندو، JVM بند ٿي ويندو. اهو آهي، جيڪڏهن توهان هڪ لامحدود صف ۾ هڪ اعتراض ٺاهڻ شروع ڪيو بغير ڪنهن ريفرنس کي پابند ڪرڻ کان سواء هن گندي ڪليڪٽر سان، ايپليڪيشن هڪ OutOfMemoryError سان خراب ٿي ويندي (۽ جيڪڏهن ڪنهن ٻئي سان، اهو نه ٿيندو، ڇاڪاڻ ته اهو بغير ڪنهن حوالن جي شين کي صاف ڪندو) . ان جي ضرورت ڇو آهي؟ هتي ڇو آهي:
  1. ڪارڪردگي جاچ.
  2. ميموري پريشر ٽيسٽ.
  3. VM انٽرفيس کي جانچڻ.
  4. انتهائي مختصر ڪم.
  5. آخري ڦوٽو دير سان بهتري.
  6. آخري ڊراپ throughput بهتري.
مفيد لنڪس: ٻيا جدت:
  1. ByteArrayOutputStreamھڪڙو طريقو مليو آھي void writeBytes(byte [])جيڪو سڀني بائيٽ کي دليل کان وٺي لکندو آھي OutputStream.
  2. FileReader۽ FileWriterنوان تعمير ڪندڙ مليا جيڪي توهان کي چارسيٽ بيان ڪرڻ جي اجازت ڏين ٿا.
  3. Pathٻن نون طريقن کي پڪڙيو، ھڪڙي اسٽرنگ دليل مان of(String, String [])واپسي Pathھڪڙو رستو يا اسٽرنگ جو سلسلو جنھن کي گڏيل طور تي ھڪڙي رستي واري اسٽرنگ ٺاھيو ويو آھي ۽ of(URI): يو آر آئي مان رستو واپس آڻيندو آھي.
  4. Pattern- هڪ طريقو حاصل ڪيو آهي asMatchPredicate()جيڪو چيڪ ڪري ٿو ته ڇا ڏنل ان پٽ اسٽرنگ ڏنل نموني سان ملندو آهي (ڇا اهو توهان کي اجازت ڏئي ٿو ته توهان کي ريگيولر ايڪسپريس استعمال ڪندي اڳڪٿي ٺاهي ته جيئن توهان ڪري سگهو ٿا، مثال طور، وهڪرو ڊيٽا کي فلٽر).
  5. Stringمون ڪيترائي مفيد طريقا اختيار ڪيا، جھڙوڪ:
    • String strip(): اسان کي هڪ اسٽرنگ ڏينداسين جيڪا هي اسٽرنگ آهي، جنهن ۾ اسٽرنگ جي شروعات ۽ پڇاڙيءَ ۾ سڀني اسپيسز کي هٽايو ويندو (جيئن trim()، پر اسپيس کي مختلف طرح بيان ڪري ٿو؛
    • String stripLeading(): اسان کي واپس ڏيندو تار جيڪو ھي اسٽرنگ آھي، تار مان ڪنھن به اڳواٽ اسپيس کي ختم ڪندي؛
    • String stripTrailing(): اسان کي واپس ڏيندو تار جيڪو هي اسٽرنگ آهي، تار جي آخر ۾ ڪنهن به اسپيس کي ختم ڪندي؛
    • Stream lines()Stream: اسان کي واپس ڪنداسين String، هن اسٽرنگ مان ڪڍيا ويا، لڪير کان جدا ڪندڙ؛
    • String repeat(int): اسان کي هڪ اسٽرنگ موٽائي ڇڏيندو جيڪو هن اسٽرنگ جو هڪ جڙيل آهي، ڪيترائي ڀيرا ورجايو.
    • boolean isBlank(): صحيح موٽندو جيڪڏهن اسٽرنگ خالي هجي يا صرف اسپيس تي مشتمل هجي، ٻي صورت ۾ غلط.
  6. Thread- طريقن کي تباهه ڪيو ويو () ۽ اسٽاپ (ڇڪڻ لائق) هٽايو ويو آهي.
  7. Filesڪيترائي نوان طريقا مليا:
    • String readString(Path): UTF-8 انڪوڊنگ استعمال ڪندي بائيٽ کان اکرن تائين ڊيڪوڊنگ ڪندي، فائل مان سموري ڊيٽا کي اسٽرنگ ۾ پڙهي ٿو.
    • String readString(Path, Charset): ساڳيءَ طرح مٿي ڏنل طريقي ۾، فرق سان ته بائيٽ کان اکرن تائين ڊيڪوڊنگ مخصوص چارسيٽ استعمال ڪندي ٿيندي آهي؛
    • Path writeString (Path, CharSequence, OpenOption []): اکرن جي ترتيب کي فائل ۾ لکندو آھي. اکرن کي UTF-8 انڪوڊنگ استعمال ڪندي بائيٽ ۾ انڪوڊ ڪيو ويو آهي.
    • Path writeString(Path, CharSequence,Charset, OpenOption []): ساڳيو طريقو جيئن مٿي ڄاڻايل آهي، صرف اکر چارسيٽ ۾ بيان ڪيل انڪوڊنگ استعمال ڪندي بائيٽ ۾ انڪوڊ ٿيل آهن.
اهي سڀ کان وڌيڪ دلچسپ API جدت هئا (منهنجي عاجز راء ۾)، هتي وڌيڪ تفصيلي جائزو وٺڻ لاء ڪجهه مواد آهن:

جاوا 12

ڇهه مهينا گذري ويا ۽ اسان جاوا جي ارتقاء ۾ ايندڙ اسٽيج ڏسو. تنهن ڪري، اهو وقت آهي علم جي ڦل ڪڍڻ ۽ کوٽڻ جو. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 2 - 2

تازه ڪاري G1

G1 لاءِ ھيٺيون واڌايون ڪيون ويون آھن:
  1. غير استعمال ٿيل مختص ياداشت کي ٻيهر حاصل ڪريو

    جاوا هيپ ميموري ۾ اهڙي شيءِ آهي جيئن غير استعمال ٿيل ياداشت (يا ٻين لفظن ۾، غير فعال). جاوا 12 ۾ انهن هن مسئلي کي حل ڪرڻ جو فيصلو ڪيو، هاڻي:

    • G1 هڪ مڪمل GC ۾ يا هڪ متوازي لوپ دوران هيپ مان ياداشت واپس ڪري ٿو. G1 مڪمل GC کي روڪڻ جي ڪوشش ڪري ٿو ۽ هيپ مختص جي بنياد تي هڪ متوازي لوپ شروع ڪري ٿو. اسان کي مجبور ڪرڻو پوندو G1 کي ڍير مان ياداشت واپس ڪرڻ لاءِ.

    هي سڌارو ڪارڪردگي تي ڌيان ڏئي ٿو خودڪار طريقي سان ميموري کي هيپ کان OS ڏانهن واپسي جڏهن G1 استعمال ۾ نه آهي.

  2. مخلوط مجموعن کي ختم ڪرڻ جڏهن وقفي وقت کان وڌي وڃي

    G1 هڪ تجزياتي انجڻ استعمال ڪري ٿو ڪچرو گڏ ڪرڻ لاءِ گهربل ڪم جي مقدار کي چونڊڻ لاءِ. اهو سيٽ جي وضاحت ڪرڻ ۽ صاف ڪرڻ شروع ڪرڻ کان پوءِ بغير بغير زنده شيون گڏ ڪري ٿو. اهو ڪچرو ڪليڪٽر کي پنهنجي وقفي وقت جي حد کان وڌيڪ ڪري ٿو. درحقيقت، اهو مسئلو بهتري سان حل ڪيو ويو آهي، ڇاڪاڻ ته جيڪڏهن ايندڙ قدم جي عمل جو وقت مناسب حد کان ٻاهر آهي، اهو قدم روڪي سگهجي ٿو.

Microbenchmark

جاوا 12 متعارف ڪرايو مائڪرو بينچ مارڪنگ ٽيسٽ انهي ڪري ته JVM ڪارڪردگي کي موجوده معيارن کي استعمال ڪندي آساني سان جانچي سگهجي ٿو. اهو هر ڪنهن لاءِ تمام ڪارائتو هوندو جيڪو پاڻ JVM تي ڪم ڪرڻ چاهي ٿو. شامل ڪيل ٽيسٽ جاوا مائڪرو بينچ مارڪ هارنس (JMH) استعمال ڪندي ٺاهيا ويا آهن. اهي تجربا JVM تي مسلسل ڪارڪردگي جاچ جي اجازت ڏين ٿا. JEP 230 تقريبن 100 ٽيسٽن جو تعارف پيش ڪري ٿو، نوان ٽيسٽ متعارف ڪرايا ويا جيئن جاوا جا نوان ورزن جاري ڪيا ويا. هتي شامل ڪيل تجربن جو هڪ مثال آهي .

شينهن

هي هڪ گندگي گڏ ڪرڻ (GC) الورورٿم آهي جنهن جو مقصد گهٽ جوابي وقت جي ضمانت ڏيڻ آهي (هيٺيون حد 10-500 ms آهي). اهو GC جي وقفي جو وقت گھٽائي ٿو جڏهن صاف ڪرڻ جو ڪم گڏو گڏ جاوا ٿريڊز کي هلائڻ سان. Shenandoah ۾، وقفي وقت ڍير جي سائيز کان آزاد آهي. هن جو مطلب اهو آهي ته توهان جي ڍير جي سائيز کان سواء، وقف جو وقت ساڳيو هوندو. هي هڪ تجرباتي خصوصيت آهي ۽ OpenJDK جي معياري (Oracle) تعمير ۾ شامل نه آهي.

سوئچ کي بهتر ڪريو

جاوا 12 کي بهتر ڪيو ويو آھي سوئچ ايڪسپريسز لاءِ نمونن جي ميلاپ لاءِ. هڪ نئون نحو L → متعارف ڪرايو ويو. هتي نئين سوئچ جي اهم نقطي جي هڪ فهرست آهي :
  1. نئين نحو غلطين کي روڪڻ لاء وقف بيان جي ضرورت کي ختم ڪري ٿو.
  2. اظهار کي تبديل ڪريو هاڻي ناڪام نه ٿيو.
  3. اضافي طور تي، اسان ھڪڙي ليبل ۾ گھڻن مستقلن جي وضاحت ڪري سگھون ٿا.
  4. ڊفالٽ ڪيس هاڻي سوئچ ايڪسپريس ۾ گهربل آهي.
  5. وقفو استعمال ڪيو ويندو آهي سوئچ ايڪسپريس ۾ واپسي جي قيمتن کي واپس ڪرڻ لاءِ رجسٽر مان ئي (حقيقت ۾، هڪ سوئچ قدر واپس ڪري سگهي ٿو).
اچو ته ان کي هڪ مثال طور ڏسو:
var result = switch (someDay) {
  case "M", "W", "F" -> "MWF";
  case "T", "TH", "S" -> "TTS";
  default -> {
      if(someDay.isEmpty())
            break "Please insert a valid day.";
      else
            break "Looks like a Sunday.";
  }
};
جاوا 13 ۾ ايڪسپريشن کي تبديل ڪرڻ لاءِ حتمي گائيڊ ٻيون نيون خاصيتون:
  1. String:

    transform(Function f)- مهيا ڪيل فنڪشن کي اسٽرنگ تي لاڳو ڪريو. نتيجو شايد تار نه ٿي سگھي.
    indent(int x)- اسٽرنگ ۾ x اسپيس شامل ڪري ٿو. جيڪڏهن پيٽرولر منفي آهي، ته پوء هن نمبر جي مکيه جڳهن کي هٽايو ويندو (جيڪڏهن ممڪن هجي).

  2. Files- ھڪڙي طريقي کي پڪڙيو جيئن mismatch()، جيڪو، موڙ ۾، ٻن فائلن جي مواد ۾ پھرين بي ميل بائيٽ جي پوزيشن کي ڳولي ۽ واپس ڪري ٿو، يا -1L جيڪڏھن ڪو به ميلاپ نه آھي.

  3. ھڪڙو نئون طبقو ظاهر ٿيو آھي -CompactNumberFormat ھڪڙي ٺھيل فارم ۾ ڊيسيمل نمبر فارميٽ ڪرڻ لاءِ. ھن ٺھيل شڪل جو ھڪڙو مثال آھي 1M بدران 1,000,000. اھڙيءَ طرح نون اکرن جي بدران رڳو ٻه ٻه گھرجن.

  4. اتي پڻ ھڪڙو نئون enum آھي ، NumberFormatStyleجنھن جا ٻه قدر آھن - LONG ۽ SHORT.

  5. InputStream طريقو مليو skipNBytes(long n) : ان پٽ اسٽريم مان بائيٽ جو نمبر نمبر ڇڏي ڏيو.

جاوا 12 جا دلچسپ لنڪ:

جاوا 13

دنيا اڃا بيٺي نه آهي، اها هلندي آهي، اها ترقي ڪري ٿي، جهڙوڪ جاوا - جاوا 13. 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 2 - 3

ٽيڪسٽ بلاڪ

جاوا هميشه ڪجهه برداشت ڪيو آهي جڏهن اهو تارن جي وضاحت ڪرڻ ۾ اچي ٿو. جيڪڏهن اسان کي ڪنهن لڪير جي وضاحت ڪرڻ جي ضرورت آهي خلا سان، هڪ لڪير جي وقفي، هڪ اقتباس يا ٻيو ڪجهه، اهو ڪجهه مشڪلاتن جو سبب بڻيو، تنهنڪري اسان کي خاص اکر استعمال ڪرڻا پوندا: مثال طور، \n هڪ لڪير جي وقفي لاءِ، يا ڪجهه لڪير کان بچڻ لاءِ پاڻ. اهو خاص طور تي ڪوڊ جي پڙهڻ جي صلاحيت کي گھٽائي ٿو ۽ اضافي وقت وٺندو آهي جڏهن اهڙي لائن لکڻ. اهو خاص طور تي قابل ذڪر ٿيندو جڏهن اسٽرنگ لکندا آهن جيڪي JSON، XML، HTML، وغيره ڏيکاريندا آهن. نتيجي طور، جيڪڏهن اسان هڪ ننڍڙو Json لکڻ چاهيون ٿا، اهو ڪجهه هن طرح نظر ايندو:
String JSON_STRING = "{\r\n" + "\"name\" : \"someName\",\r\n" + "\"site\" : \"https://www.someSite.com/\"\r\n" + "}";
۽ پوءِ جاوا 13 منظر تي اچي ٿو ۽ اسان کي ان جو حل پيش ڪري ٿو ٽائيپل ڊبل ڪوٽس جي صورت ۾ ٽيڪسٽ کان اڳ ۽ پوءِ (جنهن کي اهي ٽيڪسٽ بلاڪ سڏين ٿا). اچو ته ڏسو پوئين json مثال هن جدت کي استعمال ڪندي:
String TEXT_BLOCK_JSON = """
{
    "name" : "someName",
    "site" : "https://www.someSite.com/"
}
""";
گهڻو آسان ۽ صاف، اهو ناهي؟ Stringٽي نوان طريقا پڻ شامل ڪيا ويا ، ترتيب سان، انهن بلاڪ کي منظم ڪرڻ لاء:
  • stripIndent(): هڪ تار مان بي ترتيب واري جاءِ کي هٽائي ٿو. اھو مفيد آھي جيڪڏھن توھان پڙھي رھيا آھيو ملٽي لائن اسٽرنگ ۽ لاڳو ڪرڻ چاھيو ٿا ساڳئي قسم جي بي ترتيب واري وائيٽ اسپيس خارج ڪرڻ جيڪا واضح اعلان سان ٿئي ٿي (بنيادي طور تي ترتيب ڏيڻ واري کي ترتيب ڏيڻ واري بي ترتيب واري وائيٽ اسپيس کي ختم ڪرڻ لاءِ)؛
  • formatted(Object... args ): ملندڙ جلندڙ format(String format, Object... arg)، پر ٽيڪسٽ بلاڪ لاءِ؛
  • translateEscapes(): هڪ اسٽرنگ ڏي ٿو فرار جي ترتيب سان (جهڙوڪ \r) لاڳاپيل يونيڪوڊ قدر ۾ ترجمو ٿيل.

سوئچ کي بهتر ڪريو

سوئچ ايڪسپريس جاوا 12 ۾ متعارف ڪرايا ويا، ۽ 13 انھن کي سڌاري ٿو. 12 ۾ توهان وقفو استعمال ڪندي واپسي جي قيمت بيان ڪريو. 13 ۾، واپسي جي قيمت کي تبديل ڪيو ويو پيداوار سان. هاڻي سوئچ جو اظهار جيڪو اسان وٽ هو جاوا 12 سيڪشن ۾ ٻيهر لکي سگهجي ٿو جيئن:
var result = switch (someDay) {
  case "M", "W", "F" -> "MWF";
  case "T", "TH", "S" -> "TTS";
  default -> {
      if(someDay.isEmpty())
          yield "Please insert a valid day.";
      else
          yield "Looks like a Sunday.";
  }
};
جيتوڻيڪ اهو اسان لاءِ عام هو پروگرامر اڳ ۾ ئي جاوا کان واقف هئا وقفي کي قبول ڪرڻ، ان جي باوجود اهو ڪافي عجيب هو. مون کي ٻڌائڻ جي ڪوشش ڪري برڪ سچ ڇا آهي؟ نئون (نسبتا نئون) حاصل ڪيل لفظ واضح آهي ۽ ٿي سگهي ٿو ٻين هنڌن تي مستقبل ۾ جتي قيمتون واپس ڪيون وڃن. انهن لاء جيڪي هن موضوع ۾ تمام گهڻي دلچسپي رکن ٿا، آئون سفارش ڪريان ٿو ته توهان پاڻ کي انهن مواد سان واقف ڪيو:

متحرڪ سي ڊي ايس آرڪائيوز

CDS - ڪلاس-ڊيٽا شيئرنگ. توهان کي عام طور تي استعمال ٿيل طبقن جي هڪ سيٽ کي آرڪائيو ۾ پيڪيج ڪرڻ جي اجازت ڏئي ٿي جيڪا بعد ۾ ڪيترن ئي JVM مثالن ذريعي لوڊ ٿي سگهي ٿي. اسان کي هن جي ضرورت ڇو آهي؟ حقيقت اها آهي ته ڪلاسن جي لوڊشيڊنگ جي عمل ۾، JVM ڪافي وسيلا-گھڻين عملن کي انجام ڏئي ٿو، جهڙوڪ پڙهائڻ وارا ڪلاس، انهن کي اندروني ڍانچي ۾ محفوظ ڪرڻ، پڙهيل طبقن جي درستي کي جانچڻ، انحصار ڪندڙ طبقن کي ڳولڻ ۽ لوڊ ڪرڻ وغيره. .، ۽ صرف هن سڀني کان پوء ڪلاس ڪم ڪرڻ لاء تيار آهن. سمجھڻ سان، ڪيترائي وسيلا ضايع ڪيا ويا آھن، ڇو ته JVM مثال اڪثر ڪري سگھن ٿا ساڳيا طبقن کي لوڊ ڪري سگھن ٿا. مثال طور String، LinkedList، Integer. خير، يا ساڳي ايپليڪيشن جا ڪلاس، ۽ اهي سڀ وسيلا آهن. جيڪڏهن اسان سڀني ضروري قدمن کي صرف هڪ ڀيرو انجام ڏنو ۽ پوءِ ٻيهر ڊزائين ڪيل ڪلاسن کي هڪ آرڪائيو ۾ رکيا جيڪي ڪيترن ئي JVMs جي ميموري ۾ لوڊ ٿي سگهن ٿا، اهو ٿي سگهي ٿو ميموري اسپيس کي محفوظ ڪري سگهي ٿو ۽ ايپليڪيشن جي شروعاتي وقت کي گهٽائي سگھي ٿو. دراصل، سي ڊي ايس اهو ممڪن بڻائي ٿو ته صرف هڪ آرڪائيو ٺاهي. جاوا 9 صرف سسٽم ڪلاس کي آرڪائيو ۾ شامل ڪرڻ جي اجازت ڏني. جاوا 10 - آرڪائيو ۾ ايپليڪيشن ڪلاس شامل ڪريو. اهڙي آرڪائيو جي ٺهڻ تي مشتمل آهي:
  • ايپليڪيشن پاران لوڊ ڪيل ڪلاس جي هڪ فهرست ٺاهڻ؛
  • اسان کي مليل ڪلاسن سان گڏ هڪ تمام ضروري آرڪائيو ٺاهڻ.
جاوا 13 ۾ جدت CDS کي بهتر بڻائي ٿي ته جيئن ايپليڪيشن ختم ٿيڻ تي آرڪائيو ٺاهي سگھي. هن جو مطلب اهو آهي ته مٿيان ٻه قدم هاڻي هڪ ۾ گڏ ڪيا ويندا. ۽ هڪ وڌيڪ اهم نقطو: صرف ڪلاس جيڪي لوڊ ڪيا ويا هئا جڏهن ايپليڪيشن هلندي هئي آرڪائيو ۾ شامل ڪئي ويندي. ٻين لفظن ۾، اهي طبقا جيڪي اڃا تائين application.jar ۾ موجود آهن، پر ڪجهه سببن جي ڪري لوڊ نه ڪيا ويا، آرڪائيو ۾ شامل نه ڪيا ويندا.

تازه ڪاري Socket API

ساکٽ API ( java.net.Socket ۽ java.net.ServerSocket ) بنيادي طور تي جاوا جو هڪ لازمي حصو آهي ان جي شروعات کان وٺي، پر ساکٽ کي گذريل ويهن سالن ۾ ڪڏهن به اپڊيٽ نه ڪيو ويو آهي. سي ۽ جاوا ۾ لکيل، اهي ڏاڍا، تمام وڏا ۽ برقرار رکڻ ڏکيو هئا. پر جاوا 13 فيصلو ڪيو ته هن سڄي معاملي ۾ پنهنجون ترميمون ڪيون ۽ بنيادي عمل کي تبديل ڪيو. هاڻي، PlainSocketImpl جي بدران ، فراهم ڪندڙ انٽرفيس سان تبديل ڪيو ويو آهي NioSocketImpl . هي نئون ڪوڊ ٿيل عمل java.nio جي ساڳي پٺتي پيل انفراسٽرڪچر تي ٻڌل آهي . لازمي طور تي طبقو استعمال ڪري ٿو java.util.concurrent بفر ڪيش ۽ لاڪنگ ميڪانيزم (جيڪي سيڪشن تي ٻڌل آهن) بجاءِ هم وقت سازي جي طريقن جي. ان کي هاڻي اصلي ڪوڊ جي ضرورت ناهي، انهي کي آسان بڻائي ٿي مختلف پليٽ فارمن تي پورٽ ڪرڻ. اڃا، اسان وٽ ھڪڙو طريقو آھي واپس وڃڻ جو PlainSocketImpl استعمال ڪرڻ ، پر ھاڻي کان وٺي NioSocketImpl ڊفالٽ طور استعمال ڪيو ويندو آھي .

ZGC لاءِ ياداشت جي واپسي

جيئن ته اسان کي ياد آهي، Z گاربيج ڪليڪٽر کي جاوا 11 ۾ متعارف ڪرايو ويو هو هڪ گهٽ دير واري ڪچري کي گڏ ڪرڻ واري ميکانيزم جي طور تي ته جيئن GC جو وقفو ڪڏهن به 10 ms کان وڌيڪ نه ٿئي. پر ساڳئي وقت، ٻين مجازي GC HotSpots جي برعڪس، جهڙوڪ Shenandoah ۽ G1، اهو OS ڏانهن غير استعمال ٿيل متحرڪ ياداشت واپس ڪري سگهي ٿو. ھي ترميم ھن J جي صلاحيت کي ZGC ۾ شامل ڪري ٿو. ان جي مطابق، اسان کي بهتر ڪارڪردگي سان گڏ گھٽ ميموري فوٽ پرنٽ ملي ٿو، ۽ ZGC ھاڻي ڊفالٽ طور تي آپريٽنگ سسٽم ڏانھن غير منظم ميموري موٽائي ٿو جيستائين مخصوص گھٽ ۾ گھٽ ھيپ سائيز تائين پهچي وڃي. هڪ وڌيڪ شيء: ZGC هاڻي 16 TB جي وڌ ۾ وڌ سپورٽ ٿيل هيپ سائيز آهي. اڳي، 4TB جي حد هئي. ٻيا جدت:
  1. javax.securityjdk.sasl.disabledMechanisms- SASL ميڪانيزم کي غير فعال ڪرڻ لاء ملڪيت شامل ڪيو .
  2. java.nio- ھڪڙو طريقو شامل ڪيو ويو آھي FileSystems.newFileSystem (Path, Map <String,?>)- ترتيب سان، ھڪڙي نئين فائل ٺاھڻ لاء.
  3. ڪلاسن ۾ java.nioھاڻي مطلق آھي (جيئن نسبتن جي برخلاف) get۽ set-طريقو. اهي، بنيادي خلاصي طبقي وانگر ، بفر جو حصو ٻيهر حاصل ڪرڻ لاء Bufferهڪ طريقو شامل آهن .slice()
  4. شامل ڪيل javax.xml.parsersطريقا DOM ۽ SAX فيڪٽريز کي فوري ڪرڻ لاءِ (ناسم اسپيس سپورٽ سان).
  5. يونيڪوڊ سپورٽ ورزن 12.1 ۾ اپڊيٽ ڪئي وئي آهي.
جاوا 13 تي دلچسپ لنڪس:

نتيجا

اسان جاوا 14 ۾ اعلان ڪيل جدت تي وڃون ٿا، پر جيئن ته اها روشني تمام جلد ڏسندي - JDK 14 مارچ 17، 2020 تي رليز ٿيڻ لاء شيڊول آهي، اهو بهتر ٿيندو ته ان جي رليز ٿيڻ کان پوء فوري طور تي هڪ الڳ، مڪمل جائزو ورتو وڃي. . مان توهان جو ڌيان ان حقيقت ڏانهن پڻ ڇڪائڻ چاهيان ٿو ته ٻين پروگرامنگ ٻولين ۾ رليز جي وچ ۾ ڊگھي وقفي سان، جهڙوڪ پٿون 2-3، ڪو به مطابقت ناهي: اهو آهي، جيڪڏهن ڪوڊ Python 2 ۾ لکيل آهي، توهان ان کي ترجمو ڪرڻ لاءِ محنت ڪرڻي پوندي 3. جاوا ان سلسلي ۾ خاص آهي ڇاڪاڻ ته اهو انتهائي پسمانده مطابقت رکندڙ آهي. ان جو مطلب اهو آهي ته توهان جي جاوا 5 يا 8 پروگرام ضمانت آهي ته جاوا 8-13 ورچوئل مشين تي هلڻ لاءِ- ڪجھ استثنان سان جيڪي توهان کي في الحال پريشان ٿيڻ جي ضرورت ناهي. اهو واضح آهي ته اهو ٻئي طريقي سان ڪم نٿو ڪري: مثال طور، جيڪڏهن توهان جي ايپليڪيشن جاوا 13 فنڪشن استعمال ڪري ٿي جيڪا صرف جاوا 8 JVM ۾ موجود ناهي. اهو سڀ ڪجهه مون وٽ اڄ تائين آهي، احترام انهن جو جن هن نقطي تائين پڙهيو آهي)) 8 کان 13 تائين: جاوا ورزن جو مڪمل جائزو.  حصو 2 - 5
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION