Rumah > Java > javaTutorial > teks badan

Jenis Memori dalam Java

王林
Lepaskan: 2024-08-30 15:17:29
asal
306 orang telah melayarinya

Kawasan memori mesin maya Java ialah kawasan masa jalan yang digunakan untuk melaksanakan pelbagai program yang terlibat semasa masa jalan aplikasi java, kawasan memori JVM secara meluas dibahagikan kepada lima bahagian berbeza iaitu kawasan kaedah, kawasan timbunan, Stack, kawasan daftar pembilang program (PC) dan kawasan kaedah asli. Dalam artikel ini, kita akan membincangkan pelbagai jenis memori dalam java.

IKLAN Kursus Popular dalam kategori ini JAVA MASTERY - Pengkhususan | 78 Siri Kursus | 15 Ujian Olok-olok

5 Jenis Memori Terbaik dalam Java

Seperti yang kita tahu bahawa java ialah bahasa berorientasikan objek; oleh itu, semua objek yang dibuat dalam java disimpan dalam JVM (mesin maya Java). Memori JVM pada asasnya dibahagikan kepada bahagian berikut:

1. Kawasan Kaedah

Semua utas pelaksana berkongsi bahagian kawasan memori JVM ini. Elemen kelas seperti kolam malar, medan kelas, kod pembina, kod kaedah, dll. Kawasan kaedah boleh dianggap sebagai sebahagian daripada kawasan timbunan tetapi menyimpan data setiap kelas sahaja. Kita boleh katakan bahawa kawasan kaedah bertanggungjawab untuk menyimpan maklumat peringkat kelas.

2. Timbunan Memori

Heap Memory dalam java digunakan oleh java runtime untuk memperuntukkan memori kepada objek dan kelas semasa pelaksanaan program java. Setiap kali objek dibuat dalam java, ia akan disimpan ke dalam memori timbunan. Proses pengumpulan sampah berjalan pada memori timbunan untuk mengosongkan ruang yang tidak diperlukan iaitu pengumpulan sampah membuang objek tersebut daripada kawasan timbunan yang tidak mempunyai sebarang rujukan. Heap memory dalam java dibahagikan kepada bahagian berikut:

  • Generasi Muda: Ini adalah bahagian di mana semua objek yang baru dicipta diletakkan. Apabila bahagian timbunan java ini terisi, kutipan sampah kecil berlaku untuk mengosongkan ruang.
  • Generasi Lama: Semua objek yang tinggal dalam ingatan selepas kutipan sampah kecil dipindahkan ke generasi lama. Oleh itu, ini adalah bahagian ingatan timbunan di mana terdapat objek tahan lama.
  • Generasi Kekal: Bahagian JVM ini mengandungi kaedah asli dan statik yang menyediakan metadata untuk menjalankan aplikasi java.

Berikut adalah beberapa perkara penting mengenai ingatan timbunan java:

  • Jika ruang Heap menjadi penuh, ralat OutOfMemory dilemparkan oleh java.
  • Akses kepada memori Heap adalah perlahan berbanding memori tindanan.
  • Memori timbunan jauh lebih besar berbanding dengan ingatan tindanan.
  • Memori timbunan tidak selamat untuk benang kerana semua objek berkongsinya.
  • Dealokasi automatik tidak terdapat dalam ingatan timbunan kerana ia memerlukan pemungut sampah untuk mengosongkan ruang.

3. Timbunan Memori

Seperti namanya, ingatan tindanan adalah berdasarkan prinsip LIFO (masuk terakhir, keluar dahulu). Memori tindanan digunakan untuk peruntukan memori statik, dan setiap utas pelaksana dalam program java mempunyai ingatan tindanan sendiri. Setiap kali kaedah Java dipanggil, blok baharu dicipta dalam memori tindanan java untuk memegang pembolehubah tempatan atau perantaraan dan rujukan kepada objek lain dalam kaedah tersebut. Sebaik sahaja pelaksanaan kaedah selesai, blok memori dalam timbunan menjadi kosong dan digunakan oleh kaedah seterusnya. Saiz memori Stack adalah kurang berbanding memori timbunan. Berikut ialah beberapa ciri penting memori tindanan.

  • Memori Tindanan tumbuh dan mengecut sendiri apabila kaedah baharu ditambah dan dialih keluar ke memori tindanan, masing-masing.
  • Memori tindanan diperuntukkan secara automatik dan diagihkan selepas kaedah selesai pelaksanaannya.
  • Akses kepada tindanan memori adalah pantas berbanding memori timbunan.
  • Apabila memori tindanan menjadi penuh, pengecualian yang dipanggil pengecualian limpahan tindanan dilemparkan oleh java.
  • Memori tindanan selamat untuk benang kerana setiap benang mempunyai ingatan tindanan sendiri.

4. Daftar PC

Fungsi utama daftar pc adalah untuk menyimpan alamat yang sedang melaksanakan arahan. Ia juga menyimpan alamat benang yang bertanggungjawab untuk melaksanakan arahan semasa. Saiz memori yang diperuntukkan kepada daftar pc adalah sangat kecil. Aplikasi Java yang dilaksanakan dalam JVM tidak mempunyai sebarang kesan pada memori daftar pc atau kandungannya.

5. Kawasan Asli

Kawasan ini dilaksanakan menggunakan bahasa selain java. Dengan penciptaan benang baharu, memori diperuntukkan di kawasan ini untuk setiap utas yang dibuat. Saiz kawasan asli boleh ditetapkan atau dinamik.

Contoh Memori dalam Java

Sekarang kita akan melihat contoh java yang menunjukkan bagaimana memori diperuntukkan:

Kod:

package com.edubca.javademo;
class StudentData {
int rollNumber;
String name;
public StudentData(int rollNumber, String name) {
super();
this.rollNumber = rollNumber;
this.name = name;
}
public int getRollNumber() {
return rollNumber;
}
public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
int id = 11;
String name = "Yash";
StudentData s = null;
s = new StudentData(id, name);
System.out.println("Student Id is " + s.getRollNumber());
System.out.println("Student Name is " + s.getName());
}
}
Salin selepas log masuk

Output:

Jenis Memori dalam Java

Peruntukan Memori:

Sekarang kita akan melihat bagaimana memori diperuntukkan dalam program di atas:

  • Dalam kelas Utama, selepas memasukkan kaedah utama, kerana id, namanya ialah pembolehubah tempatan ruang dalam memori tindanan dicipta dengan cara berikut:
    • ID integer yang mempunyai nilai primitif akan disimpan dalam memori tindanan.
    • Rujukan objek StudentData s disimpan dalam memori tindanan yang menunjuk ke objek StudentData asal, yang disimpan dalam ingatan timbunan.
  • Panggilan ke pembina kelas StudentData akan ditambahkan lagi ke bahagian atas memori tindanan. Perkara berikut akan disimpan:
    • Rujukan untuk memanggil objek.
    • id pembolehubah integer mempunyai nilai 11.
    • Rujukan nama pembolehubah jenis String yang akan menunjuk kepada objek sebenar yang disimpan dalam kolam rentetan dalam ingatan timbunan.
  • Dua pembolehubah contoh dengan nama studentId dan studentName yang diisytiharkan dalam kelas StudentData akan disimpan dalam ingatan timbunan.

Atas ialah kandungan terperinci Jenis Memori dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan