運行時內存模型分為兩類:線程私有數據區和* * *共享數據區,其中線程私有數據區包括程序計數器、虛擬機棧和本地方法區,所有線程* * *共享數據區包括Java堆和方法區,方法區有壹個常量池。java運行時的內存模型圖如下:
從圖中可以看出,內存可以分為兩類:線程私有和* * *共享:
(1)線程私有區,包括以下三類:
程序計數器記錄正在執行的虛擬機的字節碼的地址;
虛擬機堆棧:執行方法的內存區域。當執行每個方法時,將在虛擬機堆棧中創建壹個堆棧框架。
本地方法棧:虛擬機的本地方法執行的內存區域;
(2)線程* * *共享區,包括以下兩類。
Java堆:對象分配內存的區域;
方法區:存儲類信息、常量、靜態變量、編譯器編譯的代碼等數據;
常量池:它是方法區的壹部分,用於存儲編譯器生成的各種文字量和符號引用。
樓主說的Java棧壹般是指圖中的虛擬機棧。在代碼中方法調用的過程中,經常需要從壹個方法跳轉到另壹個方法,執行後再返回。在跳轉之前,需要將當前方法的基本信息保存在堆棧中,然後跳轉。
三。關於寄存器的問題
對於java中最常用的虛擬機,sun公司提供的hotspot虛擬機是壹種基於棧的虛擬機。對於android虛擬機,使用google提供的dalvik和art,android 5.0以後默認采用art虛擬機,這是壹種基於註冊的虛擬機。?樓主問的是jvm (java vm),這是壹個基於棧的虛擬機。然後,關於虛擬機棧和這塊內存的內容,我們會進壹步詳細分析,如下圖所示:
可以看到,虛擬機棧是由壹幀壹幀組成的,棧幀中包含了局部變量表、操作棧等子項,所以線程運行時,代碼是通過程序計數器不斷執行下壹條指令的。在實指令操作中,通過控制操作數進出操作堆棧,操作數在局部變量表和操作堆棧之間傳送。
嘿!我是李紫,歡迎您閱讀這篇文章《坦克大戰雙人版遊戲編程》。
相信這個遊戲可能大家都很難。如果妳剛開始學,這個代碼會直接發給大家玩,但是妳可以看看這個代碼!
當然,如果妳基礎比較好,可以考慮看完之後嘗試玩壹個類似的遊戲,然後有不懂的可以來我的粉絲裙。
沒有基礎的同學也不用擔心:Python偶爾有免費的在線直播互動課,妳可以跟我學,我帶妳入門。