جاوا 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 (بہتری کے لیے) شامل ہیں۔ |
[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)
: overloadedtoString
، مخصوص انکوڈنگ کا استعمال کرتے ہوئے بائٹس کو ڈی کوڈ کرکے بفر کے مواد کو سٹرنگ میں تبدیل کرتا ہے۔ -
java.io.PrintStream اور lang.io.PrintWriter:
ان دونوں کلاسوں میں تین نئے کنسٹرکٹرز ہیں جو ایک اضافی دلیل لیتے ہیں
charset
۔ -
java.io.Reader:
long transferTo (Writer)
: اس قاری کے تمام حروف کو پڑھتا ہے اور حروف کو اس ترتیب میں لکھتا ہے جس میں وہ پڑھے جاتے ہیں۔ -
java.lang.Runtime.Version:
چار نئے طریقے جو سٹرنگ فیلڈز کے نئے ورژن (JEP 322) کے لیے عددی قدر واپس کرتے ہیں:
feature ()
,interim ()
,patch ()
andupdate ()
. -
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
orSet
, содержащие элементы данной коллекции, в своем порядке итерации. -
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)
: возвращает минимальный размер указанного компонента, подходящий для внешнего вида.
What еще почитать? |
---|
GO TO FULL VERSION