[英]Java:memory allocation,stack vs heap
當我們實例化下面的類時,請您對存儲在堆棧中的成員和存儲在堆中的其他成員進行正確的划分:
class A{
int x;
static int y;
void meth1(){
//some code
}
static void meth2(){
//some code
}
}
對於Java 8之前的版本:
PermGen
中分配static
字段PermGen
static int y
; .class
對象在PermGen
中分配- class A
在那兒; void
或function中聲明的int
, long
, double
等基元在堆棧中分配,而不是垃圾回收的主體-它們與返回地址和參數一起被銷毀; int x
到達那里; 關於堆棧-它用於將指令指針值存儲到命令調用的子例程中,並傳遞所有參數。 我將寫一個例子:
public void a(int x) {
}
public void b() {
this.a(5);
}
調用this.a(5)
, 5
與調用this.a
的代碼行(匯編代碼,不是Java)的地址一起堆棧。
在Java 8中, PermGen
已替換為metaspace
,因此現在有static
字段和.class
對象。 關於成員變量和堆棧,沒有任何變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.