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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JVM之Java栈Java stack

發布時間:2024/2/28 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM之Java栈Java stack 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM之Java棧Java stack


目錄:

  • JVM體系結構概覽
  • JVM之Java棧解析

  • 1. JVM體系結構概覽



    2. JVM之Java棧解析


    stack圖

    先簡單認識,圖示在一個棧中有兩個棧幀:
  • 棧幀 2是最先被調用的方法,先入棧,然后方法 2 又調用了方法1。
  • 棧幀 1處于棧頂的位置,棧幀 2 處于棧底,執行完畢后,依次彈出棧幀 1和棧幀 2,線程結束,棧釋放。
  • 每執行一個方法都會產生一個棧幀,保存到棧(后進先出)的頂部,頂部棧就是當前的方法,該方法執行完畢 后會自動將此棧幀出棧。

  • 解析:

    (1)Stack 棧是什么

  • 棧也叫棧內存,主管Java程序的運行,是在線程創建時創建,它的生命期是跟隨線程的生命期,線程結束棧內存也就釋放,對于棧來說不存在垃圾回收問題,只要線程一結束該棧就Over,生命周期和線程一致,是線程私有的。
  • 8種基本類型的變量+對象的引用變量+實例方法都是在函數的棧內存中分配。
  • (2)棧存儲什么?

    棧幀中主要保存3 類數據:

  • 本地變量(Local Variables):輸入參數和輸出參數以及方法內的變量;
  • 棧操作(Operand Stack):記錄出棧、入棧的操作;
  • 棧幀數據(Frame Data):包括類文件、方法等等。
  • (3) 棧運行原理:

  • 棧中的數據都是以棧幀(Stack Frame)的格式存在,棧幀是一個內存區塊,是一個數據集,是一個有關方法(Method)和運行期數據的數據集,當一個方法A被調用時就產生了一個棧幀 F1,并被壓入到棧中,
    A方法又調用了 B方法,于是產生棧幀 F2 也被壓入棧,
    B方法又調用了 C方法,于是產生棧幀 F3 也被壓入棧,
    ……
    執行完畢后,先彈出F3棧幀,再彈出F2棧幀,再彈出F1棧幀……

  • 遵循“先進后出”/“后進先出”原則。
    每個方法執行的同時都會創建一個棧幀,用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息,每一個方法從調用直至執行完畢的過程,就對應著一個棧幀在虛擬機中入棧到出棧的過程。棧的大小和具體JVM的實現有關,通常在256K~756K之間。

  • (4) 棧+堆+方法區的交互關系

    • HotSpot是使用指針的方式來訪問對象:
      Java堆中會存放訪問類元數據的地址,
      reference存儲的就直接是對象的地址

    補充引用: Java棧,PC寄存器,本地方法棧,堆,方法區和運行常量池

    Java棧

  • Java棧的區域很小,只有1M,特點是存取速度很快,所以在stack中存放的都是快速執行的任務,基本數據類型的數據,和對象的引用(reference)。

  • 駐留于常規RAM(隨機訪問存儲器)區域。但可通過它的“棧指針”獲取處理的直接支持。棧指針若向下移,會創建新的內存;若向上移,則會釋放那些內存。這是一種特別快、特別有效的數據保存方式,僅次于寄存器。創建程序時,Java編譯器必須準確地知道堆棧內保存的所有數據的“長度”以及“存在時間”。這是由于它必須生成相應的代碼,以便向上和向下移動指針。這一限制無疑影響了程序的靈活性,所以盡管有些Java數據要保存在棧里——特別是對象句柄,但Java對象并不放到其中。

  • JVM只會直接對JavaStack(Java棧)執行兩種操作:①以幀為單位的壓棧或出棧;②通過-Xss來設置, 若不夠會拋出StackOverflowError異常。

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

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

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

  • 棧是存放線程調用方法時存儲局部變量表,操作,方法出口等與方法執行相關的信息,Java棧所占內存的大小由Xss來調節,方法調用層次太多會撐爆這個區域。

  • 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的JVM之Java栈Java stack的全部內容,希望文章能夠幫你解決所遇到的問題。

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