日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java栈、堆、方法区

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java栈、堆、方法区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、java中的棧(stack)和堆(heap)是java在內存(ram)中存放數據的地方

2、堆區

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

???? jvm只有一個heap區,被所有線程共享,不存放基本類型和對象引用,只存放對象本身。

???? 堆的優劣勢:堆的優勢是可以動態的分配內存大小,生存期也不必事先告訴編譯器,java的垃圾收集器會自動收取這些不在使用的數               

        據,但缺點是,由于要在運行時動態分配內存,存取速度慢。

3、棧區

???? 每一個線程包含一個stack區,只保存基本數據類型的對象和自定義對象的引用(不是對象),對象都存放在共享heap中;

???? 每個棧中的數據(基本數據類型和對象引用)都是私有的,其他棧不能訪問;

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

  棧的優勢劣勢:存取速度比堆要快,僅次于直接位于CPU的寄存器,但必須確定的是存在stack中的數據大小與生存期必須是確定          

          的,缺乏靈活性。單個stack的數據可以共享。

????? stack:是一個先進后出的數據結構,通常保存方法中的參數,局部變量。

      在java中,所有基本類型和引用類型都在stack中儲存,棧中數據的生存空間一般在當前scopes內

4、方法區

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

???? 2、方法區中包含的都是在程序中永遠的唯一的元素

5、在JAVA中,有六個不同的地方可以存儲數據:
  1. 寄存器(register)。這是最快的存儲區,因為它位于不同于其他存儲區的地方——處理器內部。但是寄存器的數量極其有限,所    

????????? 以寄存器由編譯器根據需求進行分配。你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。


  2. 堆棧(stack)。位于通用RAM中,但通過它的“堆棧指針”可以從處理器哪里獲得支持。堆棧指針若向下移動,則分配新的內存;    

    若向上移動,則釋放那些 內存。這是一種快速有效的分配存儲方法,僅次于寄存器。創建程序時候,JAVA編譯器必須知道存儲    

    在堆棧內所有數據的確切大小和生命周期,因為它必須生成 相應的代碼,以便上下移動堆棧指針。這一約束限制了程序的靈活      

    性,所以雖然某些JAVA數據存儲在堆棧中——特別是對象引用,但是JAVA對象不存儲其 中。?


  3. 堆(heap)。一種通用性的內存池(也存在于RAM中),用于存放所以的JAVA對象。堆不同于堆棧的好處是:編譯器不需要知    

    道要從堆里分配多少存儲區 域,也不必知道存儲的數據在堆里存活多長時間。因此,在堆里分配存儲有很大的靈活性。當你需要    

    創建一個對象的時候,只需要new寫一行簡單的代碼,當執行 這行代碼時,會自動在堆里進行存儲分配。當然,為這種靈活性必    

    須要付出相應的代碼。用堆進行存儲分配比用堆棧進行存儲存儲需要更多的時間。?


  4. 靜態存儲(static storage)。這里的“靜態”是指“在固定的位置”。靜態存儲里存放程序運行時一直存在的數據。你可用關鍵字    

     static來標識一個對象的特定元素是靜態的,但JAVA對象本身從來不會存放在靜態存儲空間里。?


  5. 常量存儲(constant storage)。常量值通常直接存放在程序代碼內部,這樣做是安全的,因為它們永遠不會被改變。有時,在    

    嵌入式系統中,常量本身會和其他部分分割離開,所以在這種情況下,可以選擇將其放在ROM中?


  6. 非RAM存儲。如果數據完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。?
   就速度來說,有如下關系:?
   寄存器 < 堆棧 < 堆 < 其他?

????? 運行類過程:方法區找到方法--堆中實例化對象--調用棧(指向堆中實例)

轉載于:https://www.cnblogs.com/yang520ming/p/8807448.html

總結

以上是生活随笔為你收集整理的java栈、堆、方法区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。