JavaRush /جاوا بلاگ /Random-UR /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 اعلی تھرو پٹ اور کم لیٹنسی کے ساتھ بڑی مقدار میں میموری کو منظم کرنے کا وعدہ کرتا ہے (ZGC صرف 64 بٹ پلیٹ فارم پر دستیاب ہے)۔ حوالہ رنگ کاری - ZGC پوائنٹر کلرنگ نامی تکنیک کے ساتھ 64 بٹ پوائنٹرز استعمال کرتا ہے۔ رنگین پوائنٹرز ڈھیر پر موجود اشیاء کے بارے میں اضافی معلومات محفوظ کرتے ہیں۔ جب میموری بکھر جاتی ہے، تو اس سے کارکردگی میں کمی سے بچنے میں مدد ملتی ہے جب GC کو نئے مختص کے لیے جگہ تلاش کرنے کی ضرورت ہوتی ہے۔ ZGC کا استعمال کرتے ہوئے کوڑا اٹھانا درج ذیل مراحل پر مشتمل ہے:
  1. دنیا رک جاتی ہے: ہم ڈھیر پر موجود اشیاء تک پہنچنے کے لیے نقطہ آغاز تلاش کرتے ہیں (جیسے مقامی متغیرات یا جامد فیلڈز)؛
  2. روٹ لنکس سے شروع ہونے والے آبجیکٹ گرافس کا انٹرسیکشن۔ ہم ہر اس چیز کو نشان زد کرتے ہیں جس تک ہم پہنچتے ہیں (ZGC آبجیکٹ گراف کے ذریعے چلتا ہے اور دستیاب اشیاء کو نشان زد کرتے ہوئے رنگین مارکرز کا جائزہ لیتا ہے)؛
  3. کچھ کنارے کے معاملات کو سنبھالنا، جیسے کمزور روابط؛
  4. زندہ اشیاء کو منتقل کرنا، ڈھیر کے بڑے حصے کو خالی کرنا تاکہ مختص کو تیز کیا جا سکے۔
  5. جب حرکت کا مرحلہ شروع ہوتا ہے، ZGC ڈھیر کو صفحات میں تقسیم کرتا ہے اور ایک وقت میں ایک صفحہ کام کرتا ہے۔
  6. ZGC کسی بھی جڑ کی حرکت کو ختم کرتا ہے اور باقی حرکت ہوتی ہے۔
یہ موضوع بہت پیچیدہ اور الجھا ہوا ہے۔ تفصیلی بحث کے لیے ایک الگ مضمون درکار ہوگا، اس لیے میں اسے یہاں چھوڑتا ہوں:

ایپسیلون جی سی

Epsilon ایک کچرا جمع کرنے والا ہے جو میموری کی تخصیص کو سنبھالتا ہے لیکن کسی حقیقی میموری کی بحالی کے طریقہ کار کو نافذ نہیں کرتا ہے۔ دستیاب جاوا ہیپ ختم ہونے کے بعد، JVM بند ہو جائے گا۔ یعنی، اگر آپ اس کوڑا اٹھانے والے کے ساتھ کسی حوالہ کے پابند کیے بغیر لامحدود صف میں کوئی چیز بنانا شروع کر دیتے ہیں، تو ایپلیکیشن آؤٹ آف میموری ایرر کے ساتھ کریش ہو جائے گی (اور اگر کسی اور کے ساتھ ہو تو ایسا نہیں ہو گا، کیونکہ یہ بغیر حوالہ جات کے اشیاء کو صاف کر دے گا) . اس کی ضرورت کیوں ہے؟ یہاں کیوں ہے:
  1. کارکردگی کی جانچ۔
  2. میموری پریشر ٹیسٹنگ۔
  3. VM انٹرفیس کی جانچ کرنا۔
  4. انتہائی مختصر کام۔
  5. آخری ڈراپ لیٹنسی میں بہتری۔
  6. آخری ڈراپ تھرو پٹ بہتری۔
مفید لنکس: دیگر اختراعات:
  1. ByteArrayOutputStreamایک طریقہ ملا ہے void writeBytes(byte [])جو دلیل سے لے کر تمام بائٹس کو لکھتا ہے OutputStream۔
  2. FileReaderاور FileWriterنئے کنسٹرکٹرز ملے جو آپ کو Charset کی وضاحت کرنے کی اجازت دیتے ہیں۔
  3. Pathدو نئے طریقے پکڑے، سٹرنگ آرگیومینٹ سے سٹرنگز کا ایک راستہ یا ترتیب of(String, String [])واپس کرتا ہے Pathجو کہ مل کر پاتھ سٹرنگ بناتا ہے اور of(URI): URI سے پاتھ واپس کرتا ہے۔
  4. Pattern— کو ایک ایسا طریقہ موصول ہوا asMatchPredicate()جو یہ جانچتا ہے کہ آیا دی گئی ان پٹ سٹرنگ دیے گئے پیٹرن سے میل کھاتی ہے (کیا یہ آپ کو ریگولر ایکسپریشن کا استعمال کرتے ہوئے پیش گوئی کرنے کی اجازت دیتا ہے تاکہ آپ، مثال کے طور پر، اسٹریم میں ڈیٹا فلٹر کر سکیں)۔
  5. Stringمیں نے بہت سے مفید طریقوں کو اٹھایا، جیسے:
    • String strip(): ہمیں ایک سٹرنگ واپس کرے گا جو یہ سٹرنگ ہے، جس میں سٹرنگ کے شروع اور آخر میں تمام خالی جگہیں ہٹا دی جائیں گی (ٹرم(ٹرم کی طرح)، لیکن خالی جگہوں کو مختلف طریقے سے بیان کرتا ہے)؛
    • 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 کو ڈھیر سے میموری واپس کرنے پر مجبور کرنا پڑے گا۔

    یہ بہتری کارکردگی پر توجہ مرکوز کرتی ہے جب G1 استعمال میں نہ ہو تو ہیپ سے OS پر میموری کو خود بخود واپس کر دیتا ہے۔

  2. جب وقفے کا وقت ختم ہو جائے تو مخلوط مجموعوں کو روکنا

    کوڑا اٹھانے کے لیے درکار کام کی مقدار کو منتخب کرنے کے لیے G1 تجزیہ انجن کا استعمال کرتا ہے۔ یہ سیٹ کی وضاحت اور صفائی شروع کرنے کے بعد بغیر رکے زندہ اشیاء کو جمع کرتا ہے۔ اس کی وجہ سے کوڑا اٹھانے والا اپنے وقفے کے وقت کے ہدف سے تجاوز کر جاتا ہے۔ درحقیقت، یہ مسئلہ بہتری سے حل ہو جاتا ہے، کیونکہ اگر اگلے مرحلے پر عمل درآمد کا وقت معقول حد سے باہر ہو تو اس مرحلے میں خلل پڑ سکتا ہے۔

مائیکرو بینچ مارک

جاوا 12 نے مائیکرو بینچ مارکنگ ٹیسٹ متعارف کرائے تاکہ موجودہ بینچ مارکس کا استعمال کرتے ہوئے JVM کی کارکردگی کو آسانی سے جانچا جا سکے۔ یہ ان لوگوں کے لیے بہت مفید ہو گا جو خود JVM پر کام کرنا چاہتا ہے۔ اضافی ٹیسٹ جاوا مائیکرو بینچ مارک ہارنس (JMH) کا استعمال کرتے ہوئے بنائے گئے ہیں۔ یہ ٹیسٹ JVM پر مسلسل کارکردگی کی جانچ کی اجازت دیتے ہیں۔ JEP 230 تقریباً 100 ٹیسٹوں کے تعارف کی تجویز پیش کرتا ہے، جاوا کے نئے ورژن جاری ہونے پر نئے ٹیسٹ متعارف کرائے جاتے ہیں۔ یہاں شامل کیے جانے والے ٹیسٹوں کی ایک مثال ہے ۔

شینندوہ

یہ کچرا جمع کرنے کا ایک الگورتھم ہے جس کا مقصد کم رسپانس ٹائم کی ضمانت دینا ہے (نچلی حد 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 اعشاریہ نمبر کو کمپیکٹ شکل میں فارمیٹ کرنے کے لیے۔ اس کمپیکٹ فارم کی ایک مثال 1,000,000 کے بجائے 1M ہے۔ اس طرح، نو حروف کی بجائے صرف دو دو درکار ہیں۔

  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 کی میموری میں لوڈ کی جا سکتی ہیں، تو یہ میموری کی جگہ کو نمایاں طور پر بچا سکتا ہے اور ایپلیکیشن شروع ہونے کا وقت کم کر سکتا ہے۔ درحقیقت، سی ڈی ایس صرف اس طرح کا آرکائیو بنانا ممکن بناتا ہے۔ Java 9 نے صرف سسٹم کلاسز کو آرکائیو میں شامل کرنے کی اجازت دی۔ جاوا 10 - آرکائیو میں ایپلیکیشن کلاسز شامل کریں۔ اس طرح کے محفوظ شدہ دستاویزات کی تخلیق پر مشتمل ہے:
  • درخواست کے ذریعے بھری ہوئی کلاسوں کی فہرست بنانا؛
  • ہمیں ملنے والی کلاسوں کے ساتھ ایک انتہائی ضروری آرکائیو بنانا۔
Java 13 میں جدت CDS کو بہتر بناتی ہے تاکہ ایپلیکیشن ختم ہونے پر یہ ایک آرکائیو بنا سکے۔ اس کا مطلب یہ ہے کہ اوپر کے دو مراحل اب ایک میں مل جائیں گے۔ اور ایک اور اہم نکتہ: صرف وہ کلاسز جو ایپلی کیشن کے چلتے وقت لوڈ کی گئی تھیں آرکائیو میں شامل کی جائیں گی۔ دوسرے لفظوں میں، وہ کلاسز جو ابھی تک application.jar میں موجود ہیں، لیکن کسی وجہ سے لوڈ نہیں ہوئیں، آرکائیو میں شامل نہیں کی جائیں گی۔

ساکٹ API کو اپ ڈیٹ کریں۔

ساکٹ API ( java.net.Socket اور java.net.ServerSocket ) اپنے آغاز سے ہی بنیادی طور پر جاوا کا ایک لازمی حصہ ہے، لیکن ساکٹ کو پچھلے بیس سالوں میں کبھی اپ ڈیٹ نہیں کیا گیا۔ سی اور جاوا میں لکھے گئے، وہ بہت، بہت بھاری اور برقرار رکھنا مشکل تھے۔ لیکن جاوا 13 نے اس پورے معاملے میں اپنی ایڈجسٹمنٹ کرنے کا فیصلہ کیا اور بنیادی نفاذ کو تبدیل کیا۔ اب، PlainSocketImpl کے بجائے ، فراہم کنندہ انٹرفیس کو NioSocketImpl سے تبدیل کر دیا گیا ہے ۔ یہ نیا کوڈڈ نفاذ اسی بیک اینڈ انفراسٹرکچر پر مبنی ہے جیسا کہ java.nio ۔ بنیادی طور پر کلاس ہم آہنگی کے طریقوں کی بجائے java.util.concurrent بفر کیش اور لاکنگ میکانزم (جو سیگمنٹ پر مبنی ہیں) استعمال کرتی ہے۔ اب اسے مقامی کوڈ کی ضرورت نہیں ہے، جس سے مختلف پلیٹ فارمز پر پورٹ کرنا آسان ہو جاتا ہے۔ پھر بھی، ہمارے پاس PlainSocketImpl استعمال کرنے کا ایک طریقہ ہے ، لیکن اب سے NioSocketImpl بطور ڈیفالٹ استعمال ہوتا ہے ۔

ZGC کے لیے میموری کی واپسی۔

جیسا کہ ہمیں یاد ہے، Z کوڑا کرکٹ جمع کرنے والے کو Java 11 میں کم تاخیر والے کوڑے کو جمع کرنے کے طریقہ کار کے طور پر متعارف کرایا گیا تھا تاکہ GC کا وقفہ کبھی بھی 10 ms سے زیادہ نہ ہو۔ لیکن ایک ہی وقت میں، دوسرے ورچوئل GC ہاٹ سپاٹ کے برعکس، جیسا کہ Shenandoah اور G1، یہ OS کو غیر استعمال شدہ ڈائنامک میموری واپس کر سکتا ہے۔ یہ ترمیم اس J صلاحیت کو ZGC میں شامل کرتی ہے۔ اس کے مطابق، ہمیں بہتر کارکردگی کے ساتھ ساتھ میموری کے نشانات میں کمی آتی ہے، اور ZGC اب آپریٹنگ سسٹم میں غیر متعین میموری کو بطور ڈیفالٹ واپس کرتا ہے جب تک کہ مخصوص کم از کم ہیپ سائز تک نہ پہنچ جائے۔ ایک اور چیز: ZGC کے پاس اب زیادہ سے زیادہ تعاون یافتہ ہیپ سائز 16 TB ہے۔ پہلے، 4TB کی حد تھی۔ دیگر اختراعات:
  1. javax.security- jdk.sasl.disabledMechanismsSASL میکانزم کو غیر فعال کرنے کے لیے ایک پراپرٹی شامل کی۔
  2. java.nio- ایک طریقہ شامل کیا گیا ہے FileSystems.newFileSystem (Path, Map <String,?>)- بالترتیب، ایک نئی فائل بنانے کے لیے۔
  3. کلاسوں میں java.nioاب مطلق (رشتہ دار کے برخلاف) getاور set-طریقہ کار ہیں۔ وہ، بیس خلاصہ کلاس کی طرح ، بفر کے حصے کو بازیافت کرنے کا Bufferطریقہ شامل کرتے ہیں ۔slice()
  4. DOM اور SAX فیکٹریوں کو شروع کرنے کے طریقے شامل کیے گئے javax.xml.parsers(نیم اسپیس سپورٹ کے ساتھ)۔
  5. یونیکوڈ سپورٹ کو ورژن 12.1 میں اپ ڈیٹ کر دیا گیا ہے۔
جاوا 13 پر دلچسپ لنکس:

نتائج

ہم جاوا 14 میں اعلان کردہ اختراعات پر جا سکتے ہیں، لیکن چونکہ یہ بہت جلد روشنی دیکھے گا - JDK 14 17 مارچ 2020 کو ریلیز ہونے والا ہے، اس لیے اس کی ریلیز کے فوراً بعد اس کا ایک الگ، مکمل جائزہ لینا بہتر ہوگا۔ . میں آپ کی توجہ اس حقیقت کی طرف بھی مبذول کرانا چاہوں گا کہ دیگر پروگرامنگ زبانوں میں ریلیز کے درمیان طویل وقفے کے ساتھ، جیسے Python 2-3، کوئی مطابقت نہیں ہے: یعنی، اگر کوڈ Python 2 میں لکھا گیا ہے، تو آپ اسے 3 میں ترجمہ کرنے میں سخت محنت کرنے کی ضرورت ہے۔ جاوا اس سلسلے میں خاص ہے کیونکہ یہ انتہائی پسماندہ مطابقت رکھتا ہے۔ اس کا مطلب یہ ہے کہ آپ کا Java 5 یا 8 پروگرام جاوا 8-13 ورچوئل مشین پر چلنے کی ضمانت دیتا ہے — چند مستثنیات کے ساتھ جن کے بارے میں آپ کو ابھی فکر کرنے کی ضرورت نہیں ہے۔ یہ واضح ہے کہ یہ دوسری طرح سے کام نہیں کرتا ہے: مثال کے طور پر، اگر آپ کی ایپلی کیشن جاوا 13 فنکشنز استعمال کرتی ہے جو Java 8 JVM میں دستیاب نہیں ہیں۔ میرے پاس آج کے لیے بس اتنا ہی ہے، ان لوگوں کا احترام جنہوں نے اس مقام تک پڑھا ہے)) 8 سے 13 تک: جاوا ورژنز کا مکمل جائزہ۔  حصہ 2 - 5
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION