Fitur penting Java 10
[286] Inferensi Tipe Variabel Lokal - Sebuah proposal untuk memperkenalkan kata kunci var ke dalam Java, menghilangkan kebutuhan untuk secara eksplisit menentukan tipe variabel lokal. Artinya, sekarang Anda tidak dapat menentukan tipe variabel yang diinisialisasi, tetapi menulis sesuatu seperti:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
Ini menghilangkan duplikasi definisi tipe ArrayList<String> yang harus kita gunakan sebelumnya. Menarik untuk dicatat bahwa var tidak menjadi kata kunci, namun merupakan tipe yang dicadangkan. Artinya, Anda bisa menggunakan var sebagai nama variabel, metode, atau paket. Namun Anda tidak akan bisa memberi nama kelas seperti itu (sayang sekali!). [296] Menggabungkan hutan JDK menjadi satu repositori . JDK 9 memiliki delapan repositori - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Di Java 10, seluruh hutan ini akan digabungkan menjadi satu repositori untuk memungkinkan penerapan penerapan atom di seluruh repositori kumpulan perubahan yang saling bergantung. [304] Antarmuka Pengumpul Sampah bukanlah antarmuka yang dapat digunakan oleh pengembang untuk mengontrol pengumpulan sampah. Sebagai gantinya, kami mendapatkan antarmuka pengumpul sampah yang bersih dalam kode sumber JVM, memungkinkan Anda mengintegrasikan pengumpul alternatif dengan cepat dan mudah. Mereka yang bermimpi menambahkan pengumpul sampah mereka sendiri ke JVM akan sangat senang dengan peningkatan ini. [307] GC Penuh Paralel untuk pengumpul sampah G1 . Di JDK 9, G1 menjadi pengumpul sampah default, padahal sebelumnya pengumpul sampah default adalah Parallel GC, yang dapat mengumpulkan sampah di beberapa thread. Sekarang G1 juga bisa melakukan ini; sebelumnya ia melakukannya dalam satu thread, yang terkadang menimbulkan kesulitan. Omong-omong, pengembang akan dapat mengonfigurasi jumlah utas menggunakan - XX:ParallelGCThreads.
[310] parameter Berbagi Data Kelas Aplikasi - pengembangan ini, yang diadopsi di Java 10, menawarkan peningkatan pemuatan dan pelacakan, memperluas fitur Berbagi Kelas (CDS) yang ada untuk memungkinkan kelas aplikasi ditempatkan di arsip umum. Berbagi Data Kelas atau disingkat CDS berfungsi dengan file dengan ekstensi *kelas. Fungsi ini memungkinkan Anda memilih subset kelas tertentu, memprosesnya, dan mengompresnya ke dalam arsip khusus. Semua ini dilakukan untuk menghemat memori. Seringkali contoh JVM yang berbeda memuat kelas yang sama yang termasuk dalam perpustakaan standar. Dan CDS memungkinkan semua instance JVM ini untuk berbagi satu arsip dengan kelas-kelas yang ditempatkan di dalamnya. Hal ini mengurangi waktu pemuatan program dan penggunaan memori. Faktanya, CDS meningkatkan kinerja startup JVM dan mengurangi jejak sumber daya ketika beberapa JVM dijalankan pada mesin fisik atau virtual yang sama, dimulai dengan versi 5. Namun sebelumnya penggunaan CDS hanya sebatas bootstrap loader saja. Sekarang versi diperpanjang yang disebut CD Aplikasi memungkinkan Anda memuat arsip khusus dengan kelas untuk pemuat lain. [312] Thread-Local Handshakes adalah perubahan tingkat rendah dalam JVM yang memungkinkan callback dieksekusi di seluruh thread tanpa menjalankan titik keamanan VM global. Ini akan memungkinkan Anda menghentikan thread satu per satu tanpa biaya, dibandingkan menghentikan semuanya sekaligus (atau tidak sama sekali). [313] Hapus Alat Pembuatan Header Asli (javah) . Kembali ke Java 9, pengembang bahasa mulai secara aktif menghapus alat yang tidak diperlukan, dan JEP 313 melanjutkan pekerjaan bagus ini. Alat javah menghasilkan header JNI jika ada metode asli dalam kode. Sehat? Tentu saja, kompiler javac asli, dimulai dengan JDK 8, dapat menghasilkan header JNI sendiri. Jadi sekarang mereka memutuskan untuk menghilangkan javah. Ngomong-ngomong, saat ini sedang dikembangkan proyek Panama yang khususnya bisa menggantikan JNI. [314] Ekstensi Tag Bahasa Unicode Tambahan Perubahan ini dimaksudkan untuk meningkatkan kelas java.util.Locale dan API terkait untuk menerapkan ekstensi Unicode tambahan ke tag bahasa BCP 47. Khususnya, tag untuk jenis mata uang (cu), hari pertama sekarang akan didukung penggantian minggu (fw), wilayah (rg), dan zona waktu (tz). [316] Alokasi Tumpukan pada Perangkat Memori Alternatif Inovasi ini akan membantu mereka yang menggunakan jenis memori selain DRAM. Karena teknologi terus berubah, penggunaan memori non-volatile dengan antarmuka dan karakteristik kinerja yang sama mirip dengan DRAM merupakan kenyataan obyektif saat ini. Jadi, JEP 316 memungkinkan JVM untuk menempatkan heap di jenis memori lain. [317] Kompiler JIT Berbasis Java Eksperimental . Proyek Metropolis baru-baru ini diumumkan, yang mengusulkan untuk menulis ulang sebagian besar JVM di Java. Jika Anda tidak tahu, versi saat ini ditulis dalam C++. Nah, jika Anda sudah mengetahuinya, mungkin pada awalnya ide seperti itu akan terasa aneh bagi Anda. Karena JVM ditulis dalam Java, bukankah Anda memerlukan JVM untuk menjalankan JVM? Begitulah rekursinya, mengingatkan pada cermin yang saling berhadapan. Namun, kenyataannya sedikit berbeda: hanya karena JVM ditulis dalam Java, bukan berarti Anda harus mengkompilasinya menjadi bytecode. Anda sebenarnya dapat menggunakan kompilasi AOT dan kemudian JIT mengkompilasi kode yang berfungsi untuk meningkatkan kinerja.
Alat seperti javac biasanya digunakan untuk mengkompilasi kode Java. Ini mengubah program Java menjadi sekumpulan file kelas dengan bytecode. Selanjutnya, JVM menjalankan bytecode Anda dan penerjemahnya mengubahnya menjadi instruksi prosesor. Selain interpreter, JVM juga memiliki kompiler bawaan, dan juga dapat membuat instruksi untuk prosesor dari bytecode. Inilah yang disebut kompilasi runtime, kompilasi saat startup. Biasanya kode yang paling sering digunakan dikompilasi seperti itu - ini meningkatkan kinerja. Kompiler dapat melakukan tindakan dengan cara yang berbeda: kompilasi JIT (just-in-time) - dinamis, tepat selama eksekusi program, atau kompilasi AOT (ahead-of-time) - sebelum eksekusi. Kompiler jaotc AOT diperkenalkan di JDK 9. Saat ini, Hotspot JVM berisi dua kompiler JIT, C1 (untuk kecepatan) dan C2 (untuk optimasi). |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
API baru
Ada 73 tambahan pada perpustakaan kelas standar JDK 10.-
java.awt.Toolkit
int getMenuShortcutKeyMaskEx ()
: Menentukan tombol pengubah tambahan mana yang merupakan tombol akselerator yang sesuai untuk menu pintasan. -
java.awt.geom.Path2D:
void trimToSize ()
: Memangkas kapasitas instance iniPath2D
ke ukuran saat ini. Aplikasi dapat menggunakan operasi ini untuk meminimalkan penyimpanan jalur. Metode yang sama telah ditambahkan ke kelas dalamPath2D.Double
danPath2D.Float
. -
java.io.ByteArrayOutputStream:
String toString (Charset)
: kelebihan bebantoString
, mengubah konten buffer menjadi string dengan mendekode byte menggunakan pengkodean yang ditentukan. -
java.io.PrintStream dan lang.io.PrintWriter:
Kedua kelas ini memiliki tiga konstruktor baru yang mengambil argumen tambahan
charset
. -
java.io.Pembaca:
long transferTo (Writer)
: Membaca semua karakter dari pembaca ini dan menulis karakter tersebut ke penulis tertentu sesuai urutan pembacaannya. -
java.lang.Runtime.Versi:
Empat metode baru yang mengembalikan nilai integer untuk kolom string versi baru (JEP 322):
feature ()
,interim ()
,patch ()
danupdate ()
. -
java.lang.StackWalker.StackFrame:
-
String getDescriptor():
mengembalikan pegangan ke metode yang diwakili oleh bingkai tumpukan ini, seperti yang ditentukan oleh Spesifikasi Mesin Virtual Java.
-
String getMethodType():
return
MethodType
, mewakili tipe parameter dan tipe pengembalian untuk metode yang diwakili oleh bingkai tumpukan. -
java.lang.invoke.MethodType:
Class<?> LastParameterType(): Mengembalikan tipe parameter terakhir dari tipe metode ini. Jika tipe ini tidak memiliki parameter, nilai yang dikembalikan adalah
sentinel void.class
. -
java.lang.manajemen.RuntimeMXBean:
long getPid ()
mengembalikanpid
mesin virtual Java yang sedang berjalan. -
java.lang.manajemen.ThreadMXBean:
ThreadInfo [] dumpAllThreads (boolean, boolean, int):
mengembalikan informasi thread untuk semua thread real-time dengan jejak tumpukan dengan jumlah maksimum elemen dan informasi waktu yang ditentukan. -
ThreadInfo [] getThreadInfo (panjang [], boolean, boolean, int):
mengembalikan informasi thread untuk setiap thread yang identifikasinya ada dalam array input, dengan jejak tumpukan jumlah elemen maksimum yang ditentukan dan informasi sinkronisasi.
-
java.lang.reflect.MalformedParameterizedTypeException:
konstruktor baru telah ditambahkan yang mengambil pesan verbose sebagai string sebagai parameter.
-
java.net.URLDecoder dan java.net.URLEncoder:
kedua kelas ini memiliki metode decoding dan pengkodean kelebihan beban baru yang digunakan
charset
sebagai parameter tambahan. -
java.nio.saluran.Saluran:
Dua metode kelebihan beban statis baru,
newReader (ReadByteChannel, Charset)
dannewWriter (WriteByteChannel, Charset)
, yang memungkinkan Anda menggunakancharset
. -
java.nio.file.FileStore:
long getBlockSize ()
: Mengembalikan jumlah byte per blok di penyimpanan file ini. -
java.waktu.krono:
три класса в этом пакете,
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)
: Mengembalikan nama lokal untuk iniUnicode extension key
.getDisplayUnicodeExtensionType (String, String, Locale)
: Mengembalikan nama lokal untuk iniUnicode extension key
. -
java.util.stream.Kolektor:
toUnmodifiableList ()
,toUnmodifiableSet ()
,toUnmodifiableMap (Function, Function)
,toUnmodifiableMap (Function, Function, BinaryOperator)
- Keempat metode baru ini mengembalikan Kolektor yang mengumpulkan elemen masukan ke dalam koleksi terkait yang tidak dapat dimodifikasi. -
java.lang.model.Versi Sumber:
ini sekarang menjadi bidang RELEASE_10 untuk mewakili versi JDK 10.
-
java.lang.model.util.TypeKindVisitor6 dan javax.lang.model.util.TypeKindVisitor9:
sesuatu yang tidak begitu jelas :).
-
R kunjungiNoTypeAsModule(NoType, P):
mengunjungi tipe semu
MODULE
. -
javax.remote.management.rmi.RMIConnectorServer:
Kelas ini memiliki dua bidang yang ditambahkan:
CREDENTIALS_FILTER_PATTERN и SERIAL_FILTER_PATTERN
. -
javax.ButtonModel:
Coba tebak, Swing masih diperbarui!
-
Grup Tombol getGroup():
mengembalikan grup tempat tombol tersebut berada. Biasanya digunakan dengan
radio buttons
, yang saling eksklusif dalam grupnya. -
javax.plaf.basic.BasicMenuUI:
Dimension getMinimumSize (JComponent)
: Mengembalikan ukuran minimum komponen tertentu yang sesuai dengan tampilannya.
Apa lagi yang harus dibaca? |
---|
GO TO FULL VERSION