Recursos importantes do Java 10
[286] Inferência de tipo de variável local - Uma proposta para introduzir a palavra-chave var em Java, eliminando a necessidade de especificar explicitamente o tipo de uma variável local. Ou seja, agora você não pode especificar o tipo da variável inicializada, mas escrever algo como:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
Isso elimina a duplicação da definição do tipo ArrayList<String> que teríamos que usar antes. É interessante notar que var não se torna uma palavra-chave, mas é um tipo reservado. Ou seja, você pode usar var como o nome de uma variável, método ou pacote. Mas você não conseguirá nomear a classe dessa forma (que perda!). [296] Mesclando a floresta JDK em um único repositório . O JDK 9 possui oito repositórios - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. No Java 10, toda essa floresta será combinada em um único repositório para possibilitar a execução de commits atômicos em repositórios de conjuntos de alterações interdependentes. [304] A interface Garbage-Collector não é uma interface que pode ser usada por desenvolvedores para controlar a coleta de lixo. Em vez disso, obtemos uma interface de coletor de lixo limpa no código-fonte da JVM, permitindo integrar coletores alternativos de maneira rápida e fácil. Aqueles que sonhavam em adicionar seu próprio coletor de lixo à JVM ficarão muito satisfeitos com esta melhoria. [307] GC completo paralelo para o coletor de lixo G1 . No JDK 9, G1 se tornou o coletor de lixo padrão, enquanto anteriormente o coletor de lixo padrão era o Parallel GC, que podia coletar lixo em vários threads. Agora o G1 também pode fazer isso, antes fazia isso em uma só thread, o que às vezes causava dificuldades. A propósito, os desenvolvedores poderão configurar o número de threads usando o parâmetro - XX:ParallelGCThreads.
[310] Application Class-Data Sharing - este desenvolvimento, adotado no Java 10, oferece carregamento e rastreamento aprimorados, estende o recurso existente de Class Sharing (CDS) para permitir que as classes de aplicativos sejam localizadas no arquivo geral. Class-Data Sharing ou CDS, abreviadamente, funciona com arquivos com a extensão *class. Esta função permite selecionar um determinado subconjunto de classes, processá-las e compactá-las em um arquivo especial. Tudo isso é feito para economizar memória. Freqüentemente, diferentes instâncias da JVM carregam as mesmas classes incluídas na biblioteca padrão. E o CDS permite que todas essas instâncias JVM compartilhem um único arquivo com classes colocadas nele. Isso reduz o tempo de carregamento do programa e o uso de memória. Na verdade, o CDS melhora o desempenho de inicialização da JVM e reduz o consumo de recursos quando várias JVMs estão em execução na mesma máquina física ou virtual, começando com a versão 5. Mas anteriormente o uso do CDS era limitado apenas ao carregador de bootstrap. Agora, uma versão estendida chamada Application CDS permite carregar arquivos especiais com classes para outros carregadores. [312] Thread-Local Handshakes é uma mudança de nível bastante baixo dentro da JVM que permitirá que retornos de chamada sejam executados entre threads sem executar um ponto de segurança global da VM. Isso permitirá que você interrompa threads individuais sem custos, em vez de interromper todos de uma vez (ou nenhum). [313] Remova a ferramenta de geração de cabeçalho nativo (javah) . No Java 9, os desenvolvedores de linguagens começaram a remover ativamente ferramentas desnecessárias, e o JEP 313 dá continuidade a esse bom trabalho. A ferramenta javah gera cabeçalhos JNI se houver métodos nativos no código. Saudável? Claro, mas o compilador javac nativo, começando com JDK 8, pode gerar cabeçalhos JNI. Então agora eles decidiram se livrar do javah. A propósito, está sendo desenvolvido o projeto Panamá , que, em particular, pode substituir o JNI. [314] Extensões adicionais de tags de idioma Unicode Esta alteração tem como objetivo melhorar a classe java.util.Locale e APIs associadas para implementar extensões Unicode adicionais para tags de idioma BCP 47. Em particular, tags para o tipo de moeda (cu), primeiro dia agora serão suportadas substituições de semana (fw), região (rg) e fuso horário (tz). [316] Alocação de heap em dispositivos de memória alternativos Esta inovação ajudará aqueles que usam tipos de memória diferentes de DRAM. Como as tecnologias estão em constante mudança, o uso de memória não volátil com a mesma interface e características de desempenho semelhantes às DRAM é uma realidade objetiva hoje. Portanto, o JEP 316 permite que a JVM coloque um heap em outros tipos de memória. [317] Compilador JIT experimental baseado em Java . Foi anunciado recentemente o projeto Metropolis, que propõe reescrever a maior parte da JVM em Java. Caso você não saiba, a versão atual está escrita em C++. Bem, se você já sabe, provavelmente a princípio tal ideia lhe parecerá estranha. Como a JVM é escrita em Java, você não precisaria de uma JVM para executá-la? Tal é a recursão, que lembra espelhos opostos um ao outro. Porém, a realidade é um pouco diferente: só porque a JVM é escrita em Java, isso não significa que você precise compilá-la em bytecodes. Na verdade, você pode usar a compilação AOT e, em seguida, o JIT compila o código enquanto trabalha para melhorar o desempenho.
Uma ferramenta como javac é comumente usada para compilar código Java. Ele converte um programa Java em um conjunto de arquivos de classe com bytecodes. Em seguida, a JVM executa seu bytecode e seu intérprete os converte em instruções do processador. Além do intérprete, a JVM também possui um compilador integrado, podendo também criar instruções para o processador a partir do bytecode. Esta é a chamada compilação em tempo de execução, compilação durante a inicialização. Normalmente, o código usado com mais frequência é submetido a essa compilação - isso melhora o desempenho. O compilador pode executar ações de diferentes maneiras: compilação JIT (just-in-time) - dinâmica, logo durante a execução do programa, ou compilação AOT (ahead-of-time) - antes da execução. O compilador jaotc AOT foi introduzido no JDK 9. Atualmente, o Hotspot JVM contém dois compiladores JIT, C1 (para velocidade) e C2 (para otimização). |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
Novas APIs
Existem 73 adições às bibliotecas de classes padrão do JDK 10.-
java.awt.Toolkit
int getMenuShortcutKeyMaskEx ()
: Define qual tecla modificadora estendida é a tecla aceleradora correspondente para o menu de atalho. -
java.awt.geom.Path2D:
void trimToSize ()
: reduz a capacidade desta instânciaPath2D
para seu tamanho atual. Um aplicativo pode usar esta operação para minimizar o armazenamento de caminho. O mesmo método foi adicionado às classes internasPath2D.Double
ePath2D.Float
. -
java.io.ByteArrayOutputStream:
String toString (Charset)
: sobrecarregadotoString
, converte o conteúdo de um buffer em uma string decodificando os bytes usando a codificação especificada. -
java.io.PrintStream e lang.io.PrintWriter:
Ambas as classes possuem três novos construtores que recebem um argumento adicional
charset
. -
java.io.Leitor:
long transferTo (Writer)
: Lê todos os caracteres deste leitor e grava os caracteres para o escritor determinado na ordem em que são lidos. -
java.lang.Runtime.Version:
Quatro novos métodos que retornam um valor inteiro para a nova versão (JEP 322) de campos de string :
feature ()
, e .interim ()
patch ()
update ()
-
java.lang.StackWalker.StackFrame:
-
String getDescriptor():
retorna um identificador para o método representado por esse quadro de pilha, conforme definido pela Java Virtual Machine Specification.
-
String getMethodType():
retorna
MethodType
, representando os tipos de parâmetro e o tipo de retorno do método representado pelo quadro de pilha. -
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