JavaRush /جاوا بلاگ /Random-UR /نیا جاوا... دوبارہ... جاوا 10 سے ملیں۔

نیا جاوا... دوبارہ... جاوا 10 سے ملیں۔

گروپ میں شائع ہوا۔
اس سے پہلے، ڈویلپرز نے کئی سالوں تک نئے جاوا کا انتظار کیا، کچھ خوف کے ساتھ، اور کچھ امید کے ساتھ۔ وقت بدل گیا ہے، اور JDK کے نئے ورژن ہر چھ ماہ بعد ہمیں خوش کریں گے۔ اگر آپ کے لیے ابھی تک یہ واضح نہیں ہے کہ اس سے کیا نتیجہ نکلے گا، تو ماہر کی رائے دیکھیں ، اور یہاں ہم اپنی پسندیدہ زبان کے جدید ترین ورژن Java 10 میں اہم تبدیلیوں کی فہرست بنائیں گے۔ نیا جاوا... دوبارہ... جاوا 10 - 1 سے ملیں۔نئی "خصوصیت" سے پہلے مربع بریکٹ میں JEP نمبر کی نشاندہی کی گئی ہے، یعنی "JDK Enchancement Proposal"۔ JEP OpenJDK کو بہتر بنانے کی تجویز ہے اور اسے منظور، تاخیر، یا مسترد کیا جا سکتا ہے۔ یعنی، جوہر میں، JEPs کا مجموعہ OpenJDK کے لیے ترقیاتی حکمت عملی ہے۔

جاوا 10 کی اہم خصوصیات

[286] لوکل ویری ایبل ٹائپ انفرنس - جاوا میں var کلیدی لفظ متعارف کرانے کی تجویز، جس سے مقامی متغیر کی قسم کو واضح طور پر بیان کرنے کی ضرورت کو ختم کیا جائے۔ یعنی، اب آپ ابتدائی متغیر کی قسم کی وضاحت نہیں کر سکتے، لیکن کچھ اس طرح لکھیں:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
یہ ArrayList<String> قسم کی تعریف کی نقل کو ختم کرتا ہے جسے ہمیں پہلے استعمال کرنا پڑتا تھا۔ یہ نوٹ کرنا دلچسپ ہے کہ var کلیدی لفظ نہیں بنتا، بلکہ ایک مخصوص قسم ہے۔ یعنی، آپ var کو کسی متغیر، طریقہ یا پیکیج کے نام کے طور پر استعمال کر سکتے ہیں۔ لیکن آپ کلاس کا نام اس طرح نہیں رکھ پائیں گے (کیا نقصان!) [296] JDK جنگل کو ایک ہی ذخیرہ میں ضم کرنا ۔ JDK 9 میں آٹھ ذخیرے ہیں - روٹ، کوربا، ہاٹ اسپاٹ، jaxp، jaxws، jdk، langtools، nashorn۔ جاوا 10 میں، اس پورے جنگل کو ایک واحد ذخیرے میں جوڑ دیا جائے گا تاکہ ایک دوسرے پر منحصر تبدیلیوں کے ذخیروں میں جوہری کمٹ انجام دینا ممکن بنایا جا سکے۔ گاربیج کلیکٹر انٹرفیس ایسا انٹرفیس نہیں ہے جسے ڈویلپرز کوڑے کو جمع کرنے پر قابو پانے کے لیے استعمال کر سکتے ہیں۔ اس کے بجائے، ہمیں JVM سورس کوڈ میں ایک صاف کچرا جمع کرنے والا انٹرفیس ملتا ہے، جس سے آپ متبادل جمع کرنے والوں کو جلدی اور آسانی سے مربوط کر سکتے ہیں۔ وہ لوگ جنہوں نے JVM میں اپنا کوڑا اٹھانے والے کو شامل کرنے کا خواب دیکھا تھا وہ اس بہتری سے سب سے زیادہ خوش ہوں گے۔ [307] G1 کوڑا اٹھانے والے کے لیے متوازی مکمل GC ۔ JDK 9 میں، G1 پہلے سے طے شدہ کوڑا اٹھانے والا بن گیا، جبکہ پہلے سے طے شدہ کوڑا اٹھانے والا متوازی GC تھا، جو متعدد دھاگوں سے کچرا جمع کر سکتا تھا۔ اب G1 یہ بھی کر سکتا ہے؛ پہلے یہ ایک تھریڈ میں کرتا تھا، جس کی وجہ سے بعض اوقات مشکلات ہوتی تھیں۔ ویسے، ڈویلپرز - XX:ParallelGCThreads. [310] ایپلی کیشن کلاس-ڈیٹا شیئرنگ پیرامیٹر کا استعمال کرتے ہوئے تھریڈز کی تعداد کو ترتیب دینے کے قابل ہو جائیں گے- یہ ترقی، جاوا 10 میں اپنائی گئی، بہتر لوڈنگ اور ٹریکنگ پیش کرتی ہے، موجودہ کلاس شیئرنگ (CDS) کی خصوصیت کو بڑھاتی ہے۔ درخواست کی کلاسوں کو عام محفوظ شدہ دستاویزات میں واقع ہونے کی اجازت دینے کے لیے۔ *کلاس ایکسٹینشن والی فائلوں کے ساتھ مختصر کام کے لیے کلاس ڈیٹا شیئرنگ یا CDS۔ یہ فنکشن آپ کو کلاسز کے ایک مخصوص ذیلی سیٹ کو منتخب کرنے، ان پر کارروائی کرنے اور انہیں ایک خاص آرکائیو میں کمپریس کرنے کی اجازت دیتا ہے۔ یہ سب میموری کو بچانے کے لیے کیا جاتا ہے۔ اکثر JVM کی مختلف مثالیں معیاری لائبریری میں شامل کلاسوں کو لوڈ کرتی ہیں۔ اور CDS ان تمام JVM مثالوں کو اس میں رکھی ہوئی کلاسوں کے ساتھ ایک ہی آرکائیو کا اشتراک کرنے کی اجازت دیتا ہے۔ اس سے پروگرام کی لوڈنگ کا وقت اور میموری کا استعمال دونوں کم ہو جاتے ہیں۔ درحقیقت، CDS JVM اسٹارٹ اپ کی کارکردگی کو بہتر بناتا ہے اور جب ایک سے زیادہ JVMs ایک ہی فزیکل یا ورچوئل مشین پر چل رہے ہوں، ورژن 5 سے شروع ہو کر ریسورس فوٹ پرنٹ کو کم کرتا ہے۔ لیکن پہلے سی ڈی ایس کا استعمال صرف بوٹسٹریپ لوڈر تک محدود تھا۔ اب ایپلی کیشن سی ڈی ایس نامی ایک توسیعی ورژن آپ کو دوسرے لوڈرز کے لیے کلاسز کے ساتھ خصوصی آرکائیوز لوڈ کرنے کی اجازت دیتا ہے۔ [312] تھریڈ-لوکل ہینڈ شیکس JVM کے اندر کافی نچلی سطح کی تبدیلی ہے جو عالمی VM سیفٹی پوائنٹ کو چلائے بغیر تھریڈز میں کال بیکس کو انجام دینے کی اجازت دے گی۔ اس سے آپ کو انفرادی تھریڈز کو ایک ساتھ بند کرنے کی اجازت ملے گی، بجائے اس کے کہ ایک ہی وقت میں (یا کوئی بھی نہیں)۔ [313] مقامی ہیڈر جنریشن ٹول (javah) کو ہٹا دیں ۔ جاوا 9 میں، زبان کے ڈویلپرز نے فعال طور پر غیر ضروری ٹولز کو ہٹانا شروع کیا، اور JEP 313 اس اچھے کام کو جاری رکھے ہوئے ہے۔ اگر کوڈ میں مقامی طریقے موجود ہیں تو javah ٹول JNI ہیڈر تیار کرتا ہے۔ صحت مند؟ بلاشبہ، لیکن مقامی javac مرتب کرنے والا، JDK 8 سے شروع ہوتا ہے، خود JNI ہیڈر بنا سکتا ہے۔ تو اب انہوں نے جاوا سے جان چھڑانے کا فیصلہ کیا۔ ویسے، پاناما پروجیکٹ اس وقت تیار کیا جا رہا ہے ، جو خاص طور پر جے این آئی کی جگہ لے سکتا ہے۔ [314] اضافی یونیکوڈ لینگویج ٹیگ ایکسٹینشنز اس تبدیلی کا مقصد java.util.Locale کلاس اور متعلقہ APIs کو بہتر بنانا ہے تاکہ BCP 47 لینگویج ٹیگز میں اضافی یونیکوڈ ایکسٹینشن لاگو کیا جا سکے۔ خاص طور پر کرنسی کی قسم (cu) کے لیے ٹیگز، پہلے دن اب ہفتہ (fw)، علاقہ (rg) اور ٹائم زون (tz) اوور رائیڈز کو سپورٹ کیا جائے گا۔ متبادل میموری ڈیوائسز پر ہیپ ایلوکیشن یہ اختراع ان لوگوں کی مدد کرے گی جو DRAM کے علاوہ میموری کی اقسام استعمال کرتے ہیں۔ چونکہ ٹیکنالوجیز مسلسل بدل رہی ہیں، اسی لیے ایک ہی انٹرفیس اور DRAM کی طرح کارکردگی کی خصوصیات کے ساتھ نان ولیٹائل میموری کا استعمال آج ایک معروضی حقیقت ہے۔ لہذا، JEP 316 JVM کو دوسری قسم کی میموری میں ڈھیر لگانے کی اجازت دیتا ہے۔ [317] تجرباتی جاوا پر مبنی جے آئی ٹی کمپائلر ۔ میٹروپولیس پروجیکٹ کا حال ہی میں اعلان کیا گیا تھا، جس میں زیادہ تر JVM کو جاوا میں دوبارہ لکھنے کی تجویز ہے۔ اگر آپ نہیں جانتے تھے تو موجودہ ورژن C++ میں لکھا ہوا ہے۔ ٹھیک ہے، اگر آپ پہلے سے ہی جانتے ہیں، تو شاید شروع میں ایسا خیال آپ کو عجیب لگے گا. چونکہ JVM جاوا میں لکھا گیا ہے، کیا آپ کو JVM چلانے کے لیے JVM کی ضرورت نہیں ہوگی؟ اس طرح کی تکرار ہے، ایک دوسرے کے مخالف آئینے کی یاد دلاتی ہے۔ تاہم، حقیقت تھوڑی مختلف ہے: صرف اس وجہ سے کہ JVM جاوا میں لکھا گیا ہے، اس کا مطلب یہ نہیں ہے کہ آپ کو اسے بائی کوڈز میں مرتب کرنا ہوگا۔ آپ اصل میں AOT تالیف کا استعمال کر سکتے ہیں اور پھر JIT کوڈ کو مرتب کرتا ہے کیونکہ یہ کارکردگی کو بہتر بنانے کے لیے کام کرتا ہے۔

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

کمپائلر مختلف طریقوں سے کام انجام دے سکتا ہے: JIT کمپائلیشن (صرف وقت میں) - متحرک، پروگرام کے عمل کے دوران، یا AOT تالیف (وقت سے پہلے) - عملدرآمد سے پہلے۔

jaotc AOT کمپائلر JDK 9 میں متعارف کرایا گیا تھا۔ فی الحال، Hotspot JVM میں دو JIT کمپائلر، C1 (رفتار کے لیے) اور C2 (بہتری کے لیے) شامل ہیں۔

JEP 317 نے Graal ریسرچ پروجیکٹ متعارف کرایا، جو JDK کے لیے ایک کمپائلر ہے۔ یہ ایک خاص بنیاد ہے جو Metropolis کو حقیقت بنانے میں مدد کرے گی اور JVM کو کارکردگی میں C++ میں لکھے گئے موجودہ ورژن سے مماثل (یا اس سے بہتر، حد سے زیادہ) کے قابل بنائے گی۔ روٹ سرٹیفکیٹس JDK میں معیاری سرٹیفیکیشن اتھارٹی (CA) سرٹیفکیٹس کا ڈیفالٹ سیٹ ہیں۔ اہم حفاظتی اجزاء جیسے TLS اب OpenJDK تعمیرات میں بطور ڈیفالٹ کام کریں گے۔ یہ مفید اضافہ ممکنہ طور پر اس کا حصہ ہے جو اوریکل اس بات کو یقینی بنانے کے لیے کر رہا ہے کہ اوپن جے ڈی کے بائنریز اور اوریکل جے ڈی کے بائنریز عملی طور پر ایک جیسے ہیں۔ وقت پر مبنی ریلیز ورژننگ - جاوا 10 میں، فیچر ریلیز میں نئی ​​خصوصیات شامل کی جائیں گی، اور اپ ڈیٹ ریلیز میں کیڑے ٹھیک کیے جائیں گے۔ بنیادی طور پر، ہمارے پاس JDK ورژن سٹرنگ فارمیٹس سیٹ کرنے کا ایک نیا طریقہ ہے۔ یہ JDK 9 کے ساتھ ایک عجیب و غریب صورتحال کو ٹھیک کرتا ہے۔ پہلی اپ ڈیٹ JDK 9.0.1 تھی، جو کہ کافی منطقی ہے۔ دوسری اپ ڈیٹ JDK 9.0.4 ہے، جو کہ غیر منطقی ہے۔ منطق یہ ہے کہ JDK 9 ورژن نمبرنگ اسکیم کے اندر، ہنگامی صورت حال، غیر منصوبہ بند اپ ڈیٹ کی صورت میں اپ ڈیٹس کے درمیان جگہ چھوڑ دی جاتی ہے۔ چونکہ اپ ڈیٹ ضروری نہیں تھا، کیوں نہ اسے صرف JDK 9.0.2 کہا جائے؟ اور یہ ہے کہ نیا جاوا ورژن فارمیٹ کیسا لگتا ہے:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

نئے APIs

JDK 10 معیاری کلاس لائبریریوں میں 73 اضافے ہیں۔
  • java.awt.Toolkit

    int getMenuShortcutKeyMaskEx (): وضاحت کرتا ہے کہ کون سی توسیعی موڈیفائر کلید شارٹ کٹ مینو کے لیے متعلقہ ایکسلریٹر کلید ہے۔

  • java.awt.geom.Path2D:

    void trimToSize (): اس مثال کی صلاحیت کو Path2Dاس کے موجودہ سائز تک تراشتا ہے۔ ایک ایپلیکیشن اس آپریشن کو پاتھ اسٹوریج کو کم سے کم کرنے کے لیے استعمال کر سکتی ہے۔ اسی طریقہ کو اندرونی کلاسوں میں شامل کیا گیا ہے Path2D.Doubleاور Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): overloaded toString، مخصوص انکوڈنگ کا استعمال کرتے ہوئے بائٹس کو ڈی کوڈ کرکے بفر کے مواد کو سٹرنگ میں تبدیل کرتا ہے۔

  • java.io.PrintStream اور lang.io.PrintWriter:

    ان دونوں کلاسوں میں تین نئے کنسٹرکٹرز ہیں جو ایک اضافی دلیل لیتے ہیں charset۔

  • java.io.Reader:

    long transferTo (Writer): اس قاری کے تمام حروف کو پڑھتا ہے اور حروف کو اس ترتیب میں لکھتا ہے جس میں وہ پڑھے جاتے ہیں۔

  • java.lang.Runtime.Version:

    چار نئے طریقے جو سٹرنگ فیلڈز کے نئے ورژن (JEP 322) کے لیے عددی قدر واپس کرتے ہیں: feature (), interim (), patch ()and update ().

  • java.lang.StackWalker.StackFrame:

  • اسٹرنگ getDescriptor():

    اس اسٹیک فریم کے ذریعہ پیش کردہ طریقہ پر ایک ہینڈل لوٹاتا ہے، جیسا کہ جاوا ورچوئل مشین اسپیسیفیکیشن کے ذریعہ بیان کیا گیا ہے۔

  • اسٹرنگ getMethodType():

    واپسی MethodType، پیرامیٹر کی اقسام کی نمائندگی کرتا ہے اور اسٹیک فریم کے ذریعہ پیش کردہ طریقہ کے لئے واپسی کی قسم۔

  • java.lang.invoke.MethodType:

    Class <?> LastParameterType (): возвращает последний тип параметра этого типа метода. Если этот тип не имеет параметров, instead of него возвращается meaning sentinel void.class.

  • java.lang.management.RuntimeMXBean:

    long getPid () возвращает pid запущенной виртуальной машины Java.

  • java.lang.management.ThreadMXBean:

    ThreadInfo [] dumpAllThreads (boolean, boolean, int): возвращает информацию о потоке для всех потоков в реальном времени с трассировкой стека с указанным максимальным количеством элементов и информацией о синхронизации.

  • ThreadInfo [] getThreadInfo (long [], boolean, boolean, int):

    возвращает информацию о потоке для каждого потока, чья идентификация находится во входном массиве, с трассировкой стека указанного максимального количества элементов и информацией о синхронизации.

  • java.lang.reflect.MalformedParameterizedTypeException:

    добавлен новый конструктор, который принимает подробное сообщение в виде строки в качестве параметра.

  • java.net.URLDecoder и java.net.URLEncoder:

    оба этих класса получor новые перегруженные методы расcodeирования и codeирования, которые используют charset в качестве дополнительного параметра.

  • java.nio.channels.Channels:

    Два новых статических перегруженных метода, newReader (ReadByteChannel, Charset) и newWriter (WriteByteChannel, Charset), которые позволяют использовать charset.

  • java.nio.file.FileStore:

    long getBlockSize (): возвращает количество byteов на блок в этом хранorще файлов.

  • java.time.chrono:

    три класса в этом пакете, HijrahEra, MiinguoEra и ThaiBuddhistEra, получor метод String getDisplayName (TextStyle, Locale). Он возвращает текстовое Name, используемое для идентификации эпохи, подходящее для представления пользователю.

  • java.time.format.DateTimeFormatter:

    localizedBy (Locale): возвращает копию этого форматтера с локализованными значениями языка, календаря, региона, десятичного стиля и / or часового пояса, которые заменяют значения в этом формате.

  • java.util:

    DoubleSummaryStatistics, IntSummaryStatistics и LongSummaryStatistics получor новый конструктор, который принимает четыре числовых значения. Он создает непустой экземпляр с указанным счетчиком, минимумом, максимумом и суммой.

  • java.util.List, java.util.Map и java.util.Set:

    каждый из этих интерфейсов обзавёлся новым статическим методом copyOf (Collection). Они возвращают неизменяемые List, Map or Set, содержащие элементы данной коллекции, в своем порядке итерации.

  • java.util.Optional, java.util.OptionalDouble, java.util.OptionalInt, java.util.OptionalLong:

    каждый из этих классов получает новый метод orElseThrow (), который по существу делает то же самое, что и get (), то есть если condition выполняется, meaning возвращается. В противном случае генерируется исключение NoSuchElementException.

  • java.util.Formatter и java.util.Scanner:

    Оба этих класса получor три новых конструктора, которые на вход получают charset в дополнение к другим аргументам.

  • java.util.Properties:

    Здесь появился новый конструктор, который принимает аргумент int. Это создает пустой список свойств без значений по умолчанию и с начальным размером, содержащим указанное количество элементов без необходимости динамического изменения размера. Также появилась новая, перегруженная version метода replace, которая принимает три параметра Object и возвращает логическое meaning.

  • java.SplittableRandom:

    void nextBytes (byte []): заполняет предоставленный пользователем массив byteов с генерируемыми псевдослучайными byteами.

  • java.util.concurrent.FutureTask:

    добавлен метод toString (), который возвращает строку, идентифицирующую FutureTask, а также ее состояние завершения. Состояние (в скобках) содержит одну из строк: «Completed Normally» (нормальное завершение), «Completed Exceptionally» (завершение с исключением), «Cancelled» (отменено) or «Not completed» (не завершено).

  • java.util.concurrent.locks.StampedLock:

    новые методы boolean isLockStamp (long), boolean isOptimisticReadStamp (long), boolean isReadLockStamp (long) и boolean isWriteLockStamp (long).

  • java.jar.JarEntry:

    String getRealName (): возвращает настоящее Name этого JarEntry. Если JarEntry является записью мультирелизного jar-file, настроенного для обработки, тогда Name, возвращаемое этим методом — Name пути версии, которую представляет JarEntry. Иначе JarEntry возвращает то же Name, что и ZipEntry.getName ().

  • java.util.jar.JarFile:

    Stream <JarEntry> versionedStream (): возвращает поток записей в файле с версией jar. Подобно методу getRealName для JarEntry, связан с мультирелизными jar-fileми.

  • java.util.spi.LocaleNameProvider:

    getDisplayUnicodeExtensionKey (String, Locale): возвращает локализованное Name для данного Unicode extension key. getDisplayUnicodeExtensionType (String, String, Locale): возвращает локализованное Name для данного Unicode extension key.

  • java.util.stream.Collectors:

    toUnmodifiableList (), toUnmodifiableSet (), toUnmodifiableMap (Function, Function), toUnmodifiableMap (Function, Function, BinaryOperator) — эти четыре новых метода возвращают коллекторы (Collectors), которые накапливают входные элементы в соответствующую немодифицируемую коллекцию.

  • java.lang.model.SourceVersion:

    теперь это поле RELEASE_10 для представления версии JDK 10.

  • java.lang.model.util.TypeKindVisitor6 и javax.lang.model.util.TypeKindVisitor9:

    что-то не вполне понятное:).

  • R visitNoTypeAsModule (NoType, P):

    посещает псевдо-тип MODULE.

  • javax.remote.management.rmi.RMIConnectorServer:

    У этого класса было добавлено два поля: CREDENTIALS_FILTER_PATTERN и SERIAL_FILTER_PATTERN.

  • javax.ButtonModel:

    Представляете, Swing все еще обновляется!

  • ButtonGroup getGroup ():

    возвращает группу, к которой принадлежит кнопка. Обычно используется с radio buttons, которые являются взаимоисключающими в своей группе.

  • javax.plaf.basic.BasicMenuUI:

    Dimension getMinimumSize (JComponent): возвращает минимальный размер указанного компонента, подходящий для внешнего вида.

تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION