Java SE 16 መለቀቅ

ከስድስት ወራት እድገት በኋላ፣ Oracle ክፍት ምንጭ የሆነውን OpenJDK ፕሮጀክትን እንደ ማጣቀሻ ትግበራ የሚጠቀመው Java SE 16 (Java Platform፣ Standard Edition 16) አወጣ። Java SE 16 ከቀደምት የጃቫ ፕላትፎርም ከተለቀቁት ጋር የኋሊት ተኳኋኝነትን ያቆያል፤ ሁሉም ቀደም ሲል የተፃፉ የጃቫ ፕሮጀክቶች በአዲሱ ስሪት ሲጀመር ምንም ለውጥ ሳይደረግባቸው ይሰራሉ። ለመጫን ዝግጁ የሆኑ የJava SE 16 (JDK፣ JRE እና Server JRE) ግንባታዎች ለሊኑክስ (x86_64፣ AArch64)፣ ዊንዶውስ እና ማክሮስ ተዘጋጅተዋል። በOpenJDK ፕሮጀክት የተገነባው የJava 16 ማጣቀሻ ትግበራ በGPLv2 ፍቃድ ሙሉ በሙሉ ክፍት ነው፣ ከጂኤንዩ ክላስፓዝ ልዩ ሁኔታዎች ከንግድ ምርቶች ጋር ተለዋዋጭ ግንኙነት እንዲኖር ያስችላል።

Java SE 16 እንደ አጠቃላይ የድጋፍ ልቀት የተከፋፈለ ሲሆን እስከሚቀጥለው ልቀት ድረስ ዝማኔዎችን ማግኘቱን ይቀጥላል። የረጅም ጊዜ ድጋፍ (LTS) ቅርንጫፍ Java SE 11 መሆን አለበት፣ ይህም እስከ 2026 ማሻሻያዎችን ማግኘቱን ይቀጥላል። የሚቀጥለው LTS ልቀት ለሴፕቴምበር 2021 ተይዞለታል። ከጃቫ 10 መለቀቅ ጀምሮ ፕሮጀክቱ ወደ አዲስ የእድገት ሂደት መቀየሩን እናስታውስዎታለን፣ ይህም ለአዳዲስ ልቀቶች ምስረታ አጭር ዑደት ነው። አዲስ ተግባር አሁን በየጊዜው በዘመነ ዋና ቅርንጫፍ ውስጥ ተዘጋጅቷል፣ እሱም ዝግጁ የተደረጉ ለውጦችን ያካተተ እና አዲስ የተለቀቁትን ለማረጋጋት በየስድስት ወሩ ቅርንጫፎች የሚከፈቱት።

ለአዲሱ ልቀት ዝግጅት፣ ልማት ከሜርኩሪያል ሥሪት ቁጥጥር ሥርዓት ወደ Git እና GitHub የትብብር ልማት መድረክ ተንቀሳቅሷል። ፍልሰቱ የማጠራቀሚያ ሥራዎችን አፈጻጸም እንደሚያሻሽል፣ የማከማቻ ቅልጥፍናን እንዲጨምር፣ በፕሮጀክቱ ታሪክ ውስጥ ለውጦችን እንዲያገኝ፣ ለኮድ ግምገማ ድጋፍን እንደሚያሻሽል እና ኤፒአይዎች የሥራ ፍሰቶችን በራስ ሰር እንዲሠሩ ያስችላል ተብሎ ይጠበቃል። በተጨማሪም Git እና GitHubን መጠቀም ፕሮጀክቱን ከጂት ጋር ለለመዱት ጀማሪዎች እና ገንቢዎች የበለጠ ማራኪ ያደርገዋል።

በጃቫ 16 ውስጥ አዲስ ባህሪያት የሚከተሉትን ያካትታሉ:

  • ተጨማሪ የሙከራ ሞጁል jdk.incubator.vector ከቬክተር ኤፒአይ አተገባበር ጋር፣ ይህም በ x86_64 እና AArch64 ፕሮሰሰር ላይ የቬክተር መመሪያዎችን በመጠቀም ለሚከናወኑ የቬክተር ስሌት ተግባራትን የሚሰጥ እና ክዋኔዎችን በአንድ ጊዜ በበርካታ እሴቶች (ሲኤምዲ) ላይ እንዲተገበር ያስችላል። የስክላር ኦፕሬሽኖችን በራስ ሰር ቬክተራይዜሽን ለማድረግ በሆትስፖት ጂአይቲ ኮምፕሌተር ውስጥ ከሚቀርቡት ችሎታዎች በተቃራኒ አዲሱ ኤፒአይ ለትይዩ መረጃ ሂደት ቬክተራይዜሽን በግልፅ እንዲቆጣጠሩ ያስችልዎታል።
  • በC++ የተፃፈው JDK እና VM HotSpot ኮድ በC++14 ዝርዝር ውስጥ የገቡትን ባህሪያት እንዲጠቀሙ ተፈቅዶለታል። ከዚህ ቀደም የ C ++ 98/03 ደረጃዎች ተፈቅደዋል.
  • በተዘዋዋሪ ሁነታ የሚሰራው እና በተቻለ መጠን በቆሻሻ አሰባሰብ ምክኒያት መዘግየቶችን የሚቀንስ ZGC (Z Garbage Collector) የመተግበሪያ ክሮችን ቆም ብሎ ሳያቆም በትይዩ የክር ክምችቶችን የማስኬድ ችሎታን ጨምሯል። ZGC አሁን መታገድ የሚያስፈልገው ሥራ ብቻ ነው ያለው፣ የማያቋርጥ መዘግየቶች ያሉት፣ አብዛኛውን ጊዜ ከጥቂት መቶ ማይክሮ ሰከንድ አይበልጥም።
  • ለዩኒክስ ሶኬቶች (AF_UNIX) ወደ SocketChannel፣ ServerSocketChannel እና java.nio.channels ክፍሎች ድጋፍ ታክሏል።
  • ለሊኑክስ ማከፋፈያ አልፓይን ከመደበኛው ሲ ቤተ መፃህፍት ሙስ ጋር ወደብ ተተግብሯል፣ይህም ለኮንቴይነሮች፣ ለማይክሮ ሰርቪስ፣ ለደመና እና ለተከተቱ ስርዓቶች በአከባቢው ታዋቂ ነው። በእንደዚህ ያሉ አካባቢዎች ውስጥ የታቀደው ወደብ እንደ መደበኛ መተግበሪያዎች የጃቫ ፕሮግራሞችን እንዲያሄዱ ያስችልዎታል። በተጨማሪም jlink ን በመጠቀም ሁሉንም ጥቅም ላይ ያልዋሉ ሞጁሎችን ማስወገድ እና አፕሊኬሽኑን ለማስኬድ በቂ የሆነ አነስተኛ አካባቢ መፍጠር ይችላሉ ፣ ይህም በመተግበሪያ የተወሰኑ የታመቁ ምስሎችን እንዲፈጥሩ ያስችልዎታል።
  • በJVM HotSpot ውስጥ በክፍል ሜታዳታ (ሜታስፔስ) የተያዘ ማህደረ ትውስታን የመመደብ እና የመመለስ ስራዎችን በማመቻቸት የላስቲክ ሜታስፔስ ዘዴ ተተግብሯል። የላስቲክ ሜታስፔስ አጠቃቀም የማህደረ ትውስታ መበታተንን ይቀንሳል፣ የክፍል ጫኚን ከራስ በላይ ይቀንሳል፣ እንዲሁም ጥቅም ላይ ባልዋለ የክፍል ሜታዳታ ወደ ኦፕሬቲንግ ሲስተም በፍጥነት ወደ ማህደረ ትውስታ በመመለሱ የረጅም ጊዜ የአገልጋይ አፕሊኬሽኖች አፈፃፀም ላይ በጎ ተጽእኖ ይኖረዋል። ክፍሎችን ካራገፉ በኋላ የማህደረ ትውስታ መልቀቂያ ሁነታን ለመምረጥ “-XX:MetaspaceReclaimPolicy=(ሚዛናዊ|አጥቂ|ምንም)” የሚለው አማራጭ ቀርቧል።
  • በAArch64 አርክቴክቸር ላይ ተመስርተው በሃርድዌር ላይ ለሚሰሩ ዊንዶውስ ሲስተሞች የJDK ወደብ ታክሏል።
  • የJava መተግበሪያዎች አዲሱን የMemorySegment፣MemoryAddress እና MemoryLayout abstractions በመጠቀም ከጃቫ ክምር ውጭ ያሉ የማህደረ ትውስታ ቦታዎችን ደህንነቱ በተጠበቀ ሁኔታ እና በብቃት እንዲደርሱ የሚያስችለው የውጭ-የማስታወሻ መዳረሻ ኤፒአይ ሶስተኛ ቅድመ እይታ ቀርቧል።
  • ከጃቫ ወደ ቤተኛ ኮድ መዳረሻ የሚሰጥ የሙከራ የውጭ አገናኝ ኤፒአይ ተተግብሯል። ከውጪ-ሜሞሪ ኤፒአይ ጋር፣ አዲሱ የፕሮግራም አወጣጥ በይነገጽ በተለመደው የጋራ ቤተ-መጻሕፍት ላይ መጠቅለያዎችን መፍጠር በጣም ቀላል ያደርገዋል።
  • ለራስ-የያዙ የጃቫ አፕሊኬሽኖች ጥቅሎችን ለመፍጠር የሚያስችል የጃፓኬጅ መገልገያ ታክሏል። መገልገያው በjavapackager ከJavaFX ላይ የተመሰረተ እና ለተለያዩ መድረኮች (msi እና exe ለ Windows, pkg እና dmg ለ macOS, deb እና rpm ለሊኑክስ) ቅርጸቶችን እንዲፈጥሩ ያስችልዎታል. ጥቅሎቹ ሁሉንም አስፈላጊ ጥገኞች ያካትታሉ.
  • እንደ sun.misc.Unsafe ካሉ ወሳኝ ኤፒአይዎች በስተቀር የሁሉንም የJDK ውስጣዊ አካላት ጥብቅ ማሸግ በነባሪነት ነቅቷል። የ"ህገ-ወጥ-መዳረሻ" አማራጭ አሁን በነባሪነት "ፍቃድ" ከመሆን ይልቅ ወደ "መከልከል" ተቀናብሯል፣ ይህም ከኮድ አብዛኛዎቹን የውስጥ ክፍሎችን፣ ዘዴዎችን እና መስኮችን ለመድረስ ሙከራዎችን ያግዳል። ገደቡን ለማለፍ፣ “-illegal-access=ፍቃድ” አማራጭን ይጠቀሙ።
  • በ "አምሳያ" ኦፕሬተር ውስጥ የስርዓተ-ጥለት ማዛመጃ አተገባበር ተረጋግቷል, ይህም የተረጋገጠውን እሴት ለማመልከት ወዲያውኑ የአካባቢያዊ ተለዋዋጭን ለመወሰን ያስችልዎታል. ለምሳሌ፣ ወዲያውኑ “ከሆነ (obj exampleof String s && s.length() > 5) {.. s.contains(..) ..}” በማለት “String s = (String) obj”ን በግልፅ ሳይገልጹ መጻፍ ይችላሉ። ነበር፡ ከሆነ (obj instanceof ቡድን) {ቡድን ቡድን = (ቡድን) obj; var ግቤቶች = group.getEntries (); } አሁን “ቡድን = (ቡድን) obj”ን ሳይገልጹ ማድረግ ይችላሉ፡ if (obj instanceof Group group) {var entries = group.getEntries(); }
  • የ"መዝገብ" ቁልፍ ቃል አተገባበር የተረጋጋ ሲሆን ይህም መረጃ በሚከማችበት ጊዜ የተለያዩ ዝቅተኛ ደረጃ ዘዴዎችን እንደ እኩል () ፣ hashCode () እና toString () ያሉ የተለያዩ የዝቅተኛ ደረጃ ዘዴዎችን በግልፅ የመግለፅ አስፈላጊነትን ያስወግዳል ለክፍል ትርጓሜዎች በሜዳዎች ብቻ የማይለወጥ. አንድ ክፍል የእኩል()፣ hashCode() እና toString() ስልቶች መደበኛ አተገባበርን ሲጠቀም ያለግልጽ ፍቺያቸው ማድረግ ይችላል፡ የህዝብ መዝገብ BankTransaction(LocalDate date፣ double amount፣string description) {}

    ይህ መግለጫ ከግንባታ እና መግጠሚያ ዘዴዎች በተጨማሪ የእኩል()፣ hashCode() እና toString() ስልቶች አተገባበርን በራስ ሰር ይጨምራል።

  • ሁለተኛ ረቂቅ ለታሸጉ ክፍሎች እና በይነገጾች በሌሎች ክፍሎች እና በይነገጾች አተገባበርን ለመውረስ፣ ለማራዘም ወይም ለመሻር መጠቀም ለማይችሉ ቀርቧል። የታሸጉ ክፍሎች ለማራዘሚያ የተፈቀዱትን ንዑስ ክፍሎችን በግልፅ በመዘርዘር የሱፐር መደብ አጠቃቀምን ከመዳረሻ ማስተካከያዎች ለመገደብ የበለጠ ገላጭ መንገድን ይሰጣሉ። ጥቅል com.example.ጂኦሜትሪ; በሕዝብ የታሸገ ክፍል ቅርጽ com.example.polar.ክበብ፣ com.example.quad.አራት ማዕዘን፣ com.example.quad.ቀላል.ካሬ {…} ይፈቅዳል።

ምንጭ: opennet.ru

አስተያየት ያክሉ