java中的記憶體分配可以定義為給java程式或服務分配儲存的過程。 java中的記憶體分配是在JVM(Java虛擬機器)記憶體中完成的,大致分為堆記憶體和非堆記憶體。本文將詳細介紹堆疊記憶體和堆疊記憶體(相當於非堆疊記憶體)是如何分配給Java程式的。
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗眾所周知,java是一種物件導向的語言;因此,Java中建立的所有物件都儲存在JVM(Java虛擬機器)中。 JVM記憶體分為以下幾個部分:
java執行時在執行java程式時使用堆記憶體為物件和類別分配記憶體。每當在java中建立一個物件時,它就會儲存在堆記憶體中。此外,垃圾收集過程在堆疊記憶體上運行,以釋放不必要的空間;垃圾收集從堆區域中刪除那些沒有任何引用的物件。 java中的堆內存分為以下幾個部分:
以下是有關 Java 堆記憶體的一些重點:
顧名思義,堆疊記憶體是基於 LIFO(後進先出)原則。堆疊記憶體用於靜態記憶體分配,java程式中的每個執行線程都有自己的堆疊記憶體。每當呼叫 Java 方法時,都會在 Java 堆疊記憶體中建立一個新區塊,用於保存本機或中間變數以及對方法中其他物件的參考。一旦該方法執行完成,堆疊中的記憶體區塊就會變空並被下一個方法使用。因此,堆疊記憶體大小小於堆疊記憶體。以下是堆疊記憶體的一些重要特性。
這是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. |
現在我們將看到一個顯示記憶體如何分配的 java 範例
代碼:
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()); } }
輸出:
現在我們來看看上面的程式中記憶體是如何分配的:
1.在Main類別中,進入main方法後,由於id、name是局部變量,因此在堆疊記憶體中創建了一個空間,如下所示:
2.對 StudentData 類別建構子的呼叫將會加入到堆疊記憶體的頂端。結果,將儲存以下內容:
3. StudentData類別中宣告的兩個實例變數將儲存在堆記憶體中。
以上是Java中的記憶體分配的詳細內容。更多資訊請關注PHP中文網其他相關文章!