當前位置:編程學習大全網 - 源碼下載 - android 為什麽 native代碼的內存 不收jvm控制

android 為什麽 native代碼的內存 不收jvm控制

jvm內存模型:Java代碼是運行在Java虛擬機之上的,由Java虛擬機通過解釋執行(解釋器)或編譯執行(即時編譯器)來完成,故Java內存模型,也就是指Java虛擬機的運行時內存模型。運行時內存模型,分為線程私有和***享數據區兩大類,其中線程私有的數據區包含程序計數器、虛擬機棧、本地方法區,所有線程***享的數據區包含Java堆、方法區,在方法區內有壹個常量池。java運行時的內存模型圖,如下:從圖中,可知內存分為線程私有和***享兩大類:(1)線程私有區,包含以下3類:程序計數器,記錄正在執行的虛擬機字節碼的地址;虛擬機棧:方法執行的內存區,每個方法執行時會在虛擬機棧中創建棧幀;本地方法棧:虛擬機的Native方法執行的內存區;(2)線程***享區,包含以下2類Java堆:對象分配內存的區域;方法區:存放類信息、常量、靜態變量、編譯器編譯後的代碼等數據;常量池:存放編譯器生成的各種字面量和符號引用,是方法區的壹部分。樓主提到的Java棧,壹般而言是指圖中的虛擬機棧,在代碼中的方法調用過程中,往往需要從壹個方法跳轉到另壹個方法,執行完再返回,那麽在跳轉之前需要在當前方法的基本信息壓入棧中保存再跳轉。三、關於寄存器的問題對於java最常用的虛擬機,sun公司提供的hotspot虛擬機,是基於棧的虛擬機;而對於android的虛擬機,則采用google提供的dalvik,art兩種虛擬機,在android 5.0以後便默認采用art虛擬機,這是基於寄存器的虛擬機。 樓主問的是jvm(即java vm),這是基於棧的虛擬機。那麽關於虛擬機棧,這塊內存的內容,我們再進壹步詳細分析,如下圖:可以看到,在虛擬機棧有壹幀幀的 棧幀組成,而棧幀包含局部變量表,操作棧等子項,那麽線程在運行的時候,代碼在運行時,是通過程序計數器不斷執行下壹條指令。真正指令運算等操作時通過控制操作棧的操作數入棧和出棧,將操作數在局部變量表和操作棧之間轉移。

  • 上一篇:漲停板封單量怎麽看
  • 下一篇:嵌入式軟件系統的構成,嵌入式開發環境搭建的步驟有哪些
  • copyright 2024編程學習大全網