JavaRush /Blog Java /Random-MS /Java Baru... Sekali lagi... Bertemu Java 10

Java Baru... Sekali lagi... Bertemu Java 10

Diterbitkan dalam kumpulan
Sebelum ini, pembangun menunggu Java baharu selama beberapa tahun, beberapa dengan seram, dan beberapa dengan harapan. Masa telah berubah, dan versi baharu JDK akan menggembirakan kami setiap enam bulan. Jika masih belum jelas kepada anda perkara ini akan membawa kepada, lihat pendapat pakar , dan di sini kami akan menyenaraikan perubahan utama dalam Java 10, versi terbaru bahasa kegemaran kami. Java Baru... Lagi... Jumpa Java 10 - 1Dalam kurungan petak sebelum "ciri" baharu nombor JEP ditunjukkan, iaitu, "Cadangan Peningkatan JDK". JEP ialah cadangan untuk menambah baik OpenJDK dan mungkin diluluskan, ditangguhkan atau ditolak. Iaitu, pada dasarnya, koleksi JEP adalah strategi pembangunan untuk OpenJDK.

Ciri penting Java 10

[286] Inferens Jenis Pembolehubah Setempat - Cadangan untuk memperkenalkan kata kunci var ke dalam Java, menghapuskan keperluan untuk menyatakan secara eksplisit jenis pembolehubah tempatan. Iaitu, kini anda tidak boleh menentukan jenis pembolehubah yang dimulakan, tetapi tulis sesuatu seperti:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
Ini menghapuskan pertindihan definisi jenis ArrayList<String> yang kami perlu gunakan sebelum ini. Adalah menarik untuk ambil perhatian bahawa var tidak menjadi kata kunci, tetapi merupakan jenis terpelihara. Iaitu, anda boleh menggunakan var sebagai nama pembolehubah, kaedah atau pakej. Tetapi anda tidak akan dapat menamakan kelas seperti itu (alangkah ruginya!). [296] Menggabungkan hutan JDK ke dalam satu repositori . JDK 9 mempunyai lapan repositori - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Di Java 10, keseluruhan hutan ini akan digabungkan menjadi satu repositori untuk membolehkan melakukan komit atom merentas repositori set perubahan yang saling bergantung. [304] Antara Muka Pengumpul Sampah bukanlah antara muka yang boleh digunakan oleh pembangun untuk mengawal kutipan sampah. Sebaliknya, kami mendapat antara muka pemungut sampah yang bersih dalam kod sumber JVM, membolehkan anda menyepadukan pengumpul alternatif dengan cepat dan mudah. Mereka yang bermimpi untuk menambah pemungut sampah mereka sendiri ke JVM akan sangat gembira dengan peningkatan ini. [307] GC Penuh Selari untuk pemungut sampah G1 . Dalam JDK 9, G1 menjadi pemungut sampah lalai, manakala pemungut sampah lalai sebelum ini ialah Parallel GC, yang boleh mengumpul sampah merentas berbilang benang. Kini G1 boleh melakukan ini juga; sebelum ini ia melakukannya dalam satu utas, yang kadangkala menyebabkan kesukaran. Dengan cara ini, pembangun akan dapat mengkonfigurasi bilangan utas menggunakan - XX:ParallelGCThreads. [310] parameter Perkongsian Data Kelas Aplikasi - pembangunan ini, yang diterima pakai dalam Java 10, menawarkan pemuatan dan penjejakan yang lebih baik, memanjangkan ciri Perkongsian Kelas (CDS) sedia ada. untuk membenarkan kelas aplikasi ditempatkan dalam arkib umum. Perkongsian Data Kelas atau CDS untuk kerja pendek dengan fail dengan sambungan *kelas. Fungsi ini membolehkan anda memilih subset kelas tertentu, memprosesnya dan memampatkannya ke dalam arkib khas. Semua ini dilakukan untuk menjimatkan memori. Selalunya contoh JVM yang berbeza memuatkan kelas yang sama yang disertakan dalam perpustakaan standard. Dan CDS membenarkan semua kejadian JVM ini berkongsi satu arkib dengan kelas yang diletakkan di dalamnya. Ini mengurangkan masa memuatkan program dan penggunaan memori. Malah, CDS meningkatkan prestasi permulaan JVM dan mengurangkan jejak sumber apabila berbilang JVM berjalan pada mesin fizikal atau maya yang sama, bermula dengan versi 5. Tetapi sebelum ini penggunaan CDS terhad kepada pemuat bootstrap sahaja. Kini versi lanjutan yang dipanggil CDS Aplikasi membolehkan anda memuatkan arkib khas dengan kelas untuk pemuat lain. [312] Thread-Local Handshakes ialah perubahan tahap yang agak rendah dalam JVM yang akan membenarkan panggilan balik dilaksanakan merentas urutan tanpa menjalankan titik keselamatan VM global. Ini akan membolehkan anda menghentikan rangkaian individu tanpa kos, bukannya sekaligus (atau tidak sama sekali). [313] Alih keluar Alat Penjanaan Pengepala Asli (javah) . Kembali ke Java 9, pembangun bahasa mula mengalih keluar alatan yang tidak diperlukan secara aktif, dan JEP 313 meneruskan kerja yang baik ini. Alat javah menjana pengepala JNI jika terdapat kaedah asli dalam kod. sihat? Sudah tentu, tetapi pengkompil javac asli, bermula dengan JDK 8, boleh menjana pengepala JNI sendiri. Jadi sekarang mereka memutuskan untuk menyingkirkan javah. Ngomong-ngomong, projek Panama sedang dibangunkan , yang, khususnya, boleh menggantikan JNI. [314] Sambungan Teg Bahasa Unikod Tambahan Perubahan ini bertujuan untuk menambah baik kelas java.util.Locale dan API yang berkaitan untuk melaksanakan sambungan Unicode tambahan kepada teg bahasa BCP 47. Khususnya, teg untuk jenis mata wang (cu), hari pertama kini akan disokong minggu (fw), rantau (rg) dan zon waktu (tz) mengatasi. [316] Peruntukan Timbunan pada Peranti Memori Alternatif Inovasi ini akan membantu mereka yang menggunakan jenis memori selain DRAM. Memandangkan teknologi sentiasa berubah, penggunaan memori tidak meruap dengan antara muka dan ciri prestasi yang sama serupa dengan DRAM adalah realiti objektif hari ini. Jadi, JEP 316 membenarkan JVM meletakkan timbunan dalam jenis memori lain. [317] Pengkompil JIT Berasaskan Java Eksperimen . Projek Metropolis baru-baru ini diumumkan, yang bercadang untuk menulis semula kebanyakan JVM di Jawa. Sekiranya anda tidak tahu, versi semasa ditulis dalam C++. Nah, jika anda sudah tahu, mungkin pada mulanya idea seperti itu akan kelihatan pelik kepada anda. Memandangkan JVM ditulis dalam Java, bukankah anda memerlukan JVM untuk menjalankan JVM? Begitulah rekursi, mengingatkan cermin yang bertentangan antara satu sama lain. Walau bagaimanapun, realitinya sedikit berbeza: hanya kerana JVM ditulis dalam Java, itu tidak bermakna anda perlu menyusunnya menjadi kod bait. Anda sebenarnya boleh menggunakan kompilasi AOT dan kemudian JIT menyusun kod kerana ia berfungsi untuk meningkatkan prestasi.

Alat seperti javac biasanya digunakan untuk menyusun kod Java. Ia menukar program Java kepada satu set fail kelas dengan bytecode. Seterusnya, JVM menjalankan kod bait anda dan penterjemahnya menukarnya kepada arahan pemproses. Sebagai tambahan kepada penterjemah, JVM juga mempunyai pengkompil terbina dalam, dan ia juga boleh membuat arahan untuk pemproses daripada bytecode. Ini adalah apa yang dipanggil kompilasi runtime, kompilasi semasa permulaan. Biasanya kod yang paling kerap digunakan tertakluk kepada kompilasi sedemikian - ini meningkatkan prestasi.

Pengkompil boleh melakukan tindakan dengan cara yang berbeza: Penyusunan JIT (tepat masa) - dinamik, tepat semasa pelaksanaan program, atau penyusunan AOT (awal masa) - sebelum pelaksanaan.

Pengkompil AOT jaotc telah diperkenalkan dalam JDK 9. Pada masa ini, JVM Hotspot mengandungi dua pengkompil JIT, C1 (untuk kelajuan) dan C2 (untuk pengoptimuman).

JEP 317 memperkenalkan projek penyelidikan Graal, penyusun untuk JDK. Ini adalah asas tertentu yang akan membantu menjadikan Metropolis satu realiti dan membolehkan JVM memadankan (atau lebih baik lagi, melebihi) versi semasa yang ditulis dalam C++ dalam prestasi. [319] Sijil Root ialah set lalai sijil Pihak Berkuasa Pensijilan (CA) standard dalam JDK. Komponen keselamatan kritikal seperti TLS kini akan berfungsi secara lalai dalam binaan OpenJDK. Penambahan berguna ini berkemungkinan sebahagian daripada apa yang Oracle lakukan untuk memastikan binari OpenJDK dan binari Oracle JDK adalah sama dari segi fungsi. [322] Versi Keluaran Berasaskan Masa - dalam Java 10, ciri baharu akan ditambahkan pada keluaran Ciri dan pepijat akan diperbaiki dalam Keluaran Kemas Kini. Pada asasnya, kami mempunyai cara baharu untuk menetapkan format rentetan versi JDK. Ia membetulkan keadaan yang agak pelik dengan JDK 9. Kemas kini pertama ialah JDK 9.0.1, yang agak logik. Kemas kini kedua ialah JDK 9.0.4, yang tidak logik. Logiknya ialah dalam skema penomboran versi JDK 9, ruang ditinggalkan di antara kemas kini sekiranya berlaku kecemasan, kemas kini yang tidak dirancang. Memandangkan kemas kini itu tidak diperlukan, mengapa tidak memanggilnya JDK 9.0.2 sahaja? Dan inilah rupa format versi Java baharu:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

API baharu

Terdapat 73 tambahan kepada perpustakaan kelas standard JDK 10.
  • java.awt.Toolkit

    int getMenuShortcutKeyMaskEx (): Mentakrifkan kekunci pengubah suai lanjutan yang merupakan kekunci pemecut yang sepadan untuk menu pintasan.

  • java.awt.geom.Path2D:

    void trimToSize (): Memangkas kapasiti kejadian ini Path2Dkepada saiz semasanya. Aplikasi boleh menggunakan operasi ini untuk meminimumkan storan laluan. Kaedah yang sama telah ditambah kepada kelas dalaman Path2D.Doubledan Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): overloaded toString, menukarkan kandungan penimbal kepada rentetan dengan menyahkod bait menggunakan pengekodan yang ditentukan.

  • java.io.PrintStream dan lang.io.PrintWriter:

    Kedua-dua kelas ini mempunyai tiga pembina baharu yang mengambil hujah tambahan charset.

  • java.io.Reader:

    long transferTo (Writer): Membaca semua aksara daripada pembaca ini dan menulis aksara kepada penulis yang diberikan mengikut susunan bacaannya.

  • java.lang.Runtime.Version:

    Empat kaedah baharu yang mengembalikan nilai integer untuk versi baharu (JEP 322) medan rentetan: feature (), interim (), patch ()dan update ().

  • java.lang.StackWalker.StackFrame:

  • String getDescriptor():

    mengembalikan pemegang kepada kaedah yang diwakili oleh bingkai tindanan ini, seperti yang ditakrifkan oleh Spesifikasi Mesin Maya Java.

  • String getMethodType():

    returns MethodType, mewakili jenis parameter dan jenis pulangan untuk kaedah yang diwakili oleh bingkai tindanan.

  • 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 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): возвращает локализованное 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): возвращает минимальный размер указанного компонента, подходящий для внешнего вида.

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