㈠ java在運行的時候,形參保存在什麼地方
當類被載入之後,類的相關信息保存在內存的方法區,同時類內的方法定義也被載入到方法區。
當調用某個方法的時候,虛擬機會為方法在棧內存中分配一個對應的空間,就是棧幀,棧幀中
存放了該方法的參數。當這個方法調用完畢後,對應的棧幀將被收回。
㈡ JAVA中實例化一個對象,成員方法中的參數會在哪分配內存(棧/堆)
成員方法?
JAVA中實例化一個對象 會實例該類中的一些成員變數
成員變數也要看是具體對象 還是基礎變數 基礎變數存儲在 棧中
而具體對象引用存在於棧中 具體內容存在堆中
一些特殊的變數 比如靜態變數會在類載入的時候在特殊的靜態區分配
L樓主說是成員方法??? 實例化對象 對成員方法中的參數是不產生影響的 只有實例對象調用方法的時候 其具體涉及到的方法體內的局部變數才會在內存中分配
分配方式依然是: java基礎變數 和java對象
基礎變數存儲在 棧中
而具體對象引用存在於棧中 具體內容存在堆中
㈢ java線程存放在jvm的哪個區域方法又存放在哪個區呢
聊到JAVA中的方法,大多數人對於方法存儲在方法區還是棧區(虛擬機棧)是很迷茫的。其實方法是存在方法區的下面我們就細細說一下JVM中的 方法區 VS 棧區方法區:用於存儲已被虛擬機載入的類信息、常量、靜態變數、即時編譯器編譯後的代碼等數據,方法編譯出的位元組碼也是保存在這
㈣ 在Java JVM里,如果一個變數被聲明為final或者static, 那麼這個變數的引用以及它的值被存放在哪
static不能用在方法裡面,只能修飾類的屬性或者方法。
static修飾的變數被放在方法區,因為它屬於類變數,是類的一部分。
所有的方法中的普通變數都是在棧中的局部變數表中的,如果是引用類型的變數局部變數表會存放引用對象的地址,這個引用對象實際存儲在堆中。如果被final修飾的話代表這個引用類型的變數指向的地址無法被改變。所以final修飾的引用的地址和final修飾的基本數據類型都會放在常量池,常量池位於方法區中。
㈤ JAVA中實例化一個對象,成員方法中的參數會在哪分配內存(棧/堆)
首先內存總體分為了4個部分,包括 stack segment 、heap segment、code segment 、data segment ;
其中我們程序中用關鍵字new出來的東西都是存放在heap segment;
程序中的局部變數存放在stack segment,這些局部變數是在具體方法執行結束之後,系統自動釋放內存資源(而heap segment中的資源需要java垃圾回收機制來處理);
程序中的方法,是內存中的code segment中的,而且是多個對象 共享一個代碼空間區域;
static靜態變數,需要放在內存中的data segment中,
㈥ JAVA中類中的方法存儲在什麼地方
類載入時 方法信息保存在一塊稱為方法區的內存中, 並不隨你創建對象而隨對象保存於堆中。可參考《深入java虛擬機》前幾章。
另參考(他人文章):
如果instance method也隨著instance增加而增加的話,那內存消耗也太大了,為了做到共用一小段內存,Java 是根據this關鍵字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在傳遞給對象參數的時候,Java 編譯器自動先加上了一個this參數,它表示傳遞的是這個對象引用,雖然他們兩個對象共用一個方法,但是他們的方法中所產生的數據是私有的,這是因為參數被傳進來變成call stack內的entry,而各個對象都有不同call stack,所以不會混淆。其實調用每個非static方法時,Java 編譯器都會自動的先加上當前調用此方法對象的參數,有時候在一個方法調用另一個方法,這時可以不用在前面加上this的,因為要傳遞的對象參數就是當前執行這個方法的對象。