Java 10 маанилүү өзгөчөлүктөрү
[286] Local-Variable Type Inference - Java'га var ачкыч сөзүн киргизүү сунушу, локалдык өзгөрмөнүн түрүн так көрсөтүү зарылдыгын жокко чыгарат. Башкача айтканда, азыр сиз инициализацияланган өзгөрмөнүн түрүн көрсөтө албайсыз, бирок төмөнкүдөй нерсени жазыңыз:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
Бул ArrayList<String> түрүнүн аныктамасынын кайталанышын жокко чыгарат, биз буга чейин колдонушубуз керек болчу. Кызыгы, var ачкыч сөз болуп калbyte, бирок сакталган түр. Башкача айтканда, өзгөрмөнүн, ыкманын же пакеттин аты катары var колдоно аласыз. Бирок сиз классты ушундай деп атай албайсыз (кандай жоготуу!). [296] JDK токойун бирдиктүү репозиторийге бириктирүү . JDK 9да сегиз репозиторий бар - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Java 10до бул токой бир репозиторийге бириктирилет, бул өз ара көз каранды өзгөрүүлөр топтомдорунун репозиторийлери боюнча атомдук тапшырмаларды аткарууга мүмкүндүк берет. [304] Таштанды жыйноочу интерфейси таштанды чогултууну көзөмөлдөө үчүн иштеп чыгуучулар тарабынан колдонула турган интерфейс эмес. Анын ордуна, биз JVM булак codeунан таза таштанды жыйноочу интерфейсин алабыз, бул сизге альтернативалуу коллекционерлерди тез жана оңой интеграциялоого мүмкүндүк берет. JVMге өзүнүн таштанды жыйноочусун кошууну кыялдангандар бул жакшыртууга абдан ыраазы болушат. [307] G1 таштанды жыйноочу үчүн параллелдүү толук GC . JDK 9да G1 демейки таштанды жыйноочу болуп калды, ал эми мурда демейки таштанды жыйноочу бир нече жип боюнча таштанды чогулта алган Parallel GC болчу. Эми G1 муну да жасай алат; мурда ал бир жипте жасаган, бул кээде кыйынчылыктарды жаратчу. XX:ParallelGCThreads.
Айтмакчы, иштеп чыгуучулар жиптердин санын - [310] Колдонмо классы-берorштерди бөлүшүү параметри аркылуу конфигурациялай алышат - Java 10до кабыл алынган бул иштеп чыгуу, жакшыртылган жүктөөнү жана көз салууну сунуштайт, учурдагы класстарды бөлүшүү (CDS) өзгөчөлүгүн кеңейтет. колдонмо класстарын жалпы архивде жайгаштырууга уруксат берүү. Class-Data Sharing же *класстын кеңейтorши бар файлдар менен кыска иштөө үчүн CDS. Бул функция класстардын белгилүү бир бөлүгүн тандоого, аларды иштетүүгө жана атайын архивге кысууга мүмкүндүк берет. Мунун баары эстутумду сактоо үчүн жасалат. Көп учурда JVMдин ар кандай инстанциялары стандарттык китепканага киргизилген бир эле класстарды жүктөйт. Жана CDS бардык JVM инстанцияларына бир архивди андагы класстар менен бөлүшүүгө мүмкүндүк берет. Бул программаны жүктөө убактысын жана эстутумду колдонууну азайтат. Чындыгында, CDS JVM баштоонун натыйжалуулугун жакшыртат жана 5 versionсынан баштап бир нече JVM бир эле физикалык же виртуалдык машинада иштеп жатканда ресурстун изин азайтат. Бирок мурда CDSти колдонуу жүктөөчү жүктөөчү менен гана чектелген. Эми Application CDS деп аталган кеңейтилген versionсы башка жүктөгүчтөр үчүн класстар менен атайын архивдерди жүктөөгө мүмкүндүк берет. [312] Thread-Local Handshakes - бул JVM ичиндеги кыйла төмөн деңгээлдеги өзгөрүү, ал кайра чалууларды глобалдык VM коопсуздук чекити иштетилбестен жиптер боюнча аткарууга мүмкүндүк берет. Бул бир эле учурда (же такыр жок) эмес, жеке жиптерди чыгымсыз токтотууга мүмкүндүк берет. [313] Түпкү аталышты түзүү куралын (javah) алып салыңыз . Кайра Java 9да, тилди иштеп чыгуучулар керексиз куралдарды активдүү түрдө жок кыла башташты жана JEP 313 бул жакшы ишти улантууда. Эгерде codeдо жергorктүү ыкмалар бар болсо, javah куралы JNI аталыштарын жаратат. Ден соолук? Албетте, бирок JDK 8ден баштап жергorктүү javac компилятору өзү JNI аталыштарын түзө алат. Ошентип, азыр алар жавадан кутулууну чечишти. Айтмакчы, Панама долбоору учурда иштелип жатат , ал, атап айтканда, JNI алмаштыра алат. [314] Кошумча Юниcode тил-тег кеңейтүүлөрү Бул өзгөртүү BCP 47 тил тэгдерине кошумча Юниcode кеңейтүүлөрүн ишке ашыруу үчүн java.util.Locale классын жана аны менен байланышкан API'лерди өркүндөтүүгө багытталган. Атап айтканда, валюта түрүнүн тегдери (cu), биринчи күнү эми апта (fw), аймак (rg) жана убакыт алкагы (tz) жокко чыгарылат. [316] Альтернативдик эстутум түзүлүштөрүндө үймөктөрдү бөлүштүрүү Бул инновация DRAMдан башка эс тутум түрлөрүн колдонгондорго жардам берет. Технологиялар тынымсыз өзгөрүп тургандыктан, DRAMга окшош интерфейс жана иштөө мүнөздөмөлөрү менен өзгөрүлбөгөн эстутумду колдонуу бүгүнкү күндө an objectивдүү чындык. Ошентип, JEP 316 JVMге эстутумдун башка түрлөрүнө үймөк коюуга мүмкүндүк берет. [317] Эксперименталдык Java негизиндеги JIT компилятору . Метрополис долбоору жакында жарыяланды, ал Javaдагы JVMтин көбүн кайра жазууну сунуш кылат. Эгер сиз билбесеңиз, учурдагы version C++ тorнде жазылган. Ооба, эгер сиз буга чейин эле билсеңиз, балким, башында мындай идея сизге кызыктай көрүнөт. JVM Java тorнде жазылгандыктан, JVMди иштетүү үчүн сизге JVM керек эмеспи? Бири-бирине карама-каршы турган күзгүлөрдү эске салган рекурсия ушундай. Бирок, чындык бир аз башкача: JVM Java тorнде жазылгандыктан, бул аны byte codeдоруна компиляциялоо керек дегенди билдирбейт. Сиз чындыгында AOT компиляциясын колдонсоңуз болот, андан кийин JIT codeду түзөт, анткени ал натыйжалуулукту жакшыртуу үчүн иштейт.
Java codeун компиляциялоо үчүн көбүнчө javac сыяктуу курал колдонулат. Ал Java программасын byte codeдору бар класстык файлдардын жыйындысына айлантат. Андан кийин, JVM сиздин byte codeуңузду иштетет жана анын котормочусу аларды процессордун нускамаларына айландырат. Котормочудан тышкары, JVM да орнотулган компиляторго ээ жана ал byte codeдон процессор үчүн нускамаларды да түзө алат. Бул ишке киргизүү учурунда компиляция деп аталган Runtime компиляциясы. Адатта, эң көп колдонулган code мындай компиляцияга дуушар болот - бул иштин натыйжалуулугун жакшыртат. Компилятор иш-аракеттерди ар кандай жолдор менен аткара алат: JIT компиляциясы (убакытында) - динамикалык, программаны аткаруу учурунда же AOT компиляциясы (убакыттан мурун) - аткарууга чейин. jaotc AOT компилятору JDK 9да киргизилген. Учурда Hotspot JVM эки JIT компиляторун камтыйт, C1 (тездик үчүн) жана C2 (оптималдаштыруу үчүн). |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
Жаңы API'лер
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)
: ашыкча жүктөлгөнtoString
, белгиленген codeдоону колдонуу менен byteтарды чечмелөө аркылуу буфердин мазмунун сапка айлантат. -
java.io.PrintStream жана lang.io.PrintWriter:
Бул эки класста тең кошумча аргумент алган үч жаңы конструктор бар
charset
. -
java.io.Reader:
long transferTo (Writer)
: Бул окурмандын бардык каармандарын окуйт жана берилген жазуучуга каармандарды окуу тартиби боюнча жазат. -
java.lang.Runtime.Version:
Сап талааларынын жаңы versionсы (JEP 322) үчүн бүтүн санды кайтаруучу төрт жаңы ыкма:
feature ()
,interim ()
,patch ()
жанаupdate ()
. -
java.lang.StackWalker.StackFrame:
-
getDescriptor() саптары:
Java Virtual Machine Specification тарабынан аныкталгандай, бул стек алкагы менен көрсөтүлгөн методго тутканы кайтарат.
-
String 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