자바 10의 중요한 기능
지역 변수 유형 추론(Local-Variable Type Inference) - Java에 var 키워드를 도입하여 지역 변수의 유형을 명시적으로 지정할 필요가 없도록 하는 제안입니다. 즉, 이제 초기화된 변수의 유형을 지정할 수 없지만 다음과 같이 작성하십시오.var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
이는 이전에 사용해야 했던 ArrayList<String> 유형 정의의 중복을 제거합니다. var가 키워드가 되지 않고 예약된 유형이라는 점이 흥미롭습니다. 즉, 변수, 메소드 또는 패키지의 이름으로 var를 사용할 수 있습니다. 하지만 그런 식으로 클래스 이름을 지정할 수는 없습니다(정말 손실입니다!). JDK 포리스트를 단일 저장소로 병합합니다 . JDK 9에는 root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn 등 8개의 저장소가 있습니다. Java 10에서는 이 전체 포리스트가 단일 저장소로 결합되어 상호 의존적인 변경 세트 저장소 전체에서 원자성 커밋을 수행할 수 있게 됩니다. 가비지 콜렉터 인터페이스는 개발자가 가비지 콜렉터를 제어하기 위해 사용할 수 있는 인터페이스가 아닙니다. 대신 JVM 소스 코드에 깔끔한 가비지 수집기 인터페이스가 있으므로 대체 수집기를 빠르고 쉽게 통합할 수 있습니다. JVM에 자체 가비지 수집기를 추가하려는 사람들은 이러한 개선 사항에 가장 만족할 것입니다. G1 가비지 수집기를 위한 병렬 전체 GC . JDK 9에서는 G1이 기본 가비지 수집기가 되었지만 이전에는 기본 가비지 수집기가 여러 스레드에서 가비지를 수집할 수 있는 병렬 GC였습니다. 이제 G1도 이 작업을 수행할 수 있습니다. 이전에는 단일 스레드에서 수행했기 때문에 때로는 어려움이 있었습니다. 그런데 개발자는 - XX:ParallelGCThreads.
[310] 애플리케이션 클래스-데이터 공유 매개 변수를 사용하여 스레드 수를 구성할 수 있습니다. Java 10에서 채택된 이 개발은 향상된 로딩 및 추적을 제공하고 기존 클래스 공유(CDS) 기능을 확장합니다. 애플리케이션 클래스가 일반 아카이브에 위치하도록 허용합니다. 클래스 데이터 공유 또는 짧은 CDS는 *class 확장자를 가진 파일과 함께 작동합니다. 이 기능을 사용하면 클래스의 특정 하위 집합을 선택하고 처리한 후 특수 아카이브로 압축할 수 있습니다. 이 모든 작업은 메모리를 절약하기 위해 수행됩니다. JVM의 서로 다른 인스턴스는 표준 라이브러리에 포함된 동일한 클래스를 로드하는 경우가 많습니다. 그리고 CDS를 사용하면 이러한 모든 JVM 인스턴스가 단일 아카이브를 그 안에 배치된 클래스와 공유할 수 있습니다. 이렇게 하면 프로그램 로딩 시간과 메모리 사용량이 모두 줄어듭니다. 실제로 CDS는 버전 5부터 여러 JVM이 동일한 물리적 또는 가상 머신에서 실행될 때 JVM 시작 성능을 향상시키고 리소스 공간을 줄입니다. 그러나 이전에는 CDS 사용이 부트스트랩 로더로만 제한되었습니다. 이제 Application CDS라는 확장 버전을 사용하면 다른 로더용 클래스가 포함된 특수 아카이브를 로드할 수 있습니다. 스레드-로컬 핸드셰이크는 전역 VM 안전 지점을 실행하지 않고도 스레드 전체에서 콜백을 실행할 수 있도록 하는 JVM 내의 상당히 낮은 수준의 변경입니다. 이를 통해 한 번에(또는 전혀 중지하지 않음) 개별 스레드를 비용 없이 중지할 수 있습니다. [313] 네이티브 헤더 생성 도구(javah)를 제거합니다 . Java 9로 돌아가서 언어 개발자는 불필요한 도구를 적극적으로 제거하기 시작했으며 JEP 313은 이러한 훌륭한 작업을 계속합니다. 코드에 기본 메소드가 있는 경우 javah 도구는 JNI 헤더를 생성합니다. 건강한? 물론 JDK 8부터 기본 javac 컴파일러는 자체적으로 JNI 헤더를 생성할 수 있습니다. 그래서 이제 그들은 javah를 제거하기로 결정했습니다. 그런데 현재 JNI를 대체할 수 있는 파나마 프로젝트가 개발 중입니다 . [314] 추가 유니코드 언어 태그 확장 이 변경은 BCP 47 언어 태그에 대한 추가 유니코드 확장을 구현하기 위해 java.util.Locale 클래스 및 관련 API를 개선하기 위한 것입니다. 특히 통화 유형(cu)에 대한 태그, 첫 번째 날 이제 주(fw), 지역(rg) 및 시간대(tz) 재정의가 지원됩니다. 대체 메모리 장치의 힙 할당 이 혁신은 DRAM 이외의 메모리 유형을 사용하는 사람들에게 도움이 될 것입니다. 기술이 끊임없이 변화하고 있기 때문에 DRAM과 동일한 인터페이스와 성능 특성을 가진 비휘발성 메모리를 사용하는 것이 오늘날 객관적인 현실입니다. 따라서 JEP 316을 사용하면 JVM이 다른 유형의 메모리에 힙을 배치할 수 있습니다. [317] 실험적인 Java 기반 JIT 컴파일러 . 대부분의 JVM을 Java로 다시 작성할 것을 제안하는 Metropolis 프로젝트가 최근 발표되었습니다. 모르는 경우를 대비해 현재 버전은 C++로 작성되었습니다. 글쎄, 당신이 이미 알고 있다면 아마도 처음에는 그러한 아이디어가 당신에게 이상하게 보일 것입니다. JVM이 Java로 작성되었으므로 JVM을 실행하려면 JVM이 필요하지 않습니까? 이것은 서로 반대되는 거울을 연상시키는 재귀입니다. 그러나 현실은 조금 다릅니다. JVM이 Java로 작성되었다고 해서 이를 바이트코드로 컴파일해야 한다는 의미는 아닙니다. 실제로 AOT 컴파일을 사용한 다음 JIT가 코드를 컴파일하여 성능을 향상시킬 수 있습니다.
javac와 같은 도구는 일반적으로 Java 코드를 컴파일하는 데 사용됩니다. Java 프로그램을 바이트코드가 포함된 클래스 파일 세트로 변환합니다. 다음으로 JVM은 바이트코드를 실행하고 해당 인터프리터는 이를 프로세서 명령어로 변환합니다. 인터프리터 외에도 JVM에는 내장 컴파일러가 있으며 바이트코드에서 프로세서에 대한 명령을 생성할 수도 있습니다. 이것은 소위 런타임 컴파일, 즉 시작 중 컴파일입니다. 일반적으로 가장 자주 사용되는 코드는 이러한 컴파일을 거쳐 성능이 향상됩니다. 컴파일러는 다양한 방법으로 작업을 수행할 수 있습니다. 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.툴킷
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.리더:
long transferTo (Writer)
: 이 판독기에서 모든 문자를 읽고 읽은 순서대로 지정된 작성자에 문자를 씁니다. -
java.lang.Runtime.버전:
문자열 필드의 새 버전(JEP 322)에 대해 정수 값을 반환하는 4개의 새로운 메서드:
feature ()
,interim ()
및 .patch ()
update ()
-
java.lang.StackWalker.StackFrame:
-
문자열 getDescriptor():
Java Virtual Machine 사양에 정의된 대로 이 스택 프레임이 나타내는 메서드에 대한 핸들을 반환합니다.
-
문자열 getMethodType():
return 은
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