jvm1.png
5.6 KB
#Java #JDK #JVM #JRE
JVM (Java Virtual Machine) - bu kompyuterga Java tilida dasturlarni, shuningdek Java bayt-kodiga kompilyatsiya qilingan boshqa tillarda yozilgan dasturlarni ishga tushirish imkonini beruvchi virtual mashina.
Java-da dastur yozishda dasturning dastlabki kodi kompyuterda bevosita bajarilmaydigan bayt-kodga kompilyatsiya qilinadi. Buning o'rniga, bayt kod JVM o'rnatilgan har qanday mashinada talqin qilinishi va bajarilishi mumkin bo'lgan oraliq tildir. Shunday qilib, baytkod - bu platformadan mustaqil til bo'lib, Java dasturlarini har biri uchun kodni qayta kompilyatsiya qilmasdan turli xil operatsion tizimlar va apparat platformalarida ishlashga imkon beradi.
Agar siz Java dasturlarini ishga tushirishni istasangiz, sizga JRE kerak
Shunday qilib, JVM JRE ning bir qismi, JRE esa JDK ning bir qismidir. JDK Java dasturlarini ishlab chiqish va ishga tushirish uchun barcha kerakli komponentlarni, jumladan JRE va boshqa ishlab chiqish vositalarini o'z ichiga oladi.
JDK, JRE va JVM o'rtasidagi farq
Keling, JDK, JVM va JRE hududlari o'rtasidagi asosiy farqni ko'rib chiqaylik.
1. JDK ishlab chiqish uchun, JRE esa java dasturlarini bajarish uchun.
2. JDK va JREda JVM mavjud, shuning uchun biz java dasturimizni ishga tushiramiz.
3. JVM Java dasturlash tilining yuragi bo'lib, platforma mustaqilligini ta'minlaydi.
4. JDK JREni o'z ichiga oladi, shuning uchun agar sizda JDK bo'lsa, java dasturlarini bajarish va yangilarini ishlab chiqish uchun ham foydalanishingiz mumkin.
5. JRE JDK da mavjud kompilyator va tuzatuvchi kabi ishlab chiqish vositalarini o'z ichiga olmaydi.
6. Agar siz shunchaki java dasturini ishga tushirmoqchi bo'lsangiz, sizga JRE kerak. Agar java dasturini ishlab chiqmoqchi bo'lsangiz, sizga JDK kerak.
7. JVM barcha platformalar uchun umumiy, JRE va JDK esa har bir platforma uchun xosdir.
8. JDK va JRE JVM ning turli versiyalariga ega bo'lishi mumkin, ular ishlashi va funksionalligi jihatidan farq qilishi mumkin.
Umuman olganda, JDK, JRE va JVM java ilovalarini ishlab chiqish va ishga tushirish uchun muhim komponentlardir. Ular platforma mustaqilligini va kuchli va samarali Java ilovalarini yaratish qobiliyatini ta'minlash uchun birgalikda ishlaydi.
#Savol: Agar men JDK ni ustanovka qilsam, har doim u bilan birga JRE ham ustanovka bo'ladimi?
#Javob: Ha, JRE Java virtual mashinasi JVM va Java dasturlarini ishga tushirish uchun zarur bo'lgan boshqa komponentlarni o'z ichiga olgan alohida paket bo'lib, JDK ni o'rnatganda -> JRE va qo'shimcha ishlab chiqish vositalarini o'z ichiga oladi.
#Savol: JVM qanday qilib bytecode .class fileni yaratadi?
#Javob: Java kompilyatori (javac) yordamida .java faylini kompilyatsiya qilganingizda, kompilyator .java faylidagi ko'rsatmalarni ifodalovchi bayt-kodni o'z ichiga olgan .class faylini hosil qiladi.
Men JRE ni alohida ustanovka qila olamanmi?
Javob: Ha, JRE bu alohida paket bo'lib, JDK ni ustanovka qilmasdan ham o'rnatish mumkin.
JVM (Java Virtual Machine) - bu Java dasturlarini boshqaradigan, ularni bayt-koddan operatsion tizim tushunadigan mashina kodiga aylantiruvchi virtual mashina.
JVM (Java Virtual Machine) - bu kompyuterga Java tilida dasturlarni, shuningdek Java bayt-kodiga kompilyatsiya qilingan boshqa tillarda yozilgan dasturlarni ishga tushirish imkonini beruvchi virtual mashina.
Java-da dastur yozishda dasturning dastlabki kodi kompyuterda bevosita bajarilmaydigan bayt-kodga kompilyatsiya qilinadi. Buning o'rniga, bayt kod JVM o'rnatilgan har qanday mashinada talqin qilinishi va bajarilishi mumkin bo'lgan oraliq tildir. Shunday qilib, baytkod - bu platformadan mustaqil til bo'lib, Java dasturlarini har biri uchun kodni qayta kompilyatsiya qilmasdan turli xil operatsion tizimlar va apparat platformalarida ishlashga imkon beradi.
Agar siz Java dasturlarini ishga tushirishni istasangiz, sizga JRE kerak
JRE (Java Runtime Environment) - bu JVM, Java sinf kutubxonalari va Java ilovalarini ishga tushirish (ishlash) uchun zarur bo'lgan boshqa komponentlarni o'z ichiga olgan dasturiy ta'minot to'plami. Bu Java dasturchilariga o'z dasturlarini istalgan platformada ishga tushirish uchun ish vaqti muhitini ta'minlaydi.
JDK (Java Development Kit) - bu JRE, Java kompilyatori (javac), tuzatuvchi (jdb) va Java ilovalarini ishlab chiqish uchun boshqa vositalarni o'z ichiga olgan dasturiy ta'minot ishlab chiqish to'plami. JDK Java dasturlarini yozadigan va kompilyatsiya, debug va loyihalarni boshqarish vositalaridan foydalanadigan ishlab chiquvchilar uchun mo'ljallangan.
Shunday qilib, JVM JRE ning bir qismi, JRE esa JDK ning bir qismidir. JDK Java dasturlarini ishlab chiqish va ishga tushirish uchun barcha kerakli komponentlarni, jumladan JRE va boshqa ishlab chiqish vositalarini o'z ichiga oladi.
JDK, JRE va JVM o'rtasidagi farq
Keling, JDK, JVM va JRE hududlari o'rtasidagi asosiy farqni ko'rib chiqaylik.
1. JDK ishlab chiqish uchun, JRE esa java dasturlarini bajarish uchun.
2. JDK va JREda JVM mavjud, shuning uchun biz java dasturimizni ishga tushiramiz.
3. JVM Java dasturlash tilining yuragi bo'lib, platforma mustaqilligini ta'minlaydi.
4. JDK JREni o'z ichiga oladi, shuning uchun agar sizda JDK bo'lsa, java dasturlarini bajarish va yangilarini ishlab chiqish uchun ham foydalanishingiz mumkin.
5. JRE JDK da mavjud kompilyator va tuzatuvchi kabi ishlab chiqish vositalarini o'z ichiga olmaydi.
6. Agar siz shunchaki java dasturini ishga tushirmoqchi bo'lsangiz, sizga JRE kerak. Agar java dasturini ishlab chiqmoqchi bo'lsangiz, sizga JDK kerak.
7. JVM barcha platformalar uchun umumiy, JRE va JDK esa har bir platforma uchun xosdir.
8. JDK va JRE JVM ning turli versiyalariga ega bo'lishi mumkin, ular ishlashi va funksionalligi jihatidan farq qilishi mumkin.
Umuman olganda, JDK, JRE va JVM java ilovalarini ishlab chiqish va ishga tushirish uchun muhim komponentlardir. Ular platforma mustaqilligini va kuchli va samarali Java ilovalarini yaratish qobiliyatini ta'minlash uchun birgalikda ishlaydi.
#Savol: Agar men JDK ni ustanovka qilsam, har doim u bilan birga JRE ham ustanovka bo'ladimi?
#Javob: Ha, JRE Java virtual mashinasi JVM va Java dasturlarini ishga tushirish uchun zarur bo'lgan boshqa komponentlarni o'z ichiga olgan alohida paket bo'lib, JDK ni o'rnatganda -> JRE va qo'shimcha ishlab chiqish vositalarini o'z ichiga oladi.
#Savol: JVM qanday qilib bytecode .class fileni yaratadi?
#Javob: Java kompilyatori (javac) yordamida .java faylini kompilyatsiya qilganingizda, kompilyator .java faylidagi ko'rsatmalarni ifodalovchi bayt-kodni o'z ichiga olgan .class faylini hosil qiladi.
Men JRE ni alohida ustanovka qila olamanmi?
Javob: Ha, JRE bu alohida paket bo'lib, JDK ni ustanovka qilmasdan ham o'rnatish mumkin.
#Java #Primitive_types
Java’da primitive data types turli qiymatlarni saqlaydi va har bir turi o'zining aniq hajmiga ega. Bu turlar xotirada qat'iy joy egallaydi, ya'ni ular platformaga bog'liq emas. Quyida har bir primitiv turi va ularning xotirada qancha joy egallashi ko'rsatilgan:
Java’da primitive data types turli qiymatlarni saqlaydi va har bir turi o'zining aniq hajmiga ega. Bu turlar xotirada qat'iy joy egallaydi, ya'ni ular platformaga bog'liq emas. Quyida har bir primitiv turi va ularning xotirada qancha joy egallashi ko'rsatilgan:
#TypeCasting #Upcasting va #Downcasting
Type casting — bu bir turdagi qiymatni boshqa turga o'zgartirish jarayoni. Java’da primitiv turlar uchun ikkita casting mavjud: upcasting va downcasting.
1.Upcasting (Katta turga aylantirish):
Upcasting — kichikroq primitiv turdagi qiymatni kattaroq primitiv turga o'zgartirish jarayoni.
Masalan, byte turidagi qiymatni int turiga o'tkazish.
Upcasting avtomatik ravishda amalga oshiriladi va bu widening casting deb ataladi.
Misollar:
#java
Qoidalar:
byte → short → int → long → float → double
No data loss: Ya'ni hech qanday ma'lumot yo'qolmaydi.
2. Downcasting (Kichik turga aylantirish):
Downcasting — kattaroq primitiv turdagi qiymatni kichikroq primitiv turga o'zgartirish jarayoni.
Masalan, int turidagi qiymatni byte turiga o'tkazish kerak bo'lganda foydalaniladi.
Downcasting avtomatik emas, va bu jarayonni qo'lda (explicit) bajarish kerak. Buning sababi — qiymat hajmi kattaroq bo'lgani uchun ma'lumot yo'qolishi mumkin.
Misollar:
Qoidalar:
double → float → long → int → short → byte
Data loss risk: Kichikroq turga aylantirishda qiymatni yo'qotish ehtimoli bor.
Type casting — bu bir turdagi qiymatni boshqa turga o'zgartirish jarayoni. Java’da primitiv turlar uchun ikkita casting mavjud: upcasting va downcasting.
1.Upcasting (Katta turga aylantirish):
Upcasting — kichikroq primitiv turdagi qiymatni kattaroq primitiv turga o'zgartirish jarayoni.
Masalan, byte turidagi qiymatni int turiga o'tkazish.
Upcasting avtomatik ravishda amalga oshiriladi va bu widening casting deb ataladi.
Misollar:
#java
int myInt = 100;
long myLong = myInt; // Upcasting avtomatik ravishda
Qoidalar:
byte → short → int → long → float → double
No data loss: Ya'ni hech qanday ma'lumot yo'qolmaydi.
2. Downcasting (Kichik turga aylantirish):
Downcasting — kattaroq primitiv turdagi qiymatni kichikroq primitiv turga o'zgartirish jarayoni.
Masalan, int turidagi qiymatni byte turiga o'tkazish kerak bo'lganda foydalaniladi.
Downcasting avtomatik emas, va bu jarayonni qo'lda (explicit) bajarish kerak. Buning sababi — qiymat hajmi kattaroq bo'lgani uchun ma'lumot yo'qolishi mumkin.
Misollar:
long myLong = 1000L;
int myInt = (int) myLong; // Downcasting explicit (qo'lda) tarzda amalga oshiriladi
Qoidalar:
double → float → long → int → short → byte
Data loss risk: Kichikroq turga aylantirishda qiymatni yo'qotish ehtimoli bor.
#java #String #StringPool
Java tilidagi String klassi haqida gapirganda, bu eng ko‘p ishlatiladigan va maxsus ob'ektlardan biridir. Stringlar o‘zgarmas (immutable), ya'ni ular bir marta yaratilgandan keyin o‘zgartirilmaydi. Stringlarni yaratishda ikkita asosiy usul mavjud: new kalit so'zi orqali va literal ko'rinishda. Ularning o‘zaro farqi va String pool haqida tushuncha beraman.
1. String yaratish usullari:
a) Literal ko‘rinishda String yaratish
Agar string literal ko‘rinishda yaratilsa, u avtomatik ravishda String Pool deb ataladigan maxsus xotira maydoniga qo‘yiladi.
Misol:
Yuqoridagi misolda s1 va s2 bir xil stringni ("Hello") literal orqali yaratmoqda. Literal bilan yaratilgan stringlar String Pool ga joylashtiriladi, va bir xil qiymatli string bo‘lsa, yangi string yaratmaydi, balki mavjud stringni qaytaradi. Ya'ni, s1 va s2 bir xil xotira manzilini ko‘rsatadi.
b) new kalit so‘zi orqali String yaratish
Agar new kalit so‘zi orqali string yaratilsa, har safar yangi string ob'ekti Heap xotira maydonida yaratiladi, va u String Pool’da mavjud bo‘lsa ham yangi ob'ekt hosil qiladi.
Misol:
java
Yuqoridagi misolda s3 va s4 qiymati bir xil bo‘lsa ham, ularning har biri alohida ob'ekt hisoblanadi. Ya'ni, s3 va s4 har xil xotira manziliga ega bo‘ladi.
2. String Pool nima?
String Pool qanday ishlaydi:
Literal ko‘rinishdagi stringlar String Pool’da saqlanadi.
Agar string literal bilan yaratilgan bo‘lsa va xuddi shunday string Pool’da mavjud bo‘lsa, yangi ob'ekt yaratmaydi, balki mavjud stringdan foydalanadi.
new kalit so‘zi bilan string yaratilganda, u String Pool’da mavjud bo‘lishidan qat'i nazar, yangi ob'ektni Heap xotirasida yaratadi.
3. Misollar bilan String Pool tushunchasi:
java
Xulosa:
String literal String Pool’da saqlanadi va xotiradan tejamli foydalanadi.
new orqali yaratilgan stringlar har safar yangi ob'ekt hosil qiladi.
String Pool bir xil qiymatli stringlarni bir marta yaratib, xotira tejamkorligini ta'minlaydi.
Java tilidagi String klassi haqida gapirganda, bu eng ko‘p ishlatiladigan va maxsus ob'ektlardan biridir. Stringlar o‘zgarmas (immutable), ya'ni ular bir marta yaratilgandan keyin o‘zgartirilmaydi. Stringlarni yaratishda ikkita asosiy usul mavjud: new kalit so'zi orqali va literal ko'rinishda. Ularning o‘zaro farqi va String pool haqida tushuncha beraman.
1. String yaratish usullari:
a) Literal ko‘rinishda String yaratish
Agar string literal ko‘rinishda yaratilsa, u avtomatik ravishda String Pool deb ataladigan maxsus xotira maydoniga qo‘yiladi.
Misol:
String s1 = "Hello";
String s2 = "Hello";
Yuqoridagi misolda s1 va s2 bir xil stringni ("Hello") literal orqali yaratmoqda. Literal bilan yaratilgan stringlar String Pool ga joylashtiriladi, va bir xil qiymatli string bo‘lsa, yangi string yaratmaydi, balki mavjud stringni qaytaradi. Ya'ni, s1 va s2 bir xil xotira manzilini ko‘rsatadi.
b) new kalit so‘zi orqali String yaratish
Agar new kalit so‘zi orqali string yaratilsa, har safar yangi string ob'ekti Heap xotira maydonida yaratiladi, va u String Pool’da mavjud bo‘lsa ham yangi ob'ekt hosil qiladi.
Misol:
java
String s3 = new String("Hello");
String s4 = new String("Hello");Yuqoridagi misolda s3 va s4 qiymati bir xil bo‘lsa ham, ularning har biri alohida ob'ekt hisoblanadi. Ya'ni, s3 va s4 har xil xotira manziliga ega bo‘ladi.
2. String Pool nima?
String Pool — bu Java'dagi maxsus xotira maydoni bo‘lib, unda string literal orqali yaratilgan barcha stringlar saqlanadi. Poolning asosiy maqsadi xotira tejamkorligini ta’minlashdir, ya'ni bir xil qiymatli stringlar bir marta yaratiladi va keyingi safar o‘sha qiymatli stringga murojaat qilinganda yangi ob'ekt yaratmasdan, mavjud ob'ekt qaytariladi.
String Pool qanday ishlaydi:
Literal ko‘rinishdagi stringlar String Pool’da saqlanadi.
Agar string literal bilan yaratilgan bo‘lsa va xuddi shunday string Pool’da mavjud bo‘lsa, yangi ob'ekt yaratmaydi, balki mavjud stringdan foydalanadi.
new kalit so‘zi bilan string yaratilganda, u String Pool’da mavjud bo‘lishidan qat'i nazar, yangi ob'ektni Heap xotirasida yaratadi.
3. Misollar bilan String Pool tushunchasi:
java
public class Main {
public static void main(String[] args) {
// Literal orqali yaratilgan string
String s1 = "Hello";
String s2 = "Hello";
// new orqali yaratilgan string
String s3 = new String("Hello");
String s4 = new String("Hello");
// Tekshirish
System.out.println(s1 == s2); // true - bir xil ob'ekt String Pooldan
System.out.println(s1 == s3); // false - s3 yangi ob'ekt
System.out.println(s3 == s4); // false - har biri yangi ob'ekt
}
}Xulosa:
String literal String Pool’da saqlanadi va xotiradan tejamli foydalanadi.
new orqali yaratilgan stringlar har safar yangi ob'ekt hosil qiladi.
String Pool bir xil qiymatli stringlarni bir marta yaratib, xotira tejamkorligini ta'minlaydi.