Java 中的內存分配:2022 年你需要知道的一切

已發表: 2021-01-10

java中的內存分配是指將計算機程序和服務分配給專用於虛擬內存空間的過程。 Java 虛擬機將內存分為棧內存和堆內存。 對於 Java 虛擬機,可以從堆棧和堆內存中最大程度地執行應用程序。 每次聲明新變量或對象時,內存都會分配專門用於此類操作的內存。

目錄

堆棧內存

java的Stock Memory分配用於靜態內存和線程執行。 此內存中包含的值是臨時的,並且僅限於特定方法,因為它們會以後進先出的方式不斷被引用。

一旦調用內存並在堆棧內存中創建一個新塊,堆棧內存就會保存原始值和引用,直到方法持續。 在其結束後,該塊被刷新並可供新進程發生。 一般來說,堆棧內存的整體大小與堆內存的大小相比是微不足道的。

學習構建 Swiggy、Quora、IMDB 等應用程序

堆棧內存的特點

根據Java虛擬機 (JVM)內存分配的不同部分,以下是堆棧內存的一些離散特徵:

  • 隨著任何新方法被調用並相應地返回,堆棧內存可以增長或收縮。
  • 只要方法的範圍存在,堆棧中的任何變量都可以運行。
  • 當方法執行時,它會自動分配和解除分配。
  • 在內存已滿的情況下,java.lang.StackOverFlowError 會觸發。
  • 與堆內存相比,它的訪問速度更快。

閱讀:全棧工程師與軟件工程師:您應該選擇哪一個?

java中棧內存分配使用的方法

  • Object push(Object element):在這裡,一個項目被推到堆棧的頂部。
  • Object pop():任何位於棧頂的元素都會被刷新並返回。 如果在調用 pop() 時堆棧空置,則會發生異常 - EmptyStackException。
  • Object peek():在這裡,頂部元素被返回但不進行刷新。
  • Boolean empty():如果循環在其堆棧中沒有任何頂部值,則該函數返回 1(真),否則返回 0(假)。
  • In search(Object element):這用於了解堆棧中是否存在對象。 如果找到該值,則該函數從堆棧頂部返回元素的位置,否則返回-1。

閱讀:面向初學者的 Java 項目和主題

Java 堆空間

Java 堆空間主要由 java 運行時使用,每次在其中創建和分配對象時都會發揮作用。 離散函數,如垃圾收集,不斷刷新之前沒有引用的對象使用的內存。 對於在堆空間中創建的對象,可以跨應用程序自由訪問。

java中內存分配分為幾個部分,即Heap、Stack、Code和Static。

Java 堆內存的特點

  • 可從復雜的內存管理技術訪問,包括年輕代、老一代或永久代和永久代。
  • 在堆內存中,當它變滿時,它會返回 java.lang.OutOfMemoryError。
  • 在這個內存中的訪問比堆棧內存中的訪問要慢。
  • 它不會進行自動釋放,並且需要類似垃圾收集器的功能來移除異物,以使內存在最佳狀態下工作。

java中棧和堆內存分配的一個例子是:

資源

堆空間和堆棧內存:基本差異

堆空間內存堆棧內存
應用程序的所有部分都調用堆內存。 堆棧內存執行僅限於單個線程。
每當創建對象時,它都會存儲在堆空間中。 堆棧內存僅包含其引用和本地原始變量。
此處的對象可在整個應用程序中全局訪問。 其他線程無法訪問堆棧內存對象。
在這裡,內存是根據年輕代和年老代定義的。 內存管理是在後進先出的基礎上進行的。
內存根據應用程序的範圍保持不變。 記憶是暫時的。
XMX 和 XMS JVM 等方法用於定義堆內存的最佳大小。 對於堆棧內存,它由 -XSS 方法確定。
這裡, java.lang.OutOfMemoryError的異常發生在內存滿的情況下。 在這裡,如果內存已滿,則會發生錯誤java.lang.StackOverFlowError
與堆棧內存相比,大小更大,但需要時間來處理。 由於其平滑的 LIFO 操作,尺寸更小但執行速度更快。

另請閱讀:印度的 Java 開發人員薪水

從世界頂級大學在線學習軟件課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

java中的內存分配有兩種方式,主要是棧空間和堆空間。 我們希望它可以幫助您了解這一切的過程。

如果您有興趣了解有關全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目,和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

Java中的內存管理是如何發生的?

Java 虛擬機 (JVM) 是用於運行以 Java 編程語言編寫的程序的計算機程序。 它使使用內存管理的過程變得高效。 此外,它被設計為健壯的,因此即使操作系統發生崩潰,在 JVM 上運行的程序也不會受到影響。 內存管理意味著管理計算機系統中的每一塊內存 (RAM)。 JVM 監控在需要時分配和釋放內存。 一旦程序加載到內存中,JVM 就會為其分配內存空間。 這個過程稱為堆。 堆是應用程序許多部分的公共內存空間。

什麼是 Java 中的垃圾回收?

Java 虛擬機 (JVM) 使用引用計數來跟踪 Java 對象的數量。 在收集任何對象之前,對該對象的引用數必須達到零。 用戶程序可以通過調用 finalize() 方法顯式刪除對象。 Finalize 是 Object 類中的一個靜態方法,由垃圾收集器 (GC) 調用。 Finalize 方法將在垃圾收集器處理該對象之前釋放該對象的所有資源。 垃圾收集器是清理不需要的對象的過程。 當 Java 運行時系統檢測到 Java 堆快滿時,就會觸發 Garbage Collector 進程。 每個對像在 JVM 中都有一個位圖。 為每個對象設置位圖以跟踪它是否已被使用。 當位圖變為 0 時,GC 會處理這個對象。

Java編程語言的特點是什麼?

Java 編程語言是一種通用的高級編程語言,用於構建應用程序和小程序。 Java 軟件可以在任何支持 Java 的平台上運行而無需重新編程。 Java 編程語言的特點是:面向對象的特性、健壯、高安全性、獨立於平台、免費、易學易用。 Java 是一種面向對象的編程語言,它獨立於平台,也可以在任何操作系統或平台上使用。 Java 是編譯語言,生成字節碼,然後在 Java 虛擬機中執行。