Rumah  >  Artikel  >  Java  >  Peruntukan Memori dalam Java

Peruntukan Memori dalam Java

王林
王林asal
2024-08-30 15:17:34521semak imbas

Peruntukan memori dalam java boleh ditakrifkan sebagai proses memperuntukkan storan kepada program atau perkhidmatan java. Peruntukan memori dalam java dilakukan dalam memori JVM (Java Virtual Machine), secara amnya dibahagikan kepada memori timbunan dan bukan timbunan. Artikel ini akan memperincikan cara ingatan timbunan dan ingatan tindanan, bersamaan dengan ingatan bukan timbunan, diperuntukkan kepada atur cara Java.

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

Bagaimana Peruntukan Memori berfungsi dalam java?

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

Peruntukan Memori dalam Java

1. Timbunan Memori

Waktu jalan java menggunakan Heap Memory untuk memperuntukkan memori kepada objek dan kelas semasa melaksanakan program java. Setiap kali objek dibuat dalam java, ia akan disimpan dalam memori timbunan. Di samping itu, proses pengumpulan sampah dijalankan pada memori timbunan untuk membebaskan ruang yang tidak diperlukan; kutipan sampah mengalih keluar 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.

2. 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 memori tindanannya. 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. Oleh itu, saiz memori Stack adalah kurang daripada memori timbunan. Berikut ialah beberapa ciri penting memori tindanan.

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

Berikut ialah perbandingan kecil ingatan tindanan dan timbunan dalam java:

             
              Heap Memory          Stack Memory
The entire application uses heap memory during its runtime. The application in parts uses stack memory. That means it is used one at a time during thread execution.
Heap memory is larger than stack memory. Stack memory is small as compared to heap memory.
All objects created during the application are stored in heap memory. Stack memory only stores local variables and references to objects.
Access to heap memory is slow. Access to stack memory is fast as compared to heap memory.
Heap memory is allocated by creating new objects and gets deallocated by a garbage collector. Stack memory is automatically allocated and deallocated with the end in method execution.
Heap memory stays as long as the application is running. Stack memory stays only until a method is executing.
Memori Timbunan          Memori Tindanan Seluruh aplikasi menggunakan memori timbunan semasa masa jalannya. Aplikasi dalam bahagian menggunakan memori tindanan. Ini bermakna ia digunakan satu demi satu semasa pelaksanaan urutan. Memori timbunan lebih besar daripada memori tindanan. Memori tindanan adalah kecil berbanding memori timbunan. Semua objek yang dibuat semasa aplikasi disimpan dalam ingatan timbunan. Memori tindanan hanya menyimpan pembolehubah setempat dan rujukan kepada objek. Akses kepada timbunan memori adalah perlahan. Akses kepada tindanan memori adalah pantas berbanding memori timbunan. Memori timbunan diperuntukkan dengan mencipta objek baharu dan diagihkan oleh pemungut sampah. Memori tindanan diperuntukkan secara automatik dan diagihkan dengan pengakhiran dalam pelaksanaan kaedah. Memori timbunan kekal selagi aplikasi berjalan. Memori tindanan kekal hanya sehingga kaedah dilaksanakan.

Contoh Peruntukan 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());
}
}

Output:

Peruntukan Memori dalam Java

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

1. Dalam kelas Utama, selepas memasukkan kaedah utama, kerana id, namanya ialah pembolehubah tempatan, ruang dalam memori tindanan dibuat dengan cara berikut:

  • ID integer yang mempunyai nilai primitif akan disimpan dalam memori tindanan.
  • Rujukan objek StudentData s disimpan dalam ingatan tindanan menunjuk ke objek Pelajar asal, yang disimpan dalam ingatan timbunan.

2. Panggilan ke pembina kelas StudentData akan ditambahkan ke bahagian atas memori tindanan. Akibatnya, perkara berikut akan disimpan:

  • Rujukan untuk memanggil objek.
  • id pembolehubah integer mempunyai nilai 11.
  • Rujukan nama pembolehubah jenis String akan menunjuk ke objek yang disimpan dalam kolam rentetan dalam ingatan timbunan.

3. Dua pembolehubah contoh yang diisytiharkan dalam kelas StudentData akan disimpan dalam ingatan timbunan.

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

Kenyataan:
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
Artikel sebelumnya:Jenis Memori dalam JavaArtikel seterusnya:Jenis Memori dalam Java