1. 程式人生 > >Java中堆記憶體與棧記憶體淺析

Java中堆記憶體與棧記憶體淺析

Java把記憶體劃分成兩種:一種是棧記憶體,另一種是堆記憶體。

1. 棧記憶體:在函式中定義的一些基本型別的變數和物件的引用變數都是在函式的棧記憶體中分配。當在一段程式碼塊定義一個變數時,Java就在棧中為這個變數分配記憶體空間,當超過變數的作用域後,Java 會自動釋放掉為該變數分配的記憶體空間,該記憶體空間可以立即被另作它用。  

2. 堆記憶體:堆記憶體用來存放由 new 建立的物件和陣列。在堆中分配的記憶體,由 Java 虛擬機器的自動垃圾回收器來管理。

棧的優勢是,存取速度比堆要快,僅次於暫存器,棧資料可以共享。但缺點是,存在棧中的資料大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本型別的變數(,int, short, long, byte, float, double, boolean, char)和物件控制代碼。


相關推薦

【本人禿頂程式設計師】淺析JAVA記憶體記憶體的區別

←←←←←←←←←←←← 快!點關注!!! Java把記憶體劃分成兩種:一種是棧記憶體,一種是堆記憶體。 一、棧記憶體 存放基本型別的變數,物件的引用和方法呼叫,遵循先入後出的原則。 棧記憶體在函式中定義的“一些基本型別的變數和物件的引用變數”都在函式的棧記憶體中分配。當在一

Java記憶體記憶體淺析

Java把記憶體劃分成兩種:一種是棧記憶體,另一種是堆記憶體。 1. 棧記憶體:在函式中定義的一些基本型別的變數和物件的引用變數都是在函式的棧記憶體中分配。當在一段程式碼塊定義一個變數時,Java就在棧中為這個變數分配記憶體空間,當超過變數的作用域後,Java 會自動釋放掉

Java開發記憶體記憶體都有哪些區別?

Java把記憶體劃分成兩種:一種是棧記憶體,一種是堆記憶體。 一、棧記憶體 存放基本型別的變數,物件的引用和方法呼叫,遵循先入後出的原則。 棧記憶體在函式中定義的“一些基本型別的變數和物件的引用變數”都在函式的棧記憶體中分配。 當在一段程式碼塊定義一個變數時,Java就在棧中為這個變數

JAVA面試、進階必備——記憶體記憶體

編輯文章 java堆疊 java面試過程中經常會被問到關於堆疊的問題,這裡我稍微總結一下,供大家參考一下。 java的記憶體分為堆記憶體和棧記憶體 棧記憶體是指程式進入一個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這

記憶體記憶體

java的記憶體分為堆記憶體和棧記憶體   棧記憶體是指程式進入一個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變數也將隨之釋放。 堆是與棧作用不同的記憶體,一般用於存放不放在當前方法棧中

今天做到一道面試題:關於記憶體記憶體的區別

java中記憶體分配策略及堆和棧的比較   1 記憶體分配策略   按照編譯原理的觀點,程式執行時的記憶體分配有三種策略,分別是靜態的,棧式的,和堆式的.   靜態儲存分配是指在編譯時就能確定每個資料目標在執行時刻的儲存空間需求,因而在編譯時就可以給他們分配固定的記憶體空間.這種分配策略要求程式程式碼中

記憶體記憶體--C++記憶體管理

一、根據《C++記憶體管理技術內幕》一書,在C++中,記憶體分成5個區,他們分別是堆,棧,自由存續區,全域性/靜態存續區,常量存續區。   a) 棧:記憶體由編譯器在需要時自動分配和釋放。通常用來儲存區域性變數和函式引數。(為執行函式而分配的區域性變數、函式引數、返回地址等

java(heap)和(stack)的區別

   在學習java的過程中,經常會見到椎和棧的介紹,但是一直都是瞭解了個大概,而且看了之後又經常會忘掉,所以這次在網上查找了一下資料,把對堆和棧的介紹記錄下來,以供複習使用。     在java中記憶體的佔用主要分為四塊:靜態區、程式碼區、堆、棧。其中,堆和棧是使用最多的

Java記憶體記憶體

Java中的堆記憶體和棧記憶體 本文主要討論作者對於Java記憶體中堆疊的理解. Oralce官方對於棧(stack)的解釋: Each Java Virtual Machine thread has a private Java Virtual Machine stack, created at

#一分鐘讓你瞭解Java記憶體記憶體

java堆疊 java面試過程中經常會被問到關於堆疊的問題,這裡我稍微總結一下,供大家參考一下。 java的記憶體分為堆記憶體和棧記憶體 棧記憶體是指程式進入一個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這個方法的棧會釋

java記憶體記憶體的分配

java中堆記憶體和棧記憶體的分配 class Person{ private String name; private int age; public Person()//無參的構造方法 { System.out.println("***

Java的堆疊機制以及記憶體記憶體

java中記憶體分配策略及堆和棧的比較    1 記憶體分配策略    按照編譯原理的觀點,程式執行時的記憶體分配有三種策略,分別是靜態的,棧式的,和堆式的.    靜態儲存分配是指在編譯時就能確定每個資料目標在執行時刻的儲存空間需求,因而在編譯時就可以給他們分配固定的記憶體空間.這種分配策略要求程式程式碼中

Java編譯期、執行期、記憶體記憶體詳解

java中記憶體分配策略及堆和棧的比較    1 記憶體分配策略    按照編譯原理的觀點,程式執行時的記憶體分配有三種策略,分別是靜態的,棧式的,和堆式的.    靜態儲存分配是指在編譯時就能確定每個資料目標在執行時刻的儲存空間需求,因而在編譯時就可以給他們分配固定的記憶體空間.這種分配策略要求程式程式碼中

Java記憶體記憶體詳解

java中記憶體分配策略及堆和棧的比較   1 記憶體分配策略   按照編譯原理的觀點,程式執行時的記憶體分配有三種策略,分別是靜態的,棧式的,和堆式的.   靜態儲存分配是指在編譯時就能確定每個資料目標在執行時刻的儲存空間需求,因而在編譯時就可以給他們分配固定的記憶體空間.這種分配策略要求程式程式碼中

讓你徹底明白JAVA的區別

java程序 運行 一點 動態 自動變 key 空間 類型 lin 原文地址:http://www.2cto.com/kf/201302/190704.html 簡單的說: Java把內存劃分成兩種:一種是棧內存,一種是堆內存。 在函數中定義的一些基本類型的變量和對象的引用

後端---java記憶體詳解

堆外記憶體和堆內記憶體    堆外記憶體又稱為直接記憶體(Direct Memory)並不是虛擬機器執行時資料區的一部分,也不是Java虛擬機器規範中定義的記憶體區域.一直以來是Javaer們難以關注的一片領域,今天我們就一起探索一下這片區域究竟隱藏著什麼東東???? &

Java的關係

資料型別     Java虛擬機器中,資料型別可以分為兩類:基本型別和引用型別。基本型別的變數儲存原始值,即:他代表的值就是數值本身;而引用型別的變數儲存引用值。“引用值”代表了某個物件的引用,而不是物件本身,物件本身存放在這個引用值所表示的地址的位置。 基本型別包括:byte,short,int,long

Java記憶體分配詳解(記憶體記憶體、常量池)

  Java程式是執行在JVM(Java虛擬機器)上的,因此Java的記憶體分配是在JVM中進行的,JVM是記憶體分配的基礎和前提。Java程式的執行會涉及以下的記憶體區域: 1. 暫存器:JVM內部虛擬暫存器,存取速度非常快,程式不可控制。 2. 棧:存放

java記憶體記憶體的區別

一段時間之前,我寫了兩篇文章文章分別是Java的垃圾回收和Java的值傳遞,從那之後我收到了很多要求解釋Java堆記憶體和棧記憶體的郵件,並且要求解釋他們的異同點。在Java中你會看到很多堆和棧記憶體的引用,JavaEE書和文章很難在程式的角度完全解釋什麼是堆什麼是棧。Jav

Java基本型別String在記憶體的儲存

關於在JAVA中基本型別的儲存與String的儲存的問題 主要涉及到堆記憶體和棧記憶體 棧記憶體用來儲存的是基本型別和引用變數(即物件的變數名字) 棧記憶體是用來儲存物件的例項(即new 出來的新物件都由堆記憶體進行儲存) 對於基本型別來說 拿 int 型別舉個例子 i = 1; j