JavaRush /Java Blog /Random-ID /Java Baru... Sekali lagi... Temui Java 10

Java Baru... Sekali lagi... Temui Java 10

Dipublikasikan di grup Random-ID
Sebelumnya, pengembang menunggu Java baru selama beberapa tahun, ada yang merasa ngeri, dan ada yang berharap. Waktu telah berubah, dan versi baru JDK akan menyenangkan kita setiap enam bulan. Jika masih belum jelas bagi Anda apa yang akan terjadi, lihat pendapat para ahli , dan di sini kami akan mencantumkan perubahan utama di Java 10 - versi terbaru dari bahasa favorit kami. Java Baru... Sekali lagi... Temui Java 10 - 1Dalam tanda kurung siku sebelum “fitur” baru ditunjukkan nomor JEP, yaitu “Proposal Peningkatan JDK”. JEP adalah proposal untuk meningkatkan OpenJDK dan dapat disetujui, ditunda, atau ditolak. Intinya, kumpulan JEP adalah strategi pengembangan OpenJDK.

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).

JEP 317 memperkenalkan proyek penelitian Graal, kompiler untuk JDK. Ini adalah dasar tertentu yang akan membantu mewujudkan Metropolis dan memungkinkan JVM menyamai (atau lebih baik lagi, melampaui) versi saat ini yang ditulis dalam C++ dalam performanya. [319] Sertifikat Root adalah kumpulan default sertifikat Otoritas Sertifikasi (CA) standar di JDK. Komponen keamanan penting seperti TLS sekarang akan berfungsi secara default di build OpenJDK. Penambahan yang bermanfaat ini kemungkinan merupakan bagian dari apa yang dilakukan Oracle untuk memastikan bahwa biner OpenJDK dan biner Oracle JDK secara fungsional sama. [322] Pembuatan Versi Rilis Berbasis Waktu - di Java 10, fitur baru akan ditambahkan ke rilis Fitur, dan bug akan diperbaiki di Rilis Pembaruan. Pada dasarnya, kami memiliki cara baru untuk mengatur format string versi JDK. Ini memperbaiki situasi yang agak aneh dengan JDK 9. Pembaruan pertama adalah JDK 9.0.1, yang cukup logis. Pembaruan kedua adalah JDK 9.0.4, yang tidak masuk akal. Logikanya adalah dalam skema penomoran versi JDK 9, ada ruang tersisa di antara pembaruan jika terjadi pembaruan darurat yang tidak direncanakan. Karena pembaruan tidak diperlukan, mengapa tidak menyebutnya JDK 9.0.2 saja? Dan inilah tampilan format versi Java yang baru:
[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 ini Path2Dke ukuran saat ini. Aplikasi dapat menggunakan operasi ini untuk meminimalkan penyimpanan jalur. Metode yang sama telah ditambahkan ke kelas dalam Path2D.Doubledan Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): kelebihan beban toString, 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 ()dan update ().

  • 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 ()mengembalikan pidmesin 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 charsetsebagai parameter tambahan.

  • java.nio.saluran.Saluran:

    Dua metode kelebihan beban statis baru, newReader (ReadByteChannel, Charset)dan newWriter (WriteByteChannel, Charset), yang memungkinkan Anda menggunakan charset.

  • 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 or Set, содержащие элементы данной коллекции, в своем порядке итерации.

  • 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 ini Unicode extension key. getDisplayUnicodeExtensionType (String, String, Locale): Mengembalikan nama lokal untuk ini Unicode 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.

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION