תכונות חשובות של Java 10
[286] מסקנות מסוג Local-Variable Type - הצעה להכנסת מילת המפתח var ל-Java, תוך ביטול הצורך לציין במפורש את הסוג של משתנה מקומי. כלומר, עכשיו אתה לא יכול לציין את סוג המשתנה המאותחל, אלא לכתוב משהו כמו:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
זה מבטל את הכפילות של הגדרת סוג ArrayList<String> שהיינו צריכים להשתמש בה קודם. מעניין לציין ש-var לא הופך למילת מפתח, אלא הוא סוג שמור. כלומר, אתה יכול להשתמש ב-var כשם של משתנה, שיטה או חבילה. אבל לא תוכל לכנות את הכיתה כך (איזה הפסד!). [296] מיזוג יער JDK למאגר יחיד . ל-JDK 9 יש שמונה מאגרים - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. ב-Java 10, כל היער הזה ישולב למאגר אחד כדי לאפשר לבצע commits אטומיים על פני מאגרים של שינויים תלויים זה בזה. [304] ממשק אוסף האשפה אינו ממשק שיכול לשמש מפתחים כדי לשלוט באיסוף האשפה. במקום זאת, אנו מקבלים ממשק אספן אשפה נקי בקוד המקור של JVM, המאפשר לך לשלב במהירות ובקלות אספנים חלופיים. מי שחלם להוסיף אספן אשפה משלהם ל-JVM יהיה מרוצה ביותר מהשיפור הזה. [307] Parallel Full GC עבור אוסף האשפה G1 . ב-JDK 9, G1 הפך לאספן האשפה המוגדר כברירת מחדל, בעוד שבעבר אספן האשפה המוגדר כברירת מחדל היה Parallel GC, שיכול לאסוף אשפה על פני שרשורים מרובים. עכשיו גם G1 יכול לעשות את זה; בעבר הוא עשה את זה בשרשור אחד, מה שגרם לפעמים לקשיים. אגב, מפתחים יוכלו להגדיר את מספר השרשורים באמצעות הפרמטר - XX:ParallelGCThreads.
[310] Application Class-Data Sharing - פיתוח זה, שאומץ ב-Java 10, מציע טעינה ומעקב משופרים, מרחיב את תכונת שיתוף הכיתה (CDS) הקיימת כדי לאפשר מיקום מחלקות יישומים בארכיון הכללי. Class-Data Sharing או CDS לעבודות קצרות עם קבצים עם סיומת *class. פונקציה זו מאפשרת לך לבחור תת-קבוצה מסוימת של מחלקות, לעבד אותן ולדחוס אותן לארכיון מיוחד. כל זה נעשה כדי לחסוך בזיכרון. לעתים קרובות מופעים שונים של ה-JVM טוענים את אותן מחלקות הכלולות בספרייה הסטנדרטית. ו-CDS מאפשר לכל מופעי ה-JVM הללו לשתף ארכיון בודד עם מחלקות המוצבות בו. זה מקטין הן את זמן טעינת התוכנית והן את השימוש בזיכרון. למעשה, CDS משפר את ביצועי האתחול של JVM ומפחית את טביעת הרגל של משאבים כאשר מספר JVMs פועלים על אותו מכונה פיזית או וירטואלית, החל מגרסה 5. אבל קודם לכן השימוש ב-CDS הוגבל לטעינת האתחול בלבד. כעת גרסה מורחבת בשם Application CDS מאפשרת לך לטעון ארכיונים מיוחדים עם מחלקות עבור מעמיסים אחרים. [312] Thread-Local Handshakes הוא שינוי ברמה נמוכה למדי בתוך ה-JVM שיאפשר לבצע התקשרויות חוזרות על פני שרשורים מבלי להפעיל נקודת בטיחות VM גלובלית. זה יאפשר לך לעצור ללא עלות שרשורים בודדים, ולא בבת אחת (או אף אחד בכלל). [313] הסר את הכלי ליצירת כותרות מקוריות (javah) . בחזרה ב-Java 9, מפתחי שפות החלו להסיר כלים מיותרים באופן פעיל, ו-JEP 313 ממשיך בעבודה הטובה הזו. כלי ה-javah יוצר כותרות JNI אם יש שיטות מקוריות בקוד. בָּרִיא? כמובן, אבל מהדר ה-javac המקורי, החל מ-JDK 8, יכול ליצור בעצמו כותרות JNI. אז עכשיו הם החליטו להיפטר מג'אווה. אגב, פרויקט פנמה נמצא כעת בפיתוח , שבמיוחד יכול להחליף את JNI. [314] הרחבות נוספות של Unicode Language-Tag שינוי זה נועד לשפר את המחלקה java.util.Locale וממשקי ה-API המשויכים להטמעת תוספי Unicode נוספים לתגי שפה BCP 47. בפרט, תגים עבור סוג המטבע (cu), היום הראשון כעת יתמכו בעקיפות בשבוע (fw), אזור (rg) ואזור זמן (tz). [316] הקצאת ערימה על התקני זיכרון חלופיים חידוש זה יעזור למי שמשתמש בסוגי זיכרון אחרים מלבד DRAM. מכיוון שהטכנולוגיות משתנות כל הזמן, השימוש בזיכרון לא נדיף עם אותו ממשק ומאפייני ביצועים הדומים ל-DRAM הוא מציאות אובייקטיבית כיום. אז, JEP 316 מאפשר ל-JVM למקם ערימה בסוגים אחרים של זיכרון. [317] מהדר JIT ניסיוני מבוסס Java . לאחרונה הוכרז פרויקט Metropolis, המציע לשכתב את רוב ה-JVM בג'אווה. למקרה שלא ידעתם, הגרסה הנוכחית כתובה ב-C++. ובכן, אם אתה כבר יודע, כנראה שבהתחלה רעיון כזה ייראה לך מוזר. מכיוון שה-JVM כתוב ב-Java, האם לא תזדקק ל-JVM כדי להפעיל את ה-JVM? כזו היא הרקורסיה, המזכירה מראות זו מול זו. עם זאת, המציאות קצת שונה: רק בגלל שה-JVM כתוב ב-Java, זה לא אומר שצריך להדר אותו לבייטקודים. למעשה אתה יכול להשתמש בקומפילציה של AOT ואז JIT מרכיב את הקוד כפי שהוא פועל לשיפור הביצועים.
כלי כגון javac משמש בדרך כלל להידור קוד Java. זה ממיר תוכנית Java לקבוצה של קבצי מחלקה עם קודי בתים. לאחר מכן, ה-JVM מריץ את קוד הבתים שלך והמתורגמן שלו ממיר אותם להוראות מעבד. בנוסף למתורגמן, ל-JVM יש גם מהדר מובנה, והוא יכול גם ליצור הוראות עבור המעבד מ-bytecode. זהו מה שנקרא הידור זמן ריצה, קומפילציה במהלך ההפעלה. בדרך כלל הקוד שבו נעשה שימוש לרוב נתון להידור כזה - זה משפר את הביצועים. המהדר יכול לבצע פעולות בדרכים שונות: קומפילציה של JIT (Just-in-Time) - דינמית, ממש בזמן הפעלת התוכנית, או קומפילציה של AOT (לפני הזמן) - לפני ביצוע. מהדר jaotc AOT הוצג ב-JDK 9. נכון לעכשיו, ה-Hotspot JVM מכיל שני מהדרים של JIT, C1 (למהירות) ו-C2 (לאופטימיזציה). |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
ממשקי API חדשים
ישנן 73 תוספות לספריות המחלקות הסטנדרטיות של JDK 10.-
ערכת הכלים 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.Reader:
long transferTo (Writer)
: קורא את כל הדמויות מהקורא הזה וכותב את הדמויות לסופר הנתון לפי סדר הקריאה. -
java.lang.Runtime.Version:
ארבע שיטות חדשות המחזירות ערך שלם עבור הגרסה החדשה (JEP 322) של שדות המחרוזת:
feature ()
,interim ()
,patch ()
וupdate ()
. -
java.lang.StackWalker.StackFrame:
-
מחרוזת getDescriptor():
מחזירה נקודת אחיזה למתודה המיוצגת על ידי מסגרת מחסנית זו, כפי שהוגדרה על ידי מפרט Java Virtual Machine.
-
מחרוזת getMethodType():
returns
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