Java virtual mashinasi - Java virtual machine

Java virtual mashinasi
DizaynerQuyosh mikrosistemalari
Bitlar32-bit
Tanishtirdi1994
Versiya14.0.1[1]
TuriYig'ma va ro'yxatdan o'tish - ro'yxatdan o'tish
KodlashO'zgaruvchan
DallanishTaqqoslang va tarmoqlang
EndiannessKatta
OchiqHa
Ro'yxatdan o'tish kitoblari
Umumiy maqsadBir usul bo'yicha operandlar to'plami (65535 operandgacha) va har bir usul bo'yicha mahalliy o'zgaruvchilar (65535 gacha)
Java Virtual Machine Specification Java SE 7 Edition asosida Java virtual mashinasi (JVM) arxitekturasiga umumiy nuqtai

A Java virtual mashinasi (JVM) a virtual mashina bu kompyuterning ishlashiga imkon beradi Java dasturlar, shuningdek yozilgan dasturlar boshqa tillar ular ham tuzilgan Java bayt kodi. JVM a tomonidan batafsil bayon etilgan spetsifikatsiya bu JVM dasturida talab qilinadigan narsani rasmiy ravishda tavsiflaydi. Spetsifikatsiyaga ega bo'lish Java dasturlarining turli xil ilovalar bo'yicha o'zaro ishlashini ta'minlaydi, shunda dastur mualliflari Java Development Kit (JDK) asosiy apparat platformasining o'ziga xos xususiyatlaridan xavotirlanishga hojat yo'q.

JVM ma'lumotnomani amalga oshirish tomonidan ishlab chiqilgan OpenJDK loyiha ochiq manba kodi va o'z ichiga oladi JIT kompilyatori deb nomlangan HotSpot. Tijorat tomonidan qo'llab-quvvatlanadigan Java versiyalari mavjud Oracle korporatsiyasi OpenJDK ish vaqtiga asoslangan. Tutilish OpenJ9 OpenJDK uchun yana bir ochiq manba JVM.

JVM spetsifikatsiyasi

Java virtual mashinasi - bu spetsifikatsiya bilan aniqlangan mavhum (virtual) kompyuter. Amaldagi axlat yig'ish algoritmi va Java virtual mashinasi ko'rsatmalarining har qanday ichki optimallashtirilishi (ularning mashina kodiga tarjimasi) ko'rsatilmagan. Ushbu tashlab qo'yishning asosiy sababi dasturlarni keraksiz cheklamaslikdir. Har qanday Java dasturini faqat Java virtual mashinasining mavhum spetsifikatsiyasini amalga oshirish doirasida ishlatish mumkin.[2]

Bilan boshlanadi Java platformasi, Standard Edition (J2SE) 5.0, JVM spetsifikatsiyasida o'zgarishlar ishlab chiqilgan Java jamoatchilik jarayoni JSR 924 sifatida.[3] 2006 yildan boshlab, uchun taklif qilingan o'zgarishlarni qo'llab-quvvatlash uchun spetsifikatsiyadagi o'zgarishlar sinf fayli formati (JSR 202)[4] JSR 924-ning texnik versiyasi sifatida amalga oshirilmoqda. JVM uchun spetsifikatsiya ko'k kitob,[5] Muqaddimada:

Biz ushbu spetsifikatsiya Java Virtual Machine-ni toza xonada amalga oshirish uchun etarli darajada hujjatlashtirishi kerak. Oracle, Java Virtual Machine dasturlarining to'g'ri ishlashini tasdiqlovchi testlarni taqdim etadi.

Oracle-ning JVM-laridan biri nomlangan HotSpot, ikkinchisi, meros qilib olingan BEA tizimlari bu JRockit. Toza xona Java dasturlari o'z ichiga oladi Kaffe, OpenJ9 va Skelmirning CEE-J. Oracle Java savdo belgisiga ega va uni Oracle spetsifikatsiyasiga to'liq mos keladigan dastur paketlarini sertifikatlash uchun foydalanishga ruxsat berishi mumkin.

Sinf yuklagich

JVM bayt kodining tashkiliy birliklaridan biri bu klassdir. Class loader dasturi Java sinfining fayl formatiga mos keladigan har qanday narsani tanib olish va yuklash imkoniyatiga ega bo'lishi kerak. Har qanday dastur boshqa ikkilik shakllarni tanib olish uchun bepul sinf fayllar, lekin uni tanib olish kerak sinf fayllar.

Sinf yuklagich ushbu qat'iy tartibda uchta asosiy ishni bajaradi:

  1. Yuklash: bir turdagi ikkilik ma'lumotlarni topadi va import qiladi
  2. Bog'lanish: tekshirish, tayyorlash va (ixtiyoriy ravishda) piksellar sonini bajaradi
    • Tekshirish: import qilingan turning to'g'riligini ta'minlaydi
    • Tayyorgarlik: sinf o'zgaruvchilari uchun xotirani ajratadi va xotirani standart qiymatlarga moslashtiradi
    • Qaror: ramziy havolalarni turdan to'g'ridan-to'g'ri ma'lumotnomalarga o'zgartiradi.
  3. Initsializatsiya: sinf o'zgaruvchilarini boshlang'ich qiymatlariga moslashtiradigan Java kodini chaqiradi.

Umuman olganda, sinf yuklagichning ikki turi mavjud: bootstrap class loader va foydalanuvchi tomonidan belgilangan class loader.

Har bir Java virtual mashinasini amalga oshirishda ishonchli sinflarni yuklash imkoniyatiga ega bo'lgan bootstrap class loader bo'lishi kerak. Java virtual mashinasi spetsifikatsiyasida sinf yuklagichi sinflarni qanday topishi kerakligi aniqlanmagan.

Virtual mashinalar arxitekturasi

JVM ibtidoiy qiymatlar (butun sonlar va suzuvchi nuqta sonlar) va ustida ishlaydi ma'lumotnomalar. JVM asosan 32 bitli mashinadir. uzoq va ikki baravar 64-bitli turlar tabiiy ravishda qo'llab-quvvatlanadi, lekin ramkaning mahalliy o'zgaruvchilari yoki operandlar to'plamida ikkita saqlash birligini sarflaydi, chunki har bir birlik 32 bitni tashkil qiladi. mantiqiy, bayt, qisqava char turlari barchasi belgisi kengaytirilgan (bundan mustasno char qaysi nolga cho'zilgan ) va xuddi shu kabi 32-bitli butun sonlar sifatida ishlaydi int turlari. Kichik turlarda faqat yuklash, saqlash va turini konvertatsiya qilish bo'yicha bir nechta turdagi ko'rsatmalar mavjud. mantiqiy 8-bit sifatida ishlaydi bayt 0 ifodalaydigan qiymatlar yolg'on va 1 vakili to'g'ri. (Garchi mantiqiy beri tur sifatida qaralmoqda Java virtual mashinasining spetsifikatsiyasi, ikkinchi nashr ushbu masalaga oydinlik kiritdi, tuzilgan va bajarilgan kodda a o'rtasida juda oz farq bor mantiqiy va a bayt dan tashqari mangling nomlari yilda usul imzolari va mantiqiy massivlarning turi. mantiqiyusulidagi imzolar quyidagicha mangled Z esa baytlar mangan B. Mantiqiy massivlar turga ega mantiqiy [] lekin har bir element uchun 8 bitdan foydalaning va JVM booleanlarni a ga to'plash uchun ichki imkoniyatga ega emas bit qatori, shuning uchun ular bajaradigan va o'zini tutadigan turdan tashqari bayt massivlar. Boshqa barcha maqsadlarda mantiqiy turi JVM uchun amalda noma'lum, chunki booleanlarda ishlash bo'yicha barcha ko'rsatmalar ham ishlash uchun ishlatiladi bayts.)

JVM-da a axlat yig'ilgan ob'ektlar va massivlarni saqlash uchun yig'ish. Kodlar, konstantalar va boshqa sinf ma'lumotlari "usul maydonida" saqlanadi. Usul maydoni mantiqan uyumning bir qismidir, ammo bajarilishlar usul maydonini yig'indidan ajratib ko'rishi mumkin va masalan, axlat yig'masligi mumkin. Har bir JVM mavzusi ham o'ziga xosdir chaqiruv to'plami (aniqlik uchun "Java Virtual Machine stack" deb nomlanadi) ramkalar. Har safar usul chaqirilganda yangi kadr yaratiladi va shu usul chiqqanda kadr yo'q qilinadi.

Har bir ramka "operand to'plami" va "mahalliy o'zgaruvchilar" qatorini taqdim etadi. Operand to'plami operandalar uchun hisoblash uchun va chaqirilgan usulning qaytish qiymatini olish uchun ishlatiladi, mahalliy o'zgaruvchilar esa xuddi shu maqsadga xizmat qiladi. registrlar va shuningdek, usul argumentlarini o'tkazish uchun ishlatiladi. Shunday qilib, JVM ikkalasi ham stack mashinasi va a ro'yxatdan o'tish mashinasi.

Bayt kodi bo'yicha ko'rsatmalar

JVM bor ko'rsatmalar quyidagi vazifalar guruhlari uchun:

Maqsad ikkilik muvofiqlik. Har bir alohida xost operatsion tizim JVM va ish vaqtini o'z-o'zidan amalga oshirishga muhtoj. Ushbu JVMlar bayt kodini bir xil ma'noda talqin qiladilar, ammo amaldagi dastur boshqacha bo'lishi mumkin. Bayt kodini taqlid qilishdan ko'ra murakkabroq mos keladigan va samarali ravishda amalga oshiriladi Java yadrosi API har bir xost operatsion tizimiga moslashtirilishi kerak.

Ushbu ko'rsatmalar umumiy to'plamda ishlaydi mavhum ma'lumotlar turlari aksincha mahalliy ma'lumotlar turlari har qanday o'ziga xos ko'rsatmalar to'plami arxitekturasi.

JVM tillari

JVM tili - bu Java Virtual Machine tomonidan joylashtirilishi mumkin bo'lgan haqiqiy sinf fayli bilan ifodalanadigan, funktsional imkoniyatlarga ega bo'lgan har qanday til. Sinf fayli Java Virtual Machine ko'rsatmalarini o'z ichiga oladi (Java bayt kodi ) va ramzlar jadvali, shuningdek boshqa yordamchi ma'lumotlar. Sinf fayl formati - bu kompilyatsiya qilingan sinflar va interfeyslarni namoyish qilish uchun ishlatiladigan apparat va operatsion tizimga bog'liq bo'lmagan ikkilik format.[6]

Bir nechta JVM tillari mavjud, ikkalasi ham JVM-ga ko'chirilgan eski tillar va butunlay yangi tillar. JRuby va Jython ehtimol mavjud tillarning eng taniqli portlari, ya'ni. Yoqut va Python navbati bilan. Java bayt kodini kompilyatsiya qilish uchun noldan yaratilgan yangi tillardan, Klojure, Apache Groovy, Scala va Kotlin eng mashhurlari bo'lishi mumkin. JVM tillari bilan ajralib turadigan xususiyati shundaki, ular bir-biriga mos keladi, masalan, Scala kutubxonalari Java dasturlari bilan va aksincha ishlatilishi mumkin.[7]

Java 7 JVM ishlaydi JSR 292: Dinamik ravishda terilgan tillarni qo'llab-quvvatlash[8] Java platformasida, JVM-da dinamik ravishda terilgan tillarni qo'llab-quvvatlaydigan yangi xususiyat. Bu xususiyat ichida ishlab chiqilgan Da Vinchi mashinasi JVM-ni Java-dan boshqa tillarni qo'llab-quvvatlaydigan qilib kengaytirishdan iborat bo'lgan loyiha.[9][10]

Bayt kodini tekshiruvchi

Java-ning asosiy falsafasi shundaki, u biron bir foydalanuvchi dasturi xost kompyuterini ishdan chiqara olmasligi yoki xost kompyuteridagi boshqa operatsiyalarga nomuvofiq tarzda aralashishi mumkin emasligi va ishonchli usullarga tegishli ba'zi usullar va ma'lumotlar tuzilmalarini himoya qilish mumkinligi nuqtai nazaridan xavfsizdir. kirish kodi yoki bir xil JVM ichida bajarilgan ishonchsiz kod bilan buzilish. Bundan tashqari, ko'pincha dasturchilarning xatolariga yo'l qo'ygan, bu ko'pincha ma'lumotlar buzilishiga yoki qator oxiriga kirish yoki ishga tushirilmagan ko'rsatgichdan foydalanish kabi oldindan aytib bo'lmaydigan xatti-harakatlarga olib keladi. Java-ning bir nechta xususiyatlari ushbu xavfsizlikni ta'minlash uchun birlashtiriladi, shu jumladan axlat yig'ilgan sinf modeli uyum va tekshiruvchi.

JVM barcha bayt kodlarini bajarilishidan oldin tekshiradi. Ushbu tekshirish asosan uch turdagi tekshiruvlardan iborat:

  • Filiallar har doim ham tegishli joylarda joylashgan
  • Ma'lumotlar har doim ishga tushiriladi va havolalar har doim xavfsizdir
  • Shaxsiy yoki paketli shaxsiy ma'lumotlar va usullarga kirish qat'iyan nazorat qilinadi

Ushbu tekshiruvlarning dastlabki ikkitasi, birinchi navbatda, sinf yuklanganda va foydalanishga yaroqli bo'lganda amalga oshiriladigan tekshirish bosqichida amalga oshiriladi. Uchinchisi, birinchi navbatda, dinamik ravishda amalga oshiriladi, agar ma'lumotlar elementlariga yoki sinfning usullariga birinchi navbatda boshqa sinf kirsa.

Tekshiruvchi amaldagi dasturlarda faqat ba'zi bayt kodlari ketma-ketligiga ruxsat beradi, masalan. a sakrash (filial) ko'rsatmasi faqat bitta ko'rsatmani yo'naltirishi mumkin usul. Bundan tashqari, tekshiruvchi har qanday ko'rsatma belgilangan stack joylashgan joyda ishlashini ta'minlaydi,[11] JIT kompilyatoriga stek kirishlarini belgilangan registrga kirishga aylantirishga imkon berish. Shu sababli, JVM stek arxitekturasi bo'lib, emulyatsiya uchun tezlik jazosini nazarda tutmaydi registrga asoslangan arxitektura JIT kompilyatoridan foydalanganda. Kod bilan tasdiqlangan JVM arxitekturasi oldida, JIT kompilyatori uchun nomlangan xayoliy registrlarni yoki maqsadli arxitektura registrlariga ajratilishi kerak bo'lgan xayoliy stak pozitsiyalarini olishining farqi yo'q. Aslida, kodni tekshirish JVMni klassik stek arxitekturasidan farq qiladi, ulardan JIT kompilyatori bilan samarali emulyatsiya yanada murakkab va odatda sekinroq tarjimon tomonidan amalga oshiriladi.

Bayt kodini tekshiruvchi uchun asl spetsifikatsiyada to'liq bo'lmagan yoki ba'zi jihatlarda noto'g'ri bo'lgan tabiiy til ishlatilgan. JVMni rasmiy tizim sifatida ko'rsatishga bir qator urinishlar qilingan. Shunday qilib, hozirgi JVM dasturlarining xavfsizligini yaxshilab tahlil qilish va xavfsizlikning potentsial ekspluatatsiyasini oldini olish mumkin. JVM-ni optimallashtirish, agar kerak bo'lgan dastur xavfsizligi isbotlansa, keraksiz xavfsizlik tekshiruvlarini o'tkazib yuborish mumkin bo'ladi.[12]

Masofaviy kodning xavfsiz bajarilishi

Virtual mashina arxitekturasi mashina ichidagi kodni bajarishga ruxsat berilgan harakatlar ustidan juda nozik nazoratni amalga oshirishga imkon beradi. U kodni "semantik jihatdan" to'g'ri deb hisoblaydi, ya'ni u virtual mashinadan tashqarida bo'lishi mumkin bo'lgan vosita yordamida amalga oshirilgan (rasmiy) bayt kod tekshiruvchisi jarayonidan muvaffaqiyatli o'tgan. Bu foydalaniladigan model, uzoq manbalardan ishonchli kodni xavfsiz bajarilishini ta'minlash uchun mo'ljallangan Java dasturlari va boshqa xavfsiz kodlarni yuklab olish. Bayt kodi tekshirilgandan so'ng, yuklab olingan kod cheklangan holda ishlaydi "qum qutisi ", bu foydalanuvchini noto'g'ri xatti-harakatlardan yoki zararli kodlardan himoya qilish uchun mo'ljallangan. Bayt kodini tekshirish jarayoniga qo'shimcha sifatida noshirlar sertifikatni sotib olishlari mumkin. raqamli imzo appletlar xavfsiz bo'lib, foydalanuvchidan qum maydonidan chiqib ketishini va mahalliy fayl tizimiga kirishini so'rashga ruxsat beradi, bufer, tashqi dasturiy ta'minotni yoki tarmoqni bajaring.

Bayt kod tekshiruvchilarining rasmiy isboti Javacard sanoati tomonidan amalga oshirildi (Java Card bayt kodi uchun o'rnatilgan tekshirgichni rasmiy ishlab chiqish[13])

Bytecode tarjimoni va ayni paytda kompilyator

Har biriga apparat arxitekturasi boshqa Java bayt kodi tarjimon kerak. Agar kompyuterda Java bayt kodli tarjimon bo'lsa, u har qanday Java bayt kod dasturini ishga tushirishi mumkin va xuddi shu dasturni bunday tarjimonga ega bo'lgan har qanday kompyuterda ishlatish mumkin.

Java bayt kodi tarjimon tomonidan bajarilganda, ijro har doim mahalliy kompyuter tilida tuzilgan o'sha dasturning bajarilishidan sekinroq bo'ladi. Ushbu muammo yumshatiladi hozirda (JIT) kompilyatorlari Java bayt kodini bajarish uchun. JIT kompilyatori dasturni bajarayotganda Java bayt kodini ona mashina tiliga tarjima qilishi mumkin. Keyin dasturning tarjima qilingan qismlari ularni talqin qilishdan ko'ra tezroq bajarilishi mumkin. Ushbu texnik dastur tez-tez bajariladigan qismlarga qo'llaniladi. Shu tarzda JIT kompilyatori umumiy ishlash vaqtini sezilarli darajada tezlashtirishi mumkin.

Java dasturlash tili va Java bayt kodi o'rtasida kerakli aloqa yo'q. Java-da yozilgan dastur to'g'ridan-to'g'ri haqiqiy kompyuterning mashina tiliga va Java-dan boshqa tillarda yozilgan dasturlar Java bayt-kodiga tuzilishi mumkin.

Java bayt kodi platformadan mustaqil va xavfsiz bo'lishi uchun mo'ljallangan.[14] Ba'zi JVM dasturlari tarjimonni o'z ichiga olmaydi, lekin ular faqat vaqtida tuzilgan kompilyatordan iborat.[15]

JVM veb-brauzerida

Java platformasining ishlash muddati boshida JVM yaratish uchun veb-texnologiya sifatida sotilgan Boy Internet dasturlari. 2018 yildan boshlab, ko'pgina veb-brauzerlar va operatsion tizimlar paketli veb-brauzerlar Java bilan ta'minlanmaydi plagin va ular yonma-yon yuklashga ruxsat berilmaydiChiroq plagin. Java brauzer plagini eskirgan JDK 9.[16]

The NPAPI Java brauzer plaginlari JVM-ni "deb nomlangan narsalarni" bajarishiga imkon berish uchun ishlab chiqilgan Java dasturlari HTML-sahifalarga kiritilgan. O'rnatilgan plagin o'rnatilgan brauzerlar uchun appletga unga berilgan sahifada to'rtburchaklar shaklida chizishga ruxsat beriladi. Plagin JVM-ni o'z ichiga olganligi sababli, Java dasturlari Java dasturlash tilida cheklanmagan; JVM-ga yo'naltirilgan har qanday til plaginda ishlashi mumkin. Cheklangan API to'plami, appletlarga foydalanuvchi mikrofoniga kirish yoki 3D tezlashishiga imkon beradi, ammo ilovalar sahifani to'rtburchaklar mintaqasidan tashqarida o'zgartira olmaydi. Adobe Flash Player, asosiy raqobatlashadigan texnologiya, xuddi shu jihatdan ishlaydi.

2015 yil iyun holatiga ko'ra W3Techs ma'lumotlariga ko'ra, Java applet va Kumush nur foydalanish barcha veb-saytlar uchun har biri 0,1% gacha, Flash esa 10,8% gacha kamaydi.[17]

JavaScript JVM va tarjimonlar

2016 yil may oyidan boshlab, JavaPoly foydalanuvchilarga o'zgartirilmagan Java kutubxonalarini import qilish va ularni to'g'ridan-to'g'ri JavaScript-dan chaqirishga imkon beradi. JavaPoly, veb-saytlarga, agar foydalanuvchi o'z kompyuterida Java o'rnatilmagan bo'lsa ham, o'zgartirilmagan Java kutubxonalaridan foydalanishga ruxsat beradi.[18]

JavaScript-ga kompilyatsiya

Veb-brauzerlari plaginlarni qo'llab-quvvatlamaydigan mobil qurilmalardan foydalanishning ko'payishi bilan bir qatorda JavaScript-ni bajarish tezligining doimiy yaxshilanishi bilan, ushbu foydalanuvchilarni JavaScript-ga kompilyatsiya qilish orqali yo'naltirishga qaratilgan harakatlar mavjud. JavaScript-ga manba kodini yoki JVM bayt kodini kompilyatsiya qilish mumkin.

JVM tillari bo'yicha universal bo'lgan JVM bayt kodini kompilyatsiya qilish, tilning mavjud kompilyatori asosida bayt kodini yaratishga imkon beradi. JavaScript kompilyatorlariga asosiy JVM bayt kodi TeaVM,[19] Dragome Web SDK-da joylashgan kompilyator,[20] Bck2Brwsr,[21] va j2js-kompilyator.[22]

JVM tillaridan JavaScript-ga etakchi kompilyatorlar tarkibiga Java-to-JavaScript kompilyatori kiradi Google veb-vositalar to'plami, Clojurescript (Klojure ), GrooScript (Apache Groovy ), Scala.js (Scala) va boshqalar.[23]

Java ish vaqti muhiti

Oracle tomonidan chiqarilgan Java Runtime Environment (JRE) - bu mustaqil JVM (HotSpot ), Java standart kutubxona (Java sinf kutubxonasi ), konfiguratsiya vositasi va - JDK 9-da to'xtatilgunga qadar - brauzer plagini. Bu o'rnatilgan eng keng tarqalgan Java muhiti shaxsiy kompyuterlar noutbukda va ish stolida shakl omili. Mobil telefonlar shu jumladan telefonlar va erta smartfonlar JVM bilan jihozlangan ushbu kema, ehtimol maqsadli dasturlarni ishlatish uchun mo'ljallangan JVMni o'z ichiga oladi Micro Edition Java platformasining. Ayni paytda, eng zamonaviy smartfonlar, planshet kompyuterlar va boshqalar qo'l kompyuterlari Java dasturlarini ishga tushirish, ehtimol buni qo'llab-quvvatlash orqali amalga oshirishi mumkin Android operatsion tizimi, o'z ichiga olgan ochiq manba JVM spetsifikatsiyasiga mos kelmaydigan virtual mashina. (Buning o'rniga, Google Android-ning ishlab chiqish vositalari Java dasturlarini kirish va chiqish sifatida qabul qiladi Dalvik bayt kodi, bu Android qurilmalaridagi virtual mashina uchun mahalliy kirish formati.)

Ishlash

JVM spetsifikatsiyasi dastur tafsilotlari bo'yicha dasturchilarga juda ko'p imkoniyat beradi. Java 1.3 dan beri, Oracle-dan JRE, HotSpot deb nomlangan JVM-ni o'z ichiga oladi. U yuqori samarali JVM bo'lishi uchun ishlab chiqilgan.

Kodning bajarilishini tezlashtirish uchun HotSpot o'z vaqtida kompilyatsiyaga tayanadi. Ob'ektlarni ajratish va axlat yig'ishni tezlashtirish uchun HotSpot avlodlar yig'indisidan foydalanadi.

Avlodlar to'plami

The Java virtual mashinasi uchun JVM tomonidan ishlatiladigan xotira maydoni xotirani dinamik ravishda taqsimlash.[24]

HotSpot-da uyum bo'linadi avlodlar:

  • The yosh avlod qisqa muddatli do'konlar ob'ektlar yaratilgan va darhol axlat yig'ildi.
  • Uzoq davom etadigan ob'ektlar ga ko'chiriladi keksa avlod (deb ham nomlanadi ijaraga olingan avlod). Ushbu xotira birinchi va keyingi axlat yig'ishlaridan omon qolgan narsalar saqlanadigan (ikkita) Survivors bo'shliqlariga bo'linadi.

The doimiy avlod (yoki permgen) uchun ishlatilgan sinf Java 8. dan oldingi ta'riflar va tegishli metama'lumotlar. Doimiy avlod avlodning bir qismi emas edi.[25][26] The doimiy avlod Java 8-dan olib tashlandi.[27]

Dastlab doimiy nasl yo'q edi va ob'ektlar va sinflar bir xil joyda birga saqlanardi. Ammo sinflarni tushirish ob'ektlar yig'ilgandan ko'ra juda kam uchraydi, sinf tuzilmalarini ma'lum bir joyga ko'chirish ishlashni sezilarli darajada yaxshilashga imkon berdi.[25]

Xavfsizlik

Oracle's JRE ko'plab kompyuterlarga o'rnatilgan. JRE-ning eskirgan versiyasiga ega bo'lgan oxirgi foydalanuvchilar ko'plab ma'lum hujumlarga qarshi himoyasiz. Bu Java-ning o'ziga xos xavfli ekanligi haqidagi keng tarqalgan fikrga olib keldi.[28] Java 1.7 dan boshlab, Windows uchun Oracle-ning JRE avtomatik yangilanish funktsiyalarini o'z ichiga oladi.

Java brauzerining plaginini bekor qilishdan oldin, har qanday veb-sahifada potentsial Java appleti bo'lishi mumkin edi, bu osonlikcha kirish imkoniyatini yaratdi. hujum yuzasi zararli veb-saytlarga. 2013 yilda Kasperskiy laboratoriyalari Java plaginini kompyuter jinoyatchilari uchun tanlash usuli bo'lganligi haqida xabar berishdi. Java ekspluatatsiyasi xakerlar buzilgan veb-saytlarga joylashtiradigan ko'plab ekspluatatsiya paketlariga kiritilgan.[29] Java dasturlari 2018 yil 25 sentyabrda chiqarilgan Java 11-da olib tashlandi.

Shuningdek qarang

Adabiyotlar

  1. ^ "jdk-updates / jdk14u: teglar". Oracle korporatsiyasi. Olingan 2020-03-18.
  2. ^ Bill Venners, Java virtual mashinasi ichida 5-bob
  3. ^ "Java Community Process (SM) dasturi - JSRlar: Java spetsifikatsiyasi bo'yicha so'rovlar - batafsil JSR # 924". Jcp.org. Olingan 2015-06-26.
  4. ^ "Java Community Process (SM) dasturi - JSRlar: Java spetsifikatsiyasi bo'yicha so'rovlar - batafsil JSR # 202". Jcp.org. Olingan 2015-06-26.
  5. ^ Java virtual mashinasining spetsifikatsiyasi (the birinchi va ikkinchi nashrlari ham onlayn mavjud).
  6. ^ "Java virtual mashinasining spetsifikatsiyasi: Java SE 7 Edition" (PDF). Docs.oracle.com. Olingan 2015-06-26.
  7. ^ "Tez-tez beriladigan savollar - Java bilan ishlash". scala-lang.org. Olingan 2015-11-18.
  8. ^ "Java Community Process (SM) dasturi - JSRlar: Java spetsifikatsiyasi bo'yicha so'rovlar - batafsil JSR # 292". Jcp.org. Olingan 2015-06-26.
  9. ^ "Da Vinchi mashinasi loyihasi". Openjdk.java.net. Olingan 2015-06-26.
  10. ^ "Yangi JDK 7 xususiyati: Java virtual mashinasida dinamik ravishda yozilgan tillarni qo'llab-quvvatlash". Oracle.com. Olingan 2015-06-26.
  11. ^ "Tekshirish jarayoni". Java virtual mashinasining spetsifikatsiyasi. Quyosh mikrosistemalari. 1999 yil. Olingan 2009-05-31.
  12. ^ Freund, Stiven N.; Mitchell, Jon C. (1999). "Java bayt kodi tili va tekshiruvchisi uchun rasmiy asos". Ob'ektga yo'naltirilgan dasturlash, tizimlar, tillar va ilovalar bo'yicha 14-ACM SIGPLAN konferentsiyasi materiallari - OOPSLA '99. 147–166 betlar. CiteSeerX  10.1.1.2.4663. doi:10.1145/320384.320397. ISBN  978-1581132380.
  13. ^ http://www-sop.inria.fr/everest/Lilian.Burdy/CBR02dsn.pdf
  14. ^ Devid J. Ek, Java yordamida dasturlash bilan tanishish, Ettinchi nashr, 7.0 versiyasi, 2014 yil avgust, 1.3 bo'limida "Java virtual mashinasi"
  15. ^ Oracle JRockit kirish Arxivlandi 2015-09-06 da Orqaga qaytish mashinasi R28-ni 2-da chiqaring. "Ayni paytda kompilyatsiya va optimallashtirishni tushunish"
  16. ^ "Oracle Java brauzer plaginini bekor qiladi, yo'q qilinishiga tayyorlanmoqda". Ars Technica. 2016 yil 28-yanvar. Olingan 15 aprel 2016.
  17. ^ "Mijoz tomonidan dasturlash tillaridan foydalanishning yillik yillik tendentsiyalari, 2015 yil iyun". W3techs.com. Olingan 2015-06-26.
  18. ^ Krill, Pol (2016 yil 13-may). "JavaPoly.js mavjud Java kodini import qiladi va to'g'ridan-to'g'ri JavaScript-dan chaqiradi". InfoWorld. Olingan 18 iyul 2016.
  19. ^ "TeaVM loyihasining uy sahifasi". Teavm.org. Olingan 2015-06-26.
  20. ^ "Dragome Web SDK". Dragome.com. Olingan 2015-06-26.
  21. ^ "Bck2Brwsr - APIDesign". Wiki.apidesign.org. Olingan 2015-06-26.
  22. ^ Wolfgang Kuehn (dekatur). j2js-kompilyator GitHub
  23. ^ "JS · jashkenas / coffeescript Wiki · GitHub-ni tuzadigan tillar ro'yxati". Github.com. 2015-06-19. Olingan 2015-06-26.
  24. ^ "Hotspot Java virtual mashinasida axlat yig'ish bo'yicha tez-tez beriladigan savollar". Quyosh mikrosistemalari. 6 fevral 2003 yil. Olingan 7 fevral 2009.
  25. ^ a b Masamitsu, Jon (2006 yil 28-noyabr). "Doimiy avlodni taqdim etish". Olingan 7 fevral 2009.
  26. ^ Nutter, Charlz (2008 yil 11 sentyabr). "InvokeDynamic-ning birinchi ta'mi". Olingan 7 fevral 2009.
  27. ^ "JEP 122: Doimiy avlodni olib tashlang". Oracle korporatsiyasi. 2012-12-04. Olingan 2014-03-23.
  28. ^ "Java nima, u xavfli emasmi va undan foydalanishim kerakmi?". Lifehacker.com. 2013-01-14. Olingan 2015-06-26.
  29. ^ "Java ekspluatatsiyasidan himoya bormi? | Kasperskiy laboratoriyasi". Kasperskiy.com. 2013-09-09. Arxivlandi asl nusxasi 2015-04-04 da. Olingan 2015-06-26.

Tashqi havolalar