Peruntukan Memori dalam Java
Aug 30, 2024 pm 03:17 PMPeruntukan 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-olokBagaimana 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:
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. |
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:
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!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cuti atau kembali dari Java 8 Stream Foreach?
