簡體   English   中英

Java:內存分配,堆棧與堆

[英]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中聲明的intlongdouble等基元在堆棧中分配,而不是垃圾回收的主體-它們與返回地址和參數一起被銷毀;
  • 其他局部變量和成員變量正在堆中分配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM