JavaRush /جاوا بلاگ /Random-SD /نئون جاوا... ٻيهر... جاوا 10 سان ملو

نئون جاوا... ٻيهر... جاوا 10 سان ملو

گروپ ۾ شايع ٿيل
اڳي، ڊولپر ڪيترن ئي سالن تائين نئين جاوا جو انتظار ڪندا هئا، ڪجهه ڊار سان، ۽ ڪجهه اميد سان. وقت بدلجي چڪو آهي، ۽ JDK جا نوان نسخا اسان کي هر ڇهن مهينن ۾ خوش ٿيندا. جيڪڏهن اهو اڃا توهان لاءِ واضح ناهي ته اهو ڇا ٿيندو، ماهرن جي راءِ کي ڏسو ، ۽ هتي اسان جاوا 10 ۾ بنيادي تبديلين کي لسٽ ڪنداسين، جيڪو اسان جي پسنديده ٻولي جو جديد نسخو آهي. نئون جاوا... ٻيهر... جاوا 10 - 1 سان ملونئين ”خصوصيت“ کان اڳ چورس بریکٹ ۾ JEP نمبر اشارو ڪيو ويو آهي، اهو آهي، ”JDK واڌارو پروپوزل“. JEP هڪ تجويز آهي OpenJDK کي بهتر ڪرڻ لاءِ ۽ ٿي سگهي ٿي منظور، دير، يا رد. اهو آهي، جوهر ۾، JEPs جو هڪ مجموعو OpenJDK لاءِ هڪ ترقياتي حڪمت عملي آهي.

جاوا 10 جون اهم خاصيتون

[286] Local-variable Type Inference - ھڪ تجويز جاوا ۾ var لفظ متعارف ڪرائڻ لاءِ، ھڪڙي مقامي متغير جي قسم کي واضح طور تي بيان ڪرڻ جي ضرورت کي ختم ڪندي. اهو آهي، هاڻي توهان شروعاتي متغير جي قسم جي وضاحت نٿا ڪري سگهو، پر ڪجهه لکو جيئن:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
هي ArrayList<String> قسم جي تعريف جي نقل کي ختم ڪري ٿو جيڪو اسان کي اڳ ۾ استعمال ڪرڻو پوندو. اهو نوٽ ڪرڻ دلچسپ آهي ته var هڪ لفظ نه بڻجي ٿو، پر هڪ محفوظ قسم آهي. اھو آھي، توھان var استعمال ڪري سگھو ٿا ھڪڙي متغير، طريقو، يا پيڪيج جي نالي سان. پر توهان انهي طريقي سان ڪلاس جو نالو نه وٺي سگهندا (ڇا نقصان!). [296] JDK ٻيلي کي هڪ واحد مخزن ۾ ضم ڪرڻ . JDK 9 وٽ اٺ مخزن آهن - روٽ، ڪوربا، هٽ اسپاٽ، جيڪسپ، جيڪس، جي ڊي جي، لانگ ٽولز، نيشورن. جاوا 10 ۾، هي سڄو ٻيلو هڪ واحد مخزن ۾ گڏ ڪيو ويندو ته جيئن اهو ممڪن بڻائي سگهجي ته هڪ ٻئي تي منحصر تبديلين جي ذخيرن ۾ ايٽمي ڪمن کي انجام ڏيڻ. گاربيج ڪليڪٽر انٽرفيس ڪو انٽرفيس نه آهي جيڪو ڊولپرز پاران ڪچرو گڏ ڪرڻ کي ڪنٽرول ڪرڻ لاءِ استعمال ڪري سگهجي. ان جي بدران، اسان JVM سورس ڪوڊ ۾ صاف ڪچرو ڪليڪٽر انٽرفيس حاصل ڪندا آهيون، توهان کي جلدي ۽ آساني سان متبادل ڪليڪٽرن کي ضم ڪرڻ جي اجازت ڏئي ٿي. جن جو خواب ڏٺو هو ته پنهنجي گندگي ڪليڪٽر کي JVM ۾ شامل ڪيو وڃي هن سڌاري سان تمام گهڻو خوش ٿيندو. [307] متوازي مڪمل GC G1 گندگي ڪليڪٽر لاءِ . JDK 9 ۾، G1 ڊفالٽ گاربيج ڪليڪٽر بڻجي ويو، جڏهن ته اڳي ڊفالٽ گاربيج ڪليڪٽر Parallel GC هو، جيڪو ڪيترن ئي موضوعن تي ڪچرو گڏ ڪري سگهي ٿو. هاڻي G1 اهو به ڪري سگهي ٿو؛ اڳي اهو هڪ سلسلي ۾ ڪيو هو، جيڪو ڪڏهن ڪڏهن مشڪلاتن جو سبب بڻيو. رستي ۾، ڊولپرز استعمال ڪندي سلسلي جو تعداد ترتيب ڏيڻ جي قابل هوندا - XX:ParallelGCThreads. [310] ايپليڪيشن ڪلاس-ڊيٽا شيئرنگ پيٽرولر - هي ترقي، جاوا 10 ۾ اختيار ڪئي وئي، بهتر لوڊنگ ۽ ٽريڪنگ پيش ڪري ٿي، موجوده ڪلاس شيئرنگ (CDS) خاصيت کي وڌايو. ايپليڪيشن ڪلاس کي عام آرڪائيو ۾ واقع ٿيڻ جي اجازت ڏيڻ لاء. ڪلاس-ڊيٽا شيئرنگ يا سي ڊي ايس مختصر ڪم لاءِ فائلن سان گڏ *ڪلاس ايڪسٽينشن سان. هي فنڪشن توهان کي اجازت ڏئي ٿو ته ڪلاسن جو هڪ مخصوص سبسٽ چونڊيو، انهن کي پروسيس ڪريو ۽ انهن کي خاص آرڪائيو ۾ دٻايو. اهو سڀ ڪجهه ياداشت کي بچائڻ لاء ڪيو ويو آهي. اڪثر JVM جا مختلف مثال ساڳيا ڪلاس لوڊ ڪن ٿا جيڪي معياري لائبريري ۾ شامل آهن. ۽ سي ڊي ايس انهن سڀني JVM مثالن کي اجازت ڏئي ٿو ته ان ۾ رکيل ڪلاسن سان هڪ واحد آرڪائيو شيئر ڪري. هي پروگرام لوڊ ڪرڻ وقت ۽ ميموري استعمال ٻنهي کي گھٽائي ٿو. حقيقت ۾، سي ڊي ايس JVM جي شروعاتي ڪارڪردگي کي بهتر بڻائي ٿو ۽ وسيلن جي نقشن کي گھٽائي ٿو جڏهن ڪيترن ئي JVMs ساڳئي جسماني يا ورچوئل مشين تي هلائي رهيا آهن، نسخ 5 سان شروع ٿيندي. پر اڳ ۾ سي ڊي ايس جو استعمال صرف بوٽ اسٽريپ لوڊر تائين محدود هو. ھاڻي ھڪڙو وڌايل ورجن سڏيو ويندو آھي ايپليڪيشن سي ڊي ايس توھان کي خاص آرڪائيو لوڊ ڪرڻ جي اجازت ڏئي ٿو ٻين لوڊرز لاءِ ڪلاسن سان. [312] Thread-Local Handshakes JVM جي اندر هڪ انتهائي گهٽ سطحي تبديلي آهي جيڪا عالمي VM حفاظتي نقطي کي هلائڻ کان سواءِ ٿريڊن تي ڪال بڪ کي عمل ۾ آڻڻ جي اجازت ڏئي ٿي. هي توهان کي اجازت ڏيندو ته توهان انفرادي موضوعن کي بغير ڪنهن قيمت تي بند ڪري سگهون ٿا، بجاءِ سڀ هڪ ڀيرو (يا ڪو به نه). [313] هٽايو اصلي-هيڊر جنريشن ٽول (javah) . جاوا 9 ۾ واپس، ٻولي ڊولپرز فعال طور تي غير ضروري اوزار کي هٽائڻ شروع ڪيو، ۽ JEP 313 اهو سٺو ڪم جاري رکي ٿو. جاوا ٽول JNI هيڊر ٺاهي ٿو جيڪڏهن ڪوڊ ۾ مقامي طريقا آهن. صحتمند؟ يقينن، پر اصلي جاوا گڏ ڪرڻ وارو، JDK 8 سان شروع ٿئي ٿو، پاڻ کي JNI هيڊر ٺاهي سگھي ٿو. تنهن ڪري هاڻي انهن جاوا کان نجات حاصل ڪرڻ جو فيصلو ڪيو. رستي ۾، پاناما پروجيڪٽ هن وقت ترقي ڪئي پئي وڃي ، جيڪا خاص طور تي، جي اين آئي کي تبديل ڪري سگهي ٿي. [314] اضافي يونيڪوڊ ٻولي-ٽيگ واڌايون هن تبديلي جو مقصد java.util.Locale ڪلاس ۽ لاڳاپيل APIs کي بهتر ڪرڻ لاءِ آهي اضافي يونيڪوڊ ايڪسٽينشن کي BCP 47 ٻولي جي ٽيگ تي لاڳو ڪرڻ لاءِ. خاص طور تي، ڪرنسي جي قسم (cu) لاءِ ٽيگ پهريون ھاڻي مدد ڪئي ويندي ھفتو (fw)، علائقي (rg) ۽ ٽائم زون (tz) اوور رائيڊس. [316] متبادل ميموري ڊوائيسز تي هيپ مختص هي جدت انهن جي مدد ڪندي جيڪي DRAM کان سواءِ ميموري جا قسم استعمال ڪن ٿا. جيئن ته ٽيڪنالاجيون مسلسل تبديل ٿي رهيون آهن، ساڳئي انٽرفيس ۽ DRAM سان ملندڙ ڪارڪردگي جي خاصيتن سان غير مستحڪم ياداشت جو استعمال اڄ هڪ مقصدي حقيقت آهي. تنهن ڪري، JEP 316 JVM کي ٻين قسمن جي ياداشت ۾ ڍير رکڻ جي اجازت ڏئي ٿو. [317] تجرباتي جاوا تي ٻڌل JIT ڪمپلر . ميٽروپوليس پروجيڪٽ جو تازو اعلان ڪيو ويو، جيڪو جاوا ۾ اڪثر 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 لاءِ هڪ مرتب ڪندڙ. اهو هڪ خاص بنياد آهي جيڪو ميٽروپوليس کي هڪ حقيقت ٺاهڻ ۾ مدد ڏيندو ۽ JVM کي ڪارڪردگي ۾ C++ ۾ لکيل موجوده ورزن (يا بهتر اڃا، وڌيڪ) سان ملندو. [319] روٽ سرٽيفڪيٽ معياري سرٽيفڪيشن اٿارٽي (CA) سرٽيفڪيٽن جو ڊفالٽ سيٽ آهن JDK ۾. نازڪ سيڪيورٽي حصا جيئن ته TLS هاڻي ڪم ڪندو ڊفالٽ طور OpenJDK تعميرات ۾. اهو مفيد اضافو ممڪن آهي ته Oracle ڇا ڪري رهيو آهي انهي کي يقيني بڻائڻ لاءِ ته OpenJDK بائنريز ۽ Oracle JDK بائنريز فنڪشنل طور تي ساڳيا آهن. [322] ٽائم بيسڊ رليز ورشننگ - جاوا 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