導航:首頁 > 編程語言 > 堆和棧和方法區java

堆和棧和方法區java

發布時間:2022-12-31 11:08:49

java中的,堆,棧,還有方法區都是用來放什麼的

棧里存放的是值類型(int、float等)的值和引用類型(String、你自己創建的類對象等)在堆中的地址;堆中存放引用類u型的值,如果堆中某個值的地址在棧中沒有被指向,他就會被GC回收。
方法區存儲所有的類和靜態變數。

② Java內存中的棧,堆和方法區的用法有什麼不同

JAVA的JVM的內存可分為3個區:堆(heap)、棧(stack)和方法區(method)也叫靜態存儲區。

堆區:

  1. 存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)

2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身

棧區:

  1. 每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中

2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。

3.棧分為3個部分:基本類型變數區、執行環境上下文、操作指令區(存放操作指令)。

方法區:

  1. 又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變數。

2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變數。

③ Java方法區和堆分別儲存什麼

靜態變數、常量在方法區,所有方法,包括靜態和非靜態的,也在方法區。堆儲存對象、數組、非靜態變數。

④ 菜鳥:剛學java,堆區,棧區,靜態區,代碼區,暈了!!!!!

你問題太多了。簡單為你解答一下吧,JAVA語言的內存管理分為棧內存,堆內存和方法區,棧內存用來存儲基本數據類型和對象的引用(對象的實體和引用這兩個概念你要搞明白),堆內存用來存儲對象的實體。。你記住,JAVA是一門面向對象的語言,在JAVA理萬事萬物都是對象,除了兩個東西:1,8個基本數據類型(對應的,還有8個相關的包裝類,但是為了JAVA運行速度的考慮,SUN公司保留了這8個基本數據類型);2,就是你所謂的入口方法,即main方法;這兩點是JAVA不是純粹的面向對象語言的表現,也就是他比較特殊的地方,你記住就行了;接下來,我們來看棧內存和堆內存,JAVA裡面所有東西都是對象,那麼對象保存在哪呢?其實,對象里的所有東西保存在堆內存里,裡麵包括了這個對象的成員變數和方法等東西,而棧內存里,保存的是這個對象所屬的這塊堆內存的首地址?也就是一個16進制的數字,明白了?因為你要告訴JAVA虛擬機從哪裡去開始讀取這塊堆內存啊。所以,你明白棧內存用來存儲基本數據類型和對象的引用,堆內存用來存儲對象的實體了。。而內存管理裡面還有一塊叫方法區,這是JAVA虛擬機用來在執行一個JAVA程序之前保存這個程序的結構等級的地方,虛擬機按照這個結構等級來調用程序里德對象方法等,而靜態變數和靜態方法正是保存在方法區里,所以靜態方法可以在不創建對象的時候就調用,因為創建對象就是為對象分配堆內存,只有創建了對象之後才能調用對象的非靜態方法和非靜態變數。。你的第一個問題就能解答了,這個情況就是zhangsan的堆內存里保存的car對象的引用,而這個引用又指向car對象的堆內存;對象的成員變數是保存在自己的堆內存里的;而入口類是一個特殊的東西,你特殊對待就行了。

⑤ 請高手詳細的解答一下JAVA的堆,棧,方法區,謝謝。

方法區(非堆):是各個線程共享的內存區域,它用於存儲已被虛擬機載入的類信息、常量、靜態變數、即時編譯器編譯後的代碼等數據。
java堆:是虛擬機中所管理的內存中區域最大的一塊,是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內存。java堆是垃圾收集器管理的主要區域。
java虛擬機棧:線程私有的,它的生命周期與線程相同。每個方法被執行的時候都會同時創建一個棧幀,用於存儲局部變數表、操作數棧、動態鏈接、方法出口等信息。每個方法被調用直至執行完成的過程,就對應著一個棧幀在虛擬機中從入棧到出棧的過程。

⑥ 求夾大神,java中將內存分為堆區,棧區,方法區。靜態成員和方法位於方法區,局部變數在棧,對象在堆

Java內存的結構:
Java把內存劃分為4個部分
1. 代碼區 1、棧區 3、堆區 4、靜態區域
其中棧的存取速度是最快的,所以局部變數以及一些小型的數據都
保存在棧區中,對象保存在堆區中。
靜態區 :保存字元常量以及成員變數。
棧區中保存的變數就是保存變數的值。
引用數據類型:
棧區中保存的是對象在堆區的地址,所以也稱作棧區的變數地址為引用

⑦ 重新理解jvm運行時的內存分布(堆棧方法區交互)

棧堆方法區的交互關系

java棧存儲的本地變數表,包括八種數據類型和引用類型,引用類型指向對象的地址,保存在reference,指向java堆,對象類型數據會保存變數名,變數類型,變數值等,這些會存在方法區中去查看(在初始化的時候)。

在java棧中會存放對象實例(s1),但是他對象實例中具體的數據會由java棧中的引用指向java堆中的地址,裡面的對象實例數據存放(實例名,實例相關類型,元數據信息。。。。),而靜態變數,常量,類載入後的信息等會存放在方法區,在運行時需要調用的時候去方法區取,所以方法區和java堆都是共享的。而java棧時線程獨有的數據(包括程序計數器,本地方法棧)。

一個jvm實例,只存在一個堆內存,堆內存的大小是可以調節的。類載入器讀取了類文件之後,需要把類,方法,常量放到堆內存中,保存所有的引用類型的真實信息,以方便執行器執行。堆內存分為三部分。

(養老區就是老年代)

堆內存 邏輯上 分為三部:新生 +養老 +方法區

eden+survivor+Spaces(元空間或者叫方法區或者Perm)

Perm 永久存儲區,是一個常駐內存的區域,用於存放jdk自身攜帶的Class,Interface的元數據,被裝載進此區域的數據是不會被垃圾回收器回收的,只有關閉jvm後才會釋放此區域所佔用的內存。

如果出現OutOfMemoryReeor: PermGen space 說明java虛擬機堆永久帶Perm內存設置不夠,一半出現這種情況,都是程序啟動載入大量第三方jar呆滯的,

對於HotSpot虛擬機很多開發者習慣將方法區稱之為永久代(Parmenent
Gen),永久代是方法區的一個實現,這是不對的,方法區是邏輯上的部分。在jdk7中已經將原本放在永久代的字元串常量池移走了。

常量池( Constant Pool Constant PoolConstant Pool Constant Pool Constant Pool )是方法區的一部分, Class Class文件除了有類的版本、 欄位方法、介面等描述信息外,還有一項就是常量池這部分內容將在類載入後進入。

伊甸園區,所有對象剛new出來都會放在這里。

對象分兩種:
1.如果是大對象直接分配在Old區。
2.如果禁言了逃逸分析,會在棧上分配。
以上兩種都不符合,放入伊甸園區。(Eden區)

看java7中如圖:

對比java8

⑧ java中堆和棧的區別分析

JVM在內存中劃分了三塊(堆區、棧區、方法區)。程序經過編譯後,JVM把.class文件載入到方法區,同一個類只有一個類對象在方法區,然後在堆區開辟內存區域,初始化實例對象,在堆區有一個指針指向方法區中class對象。棧區存放的是變數,變數指向堆區的實例對象。望採納

閱讀全文

與堆和棧和方法區java相關的資料

熱點內容
伺服器被ban的物品怎麼合成 瀏覽:989
如何理解壓和垂 瀏覽:481
程序員的愛情秘密 瀏覽:266
量子計算機會影響程序員嗎 瀏覽:659
安卓開發如何與伺服器連接電腦 瀏覽:993
式數學pdf 瀏覽:773
伺服器如何連接vcenter管理界面 瀏覽:23
php解析域名ip 瀏覽:440
java單例多例 瀏覽:485
51單片機唱 瀏覽:86
csgo如何加入好友伺服器 瀏覽:115
bresenham演算法畫圓簡單代碼 瀏覽:827
怎麼做反詐app 瀏覽:459
亞信面試java 瀏覽:852
生化危機1解壓視頻 瀏覽:347
miui安卓怎麼設置 瀏覽:781
美團app套餐相冊怎麼改 瀏覽:607
單片機程序存儲c 瀏覽:489
賽高網解壓密碼 瀏覽:775
雲伺服器安裝賺錢寶 瀏覽:107