Java SE 22 پلیٹ فارم کی ریلیز اور OpenJDK 22 اوپن ریفرنس کا نفاذ

چھ ماہ کی ترقی کے بعد، اوریکل نے جاوا SE 22 (جاوا پلیٹ فارم، سٹینڈرڈ ایڈیشن 22) جاری کیا، جو اوپن سورس اوپن جے ڈی کے پروجیکٹ کو حوالہ کے نفاذ کے طور پر استعمال کرتا ہے۔ کچھ متروک خصوصیات کو ہٹانے کے استثنا کے ساتھ، Java SE 22 جاوا پلیٹ فارم کی پچھلی ریلیز کے ساتھ پسماندہ مطابقت برقرار رکھتا ہے - زیادہ تر پہلے لکھے جاوا پروجیکٹ نئے ورژن کے تحت چلنے پر بغیر کسی تبدیلی کے کام کریں گے۔ Java SE 22 (JDK، JRE اور Server JRE) کی انسٹال کرنے کے لیے تیار بلڈز لینکس (x86_64، AArch64)، Windows (x86_64) اور macOS (x86_64، AArch64) کے لیے تیار ہیں۔ OpenJDK پروجیکٹ کے ذریعے تیار کیا گیا، Java 22 ریفرنس کا نفاذ GPLv2 لائسنس کے تحت مکمل طور پر اوپن سورس ہے، جس میں GNU ClassPath استثناء تجارتی مصنوعات کے ساتھ متحرک لنکنگ کی اجازت دیتا ہے۔

Java SE 22 کو باقاعدہ سپورٹ ریلیز کے طور پر درجہ بندی کیا گیا ہے اور اگلی ریلیز تک اپ ڈیٹس موصول ہوتے رہیں گے۔ لانگ ٹرم سپورٹ (LTS) برانچ Java SE 21 یا Java SE 17 ہونی چاہیے، جو بالترتیب 2031 اور 2029 تک اپ ڈیٹس حاصل کرے گی (عام طور پر 2028 اور 2026 تک دستیاب ہے)۔ جاوا SE 11 کی LTS برانچ کے لیے عوامی حمایت گزشتہ ستمبر میں ختم ہو گئی، لیکن توسیعی حمایت 2032 تک جاری رہے گی۔ Java SE 8 کی LTS برانچ کے لیے توسیعی تعاون 2030 تک جاری رہے گا۔

آئیے ہم آپ کو یاد دلاتے ہیں کہ جاوا 10 کی ریلیز کے ساتھ ہی، پروجیکٹ نے ایک نئے ترقیاتی عمل کی طرف رخ کیا، جس کا مطلب نئی ریلیزز کی تشکیل کے لیے ایک چھوٹا سا دور ہے۔ نئی فعالیت اب ایک مسلسل اپ ڈیٹ شدہ ماسٹر برانچ میں تیار کی گئی ہے، جس میں ریڈی میڈ تبدیلیاں شامل ہیں اور جس سے ہر چھ ماہ بعد برانچز کی جاتی ہیں تاکہ نئی ریلیز کو مستحکم کیا جا سکے۔

جاوا 22 میں نئی ​​خصوصیات شامل ہیں:

  • G1 کوڑا اٹھانے والے میں ریجن پننگ کے لیے سپورٹ شامل ہے، جو آپ کو جاوا آبجیکٹ کے مقام کو میموری میں عارضی طور پر ٹھیک کرنے کی اجازت دیتا ہے تاکہ انہیں کوڑا اٹھانے والے کے ذریعے منتقل ہونے سے بچایا جا سکے اور جاوا اور مقامی کوڈ کے درمیان ان اشیاء کے حوالہ جات کو محفوظ طریقے سے منتقل کیا جا سکے۔ پننگ آپ کو تاخیر کو کم کرنے اور JNI (Java Native Interface) کے اہم علاقوں کو مقامی کوڈ کے ساتھ عمل میں لاتے وقت کوڑا اٹھانے کو غیر فعال کرنے سے بچنے کی اجازت دیتی ہے (ان حصوں کو انجام دینے کے دوران، JVM کو نسل کے حالات سے بچنے کے لیے ان سے وابستہ اہم اشیاء کو منتقل نہیں کرنا چاہیے)۔ پننگ کوڑا اٹھانے والے کی نظر سے اہم اشیاء کو ہٹا دیتی ہے، جو بغیر پن والے علاقوں کو صاف کرنا جاری رکھ سکتی ہے۔
  • ایک ابتدائی خصوصیت شامل کی گئی ہے تاکہ super(...) کو کال کرنے سے پہلے کنسٹرکٹرز میں ایکسپریشنز کی وضاحت کی جا سکے، جسے وراثت میں ملنے والے کلاس کنسٹرکٹر سے واضح طور پر پیرنٹ کلاس کنسٹرکٹر کو کال کرنے کے لیے استعمال کیا جاتا ہے اگر یہ تاثرات کنسٹرکٹر کے ذریعہ تخلیق کردہ کسی مثال کا حوالہ نہیں دیتے ہیں۔ کلاس آؤٹر { void ہیلو () { System.out.println("ہیلو")؛ } کلاس اندرونی { اندرونی () { ہیلو (); سپر ()؛ } } }
  • FFM (فارن فنکشن اینڈ میموری) API کو مستحکم کر دیا گیا ہے، جس سے جاوا پروگرامز کو بیرونی لائبریریوں سے فنکشنز کو کال کرکے اور JVM سے باہر میموری تک رسائی حاصل کرکے، JNI (جاوا مقامی انٹرفیس) کا سہارا لیے بغیر بیرونی کوڈ اور ڈیٹا کے ساتھ تعامل کی اجازت دی گئی ہے۔
  • بے نام متغیرات اور پیٹرن کی مماثلت کے لیے سپورٹ کو فعال کردیا گیا ہے - کال کرتے وقت غیر استعمال شدہ لیکن ضروری متغیرات اور پیٹرن کی بجائے، اب آپ "_" کیریکٹر کی وضاحت کرسکتے ہیں۔ // تھا String pageName = سوئچ (صفحہ) { کیس GitHubIssuePage(var url, var مواد، var لنکس، int issueNumber) -> "ISSUE #" + issueNumber; ... }; // اب آپ String pageName = سوئچ (صفحہ) { کیس GitHubIssuePage(_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • جاوا کلاس فائلوں کو پارس کرنے، تخلیق کرنے اور تبدیل کرنے کے لیے کلاس فائل API کا ابتدائی نفاذ تجویز کیا گیا ہے۔ ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes)؛ byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
  • جاوا یوٹیلیٹی جاوا پروگراموں کو چلانے کی صلاحیت فراہم کرتی ہے، جو کئی کوڈ فائلوں یا پہلے سے مرتب شدہ کلاس لائبریریوں کی شکل میں فراہم کی جاتی ہے، ان فائلوں کو الگ سے مرتب کیے بغیر اور بلڈ سسٹم کو کنفیگر کیے بغیر۔ نیا فیچر ایسے پروگراموں کو چلانا آسان بناتا ہے جس میں مختلف کلاسز کے کوڈ کو الگ الگ فائلوں میں تقسیم کیا جاتا ہے۔ Prog.java: کلاس Prog { عوامی جامد باطل مین(String[] args) { Helper.run(); } } Helper.java: کلاس ہیلپر { static void run() { System.out.println("ہیلو!"); } }

    مثال کے طور پر، دو فائلوں "Prog.java" اور "Helper.java" پر مشتمل پروگرام چلانے کے لیے اب "java Prog.java" کو چلانا کافی ہے، جو Prog کلاس کو مرتب کرے گا، ہیلپر کلاس کے حوالے کی وضاحت کرے گا، ہیلپر فائل کو تلاش کریں اور مرتب کریں اور مین طریقہ کو کال کریں۔

  • اسٹرنگ ٹیمپلیٹس کا دوسرا ابتدائی نفاذ شامل کیا گیا، سٹرنگ لٹریلز اور ٹیکسٹ بلاکس کے علاوہ لاگو کیا گیا۔ سٹرنگ ٹیمپلیٹس آپ کو + آپریٹر کا استعمال کیے بغیر ٹیکسٹ کو حسابی اظہار اور متغیر کے ساتھ جوڑنے کی اجازت دیتے ہیں۔ ایکسپریشنز کا متبادل متبادل \{..} کا استعمال کرتے ہوئے کیا جاتا ہے، اور متبادل اقدار کی درستگی کو جانچنے کے لیے خصوصی ہینڈلرز کو جوڑا جا سکتا ہے۔ مثال کے طور پر، ایس کیو ایل انجن ایس کیو ایل کوڈ میں بدلی جانے والی اقدار کو چیک کرتا ہے اور آؤٹ پٹ کے طور پر java.sql.Statement آبجیکٹ واپس کرتا ہے، جب کہ JSON پروسیسر JSON متبادل کی درستگی پر نظر رکھتا ہے اور JsonNode واپس کرتا ہے۔ سٹرنگ استفسار = "منتخب کریں * فرد سے جہاں p." + پراپرٹی + " = '" + ویلیو + "'"؛ // تھا اسٹیٹمنٹ استفسار = SQL." // بن گیا۔
  • ویکٹر API کا ساتواں پیش نظارہ شامل کیا گیا ہے، جو ویکٹر کیلکولیشنز کے لیے فنکشن فراہم کرتا ہے جو x86_64 اور AArch64 پروسیسرز پر ویکٹر ہدایات کا استعمال کرتے ہوئے انجام دیا جاتا ہے اور آپریشنز کو ایک سے زیادہ اقدار (SIMD) پر بیک وقت لاگو کرنے کی اجازت دیتا ہے۔ اسکیلر آپریشنز کے آٹو ویکٹرائزیشن کے لیے HotSpot JIT کمپائلر میں فراہم کردہ صلاحیتوں کے برعکس، نیا API متوازی ڈیٹا پروسیسنگ کے لیے واضح طور پر ویکٹرائزیشن کو کنٹرول کرنا ممکن بناتا ہے۔
  • توسیع شدہ سٹریم API کا ایک ابتدائی نفاذ شامل کیا گیا ہے جو آپ کے اپنے انٹرمیڈیٹ آپریشنز کی وضاحت میں معاونت کرتا ہے، جو ان صورتوں میں کارآمد ہو سکتا ہے جہاں موجودہ بلٹ ان انٹرمیڈیٹ آپریشنز مطلوبہ ڈیٹا کی تبدیلی کے لیے کافی نہیں ہیں۔ مقامی ہینڈلرز نئے انٹرمیڈیٹ آپریشن Stream::gather(Gatherer) کا استعمال کرتے ہوئے جڑے ہوئے ہیں، جو صارف کے مخصوص ہینڈلر کو لاگو کرکے اسٹریم عناصر پر کارروائی کرتا ہے۔ jshell> Stream.of(1,2,3,4,5,6,7,8,9). gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4، 5، 6]، [7، 8، 9]]
  • سٹرکچرڈ کنکرنسی کے لیے تجرباتی API کا دوسرا ورژن جانچ کے لیے تجویز کیا گیا ہے، جو ایک ہی بلاک کے طور پر مختلف تھریڈز میں کیے گئے متعدد کاموں پر کارروائی کرکے ملٹی تھریڈ ایپلی کیشنز کی ترقی کو آسان بناتا ہے۔
  • واضح طور پر اعلان کردہ کلاسز اور "مین" طریقہ کار کی بے نام مثالوں کا دوسرا ابتدائی نفاذ شامل کیا گیا، جو عوامی/جامد اعلانات، دلائل کی ایک صف کو پاس کرنے، اور کلاس ڈیکلریشن سے وابستہ دیگر اداروں کو ختم کر سکتا ہے۔ // پبلک کلاس تھی ہیلو ورلڈ { عوامی جامد باطل مین(String[] args) { System.out.println("Hello world!"); } } // اب آپ مین() { System.out.println("ہیلو، ورلڈ!") کو کالعدم کر سکتے ہیں۔ }
  • اسکوپڈ ویلیوز کا دوسرا پیش نظارہ نفاذ شامل کیا گیا، جس سے ناقابل تغیر ڈیٹا کو تھریڈز میں شیئر کیا جا سکتا ہے اور چائلڈ تھریڈز کے درمیان مؤثر طریقے سے ڈیٹا کا تبادلہ کیا جاتا ہے (قدریں وراثت میں ملتی ہیں)۔ اسکوپڈ ویلیوز کو تھریڈ لوکل ویری ایبل میکانزم کو تبدیل کرنے کے لیے تیار کیا جا رہا ہے اور بہت زیادہ تعداد میں ورچوئل تھریڈز (ہزاروں یا لاکھوں تھریڈز) استعمال کرتے وقت زیادہ کارآمد ہیں۔ Scoped Values ​​اور thread-local variables کے درمیان بنیادی فرق یہ ہے کہ سابقہ ​​کو ایک بار لکھا جاتا ہے، مستقبل میں تبدیل نہیں کیا جا سکتا، اور صرف تھریڈ کے نفاذ کی مدت تک دستیاب رہتا ہے۔
  • متوازی کچرا جمع کرنے والے نے اشیاء کی بڑی صفوں کے ساتھ کام کرتے وقت کارکردگی کو بہتر بنایا ہے۔ آپٹمائزیشن نے کچھ ٹیسٹوں میں اشیاء کی بڑی صفوں کے ساتھ 20% کسی چیز کی تلاش شروع کرنے سے پہلے تاخیر کو کم کرنا ممکن بنایا۔

مزید برآں، آپ گرافیکل انٹرفیس JavaFX 22 کے ساتھ ایپلیکیشنز بنانے کے لیے پلیٹ فارم پر اپ ڈیٹ کی اشاعت کو نوٹ کر سکتے ہیں۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں