當前位置:編程學習大全網 - 源碼下載 - JVM中壹個線程的Java棧和寄存器中放了什麽?

JVM中壹個線程的Java棧和寄存器中放了什麽?

Jvm內存模型:Java代碼運行在Java虛擬機上,由Java虛擬機通過解釋執行(解釋器)或編譯執行(即時編譯器)來完成,所以Java內存模型也指Java虛擬機的運行時內存模型。

運行時內存模型分為兩類:線程私有數據區和* * *共享數據區,其中線程私有數據區包括程序計數器、虛擬機棧和本地方法區,所有線程* * *共享數據區包括Java堆和方法區,方法區有壹個常量池。java運行時的內存模型圖如下:

從圖中可以看出,內存可以分為兩類:線程私有和* * *共享:

(1)線程私有區,包括以下三類:

程序計數器記錄正在執行的虛擬機的字節碼的地址;

虛擬機堆棧:執行方法的內存區域。當執行每個方法時,將在虛擬機堆棧中創建壹個堆棧框架。

本地方法棧:虛擬機的本地方法執行的內存區域;

(2)線程* * *共享區,包括以下兩類。

Java堆:對象分配內存的區域;

方法區:存儲類信息、常量、靜態變量、編譯器編譯的代碼等數據;

常量池:它是方法區的壹部分,用於存儲編譯器生成的各種文字量和符號引用。

樓主說的Java棧壹般是指圖中的虛擬機棧。在代碼中方法調用的過程中,經常需要從壹個方法跳轉到另壹個方法,執行後再返回。在跳轉之前,需要將當前方法的基本信息保存在堆棧中,然後跳轉。

三。關於寄存器的問題

對於java中最常用的虛擬機,sun公司提供的hotspot虛擬機是壹種基於棧的虛擬機。對於android虛擬機,使用google提供的dalvik和art,android 5.0以後默認采用art虛擬機,這是壹種基於註冊的虛擬機。?樓主問的是jvm (java vm),這是壹個基於棧的虛擬機。然後,關於虛擬機棧和這塊內存的內容,我們會進壹步詳細分析,如下圖所示:

可以看到,虛擬機棧是由壹幀壹幀組成的,棧幀中包含了局部變量表、操作棧等子項,所以線程運行時,代碼是通過程序計數器不斷執行下壹條指令的。在實指令操作中,通過控制操作數進出操作堆棧,操作數在局部變量表和操作堆棧之間傳送。

  • 上一篇:昆侖大廳源代碼
  • 下一篇:丁咚門戶源代碼

    嘿!我是李紫,歡迎您閱讀這篇文章《坦克大戰雙人版遊戲編程》。

    相信這個遊戲可能大家都很難。如果妳剛開始學,這個代碼會直接發給大家玩,但是妳可以看看這個代碼!

    當然,如果妳基礎比較好,可以考慮看完之後嘗試玩壹個類似的遊戲,然後有不懂的可以來我的粉絲裙。

    沒有基礎的同學也不用擔心:Python偶爾有免費的在線直播互動課,妳可以跟我學,我帶妳入門。

  • copyright 2024編程學習大全網