ویژگی های مهم جاوا 10
[286] استنتاج نوع متغیر محلی - پیشنهادی برای معرفی کلمه کلیدی var به جاوا، که نیاز به تعیین صریح نوع یک متغیر محلی را از بین می برد. یعنی اکنون نمی توانید نوع متغیر اولیه را مشخص کنید، اما چیزی شبیه به:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
این کار تکراری بودن تعریف نوع ArrayList<String> را که قبلاً مجبور بودیم استفاده کنیم، حذف می کند. جالب است بدانید var به یک کلمه کلیدی تبدیل نمی شود، بلکه یک نوع رزرو شده است. یعنی می توانید از var به عنوان نام متغیر، متد یا بسته استفاده کنید. اما نمیتوانید کلاس را به این شکل نامگذاری کنید (چه ضرری!). [296] ادغام جنگل JDK در یک مخزن واحد . JDK 9 دارای هشت مخزن است - root، corba، hotspot، jaxp، jaxws، jdk، langtools، nashorn. در جاوا 10، کل این جنگل در یک مخزن واحد ترکیب میشود تا امکان انجام تعهدات اتمی در مخازن مجموعههای تغییرات وابسته به یکدیگر را فراهم کند. [304] واسط جمعآوری زباله ، رابطی نیست که توسعهدهندگان بتوانند از آن برای کنترل جمعآوری زباله استفاده کنند. در عوض، ما یک رابط جمعآوری زباله تمیز در کد منبع JVM دریافت میکنیم که به شما امکان میدهد به سرعت و به راحتی جمعآورندههای جایگزین را ادغام کنید. کسانی که رویای اضافه کردن زباله گرد خود را به JVM داشتند، از این پیشرفت بسیار خوشحال خواهند شد. [307] GC کامل موازی برای جمعآوری زباله G1 . در JDK 9، G1 به جمعآوری زباله پیشفرض تبدیل شد، در حالی که قبلاً جمعآوری زباله پیشفرض Parallel GC بود که میتوانست زبالهها را در چندین رشته جمعآوری کند. اکنون G1 نیز می تواند این کار را انجام دهد؛ قبلاً این کار را در یک رشته انجام می داد که گاهی اوقات باعث ایجاد مشکل می شد. به هر حال، توسعه دهندگان می توانند تعداد رشته ها را با استفاده از پارامتر - XX:ParallelGCThreads.
[310] Application Class-Data Sharing پیکربندی کنند - این توسعه، که در جاوا 10 پذیرفته شده است، بارگذاری و ردیابی بهبود یافته را ارائه می دهد، ویژگی اشتراک کلاس (CDS) موجود را گسترش می دهد. اجازه می دهد تا کلاس های برنامه در بایگانی عمومی قرار گیرند. Class-Data Sharing یا CDS برای کارهای کوتاه با فایل هایی با پسوند کلاس *. این تابع به شما امکان می دهد زیرمجموعه خاصی از کلاس ها را انتخاب کنید، آنها را پردازش کرده و در یک آرشیو خاص فشرده کنید. همه اینها برای صرفه جویی در حافظه انجام می شود. اغلب نمونه های مختلف JVM همان کلاس های موجود در کتابخانه استاندارد را بارگذاری می کنند. و CDS به همه این نمونههای JVM اجازه میدهد تا یک آرشیو واحد را با کلاسهای قرار داده شده در آن به اشتراک بگذارند. این کار هم زمان بارگذاری برنامه و هم مصرف حافظه را کاهش می دهد. در واقع، CDS عملکرد راهاندازی JVM را بهبود میبخشد و ردپای منابع را زمانی که چندین JVM در یک ماشین فیزیکی یا مجازی در حال اجرا هستند، از نسخه 5 کاهش میدهد. اما قبلاً استفاده از CDS فقط به بوت استرپ لودر محدود می شد. اکنون یک نسخه توسعه یافته به نام Application CDS به شما امکان می دهد آرشیوهای ویژه ای را با کلاس هایی برای بارگذارهای دیگر بارگیری کنید. [312] Thread-Local Handshakes یک تغییر سطح نسبتاً پایین در داخل JVM است که اجازه میدهد تا callbackها در سراسر رشتهها بدون اجرای یک نقطه ایمنی جهانی VM اجرا شوند. این به شما این امکان را میدهد که بدون هزینه، رشتههای جداگانه را متوقف کنید، نه یکباره (یا هیچکدام). [313] ابزار Native-Header Generation Tool (javah) را حذف کنید . در جاوا 9، توسعه دهندگان زبان شروع به حذف فعال ابزارهای غیر ضروری کردند و JEP 313 این کار خوب را ادامه می دهد. اگر متدهای بومی در کد وجود داشته باشد، ابزار جاوا هدرهای JNI را تولید می کند. سالم؟ البته، اما کامپایلر بومی javac، که با JDK 8 شروع می شود، می تواند هدرهای JNI را تولید کند. بنابراین اکنون آنها تصمیم گرفتند که از شر جاوا خلاص شوند. به هر حال، پروژه پاناما در حال حاضر در حال توسعه است ، که به ویژه می تواند جایگزین JNI شود. [314] افزونههای برچسب زبان یونیکد اضافی این تغییر به منظور بهبود کلاس java.util.Locale و APIهای مرتبط برای پیادهسازی پسوندهای یونیکد اضافی برای برچسبهای زبان BCP 47. بهویژه، برچسبها برای نوع ارز (cu)، روز اول اکنون لغو هفته (fw)، منطقه (rg) و منطقه زمانی (tz) پشتیبانی خواهد شد. [316] تخصیص هیپ در دستگاه های حافظه جایگزین این نوآوری به کسانی که از انواع حافظه غیر از DRAM استفاده می کنند کمک می کند. از آنجایی که فناوری ها دائماً در حال تغییر هستند، استفاده از حافظه غیر فرار با رابط کاربری مشابه و ویژگی های عملکردی مشابه DRAM امروزه یک واقعیت عینی است. بنابراین، JEP 316 به JVM اجازه می دهد تا یک پشته را در انواع دیگر حافظه قرار دهد. [317] کامپایلر JIT مبتنی بر جاوا تجربی . پروژه Metropolis اخیرا اعلام شد که پیشنهاد میکند بیشتر 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]*)*
API های جدید
73 مورد اضافه شده به کتابخانه های کلاس استاندارد JDK 10 وجود دارد.-
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 ()
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
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