小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java執(zhí)行程序的內存分析系列專欄

 timtxu 2017-07-02

近段時間研究了java的程序執(zhí)行過程中的內存分配,收獲頗多,解決了我最近時間學習java的很多困惑點。寫java內存分析系列的目的主要有兩個,一來是希望給像我一樣的java初學者一定的啟發(fā),希望也能解決的java關于內存方面的困惑點。二來也是給自己做個總結,畢竟只有自己親自寫出來的東西,才是真正的東西。今天就開始java程序執(zhí)行過程內存分析系列第一篇。

一、 java執(zhí)行程序時內存的劃分 一般來說,作為初學者,一般只是將java程序的內存只是分為棧區(qū),和堆區(qū)。確實剛開始學時這樣劃分能都便于我們理解,但是隨著學習java時間的增多,如果內存劃分還只是簡單的只有棧和堆兩個區(qū),就有很多東西不能深入理解,就拿個常用的字符來說,就很難理解字符串的一些特性。于是乎我這里就增加一個內存區(qū)域的劃分,這樣比以前能理解更多的東西。這個新增的內存區(qū)域是什么呢?其實也不是新增,就是把以前堆內存劃分為方法區(qū)和其他區(qū)。那方法區(qū)里面存放些什么東西勒,方法區(qū)里面主要存放三個東西,第一個是程序的代碼,第二個是常量池,這里主要存放一些java程序中的一些常量和字符串常量,第三個是靜態(tài)的變量。堆內存劃分如圖所示。
二、.一個java程序執(zhí)行過程中的內存分析

首先我定義了一個people類,里面有姓名和性別兩個成員變量和一個說話的成員方法。另外還有一個測試類,測試people類,好了,萬事俱備,只欠東風了。下面正式開始內存分析。

1publicclass People { 2 String name;//定義一個人的姓名3 String sex; 4publicvoid speak{ 5 System.out.println('hi 你好'); 6 } 78 }
1publicclass Test { 2publicstaticvoid main(String args) { 3 People p = new People; 4 System.out.println(p.name); 5 System.out.println(p.sex); 6 p.speak; 7 } 8 }

在程序開始運行時,執(zhí)行的命令是 java Test(eclipse 剛開始也是要執(zhí)行這句命令,就是在執(zhí)行運行的命令時,就是在執(zhí)行java Test),這時jvm也就是java虛擬機會把Test類加載到方法區(qū),然后找到程序的test類的里面的main方法,作為整個程序的入口,開始運行整個程序。首先執(zhí)行第三行命令people 怕= new people;執(zhí)行這行代碼時,內存中發(fā)生了到底哪些變化,當jvm遇到people p首先會執(zhí)行jvm會到他管理路徑下面找people類,如果沒找到,就會報錯,如果找到就會把people類加載到方法區(qū),前面提過方法區(qū)里面主要存放一些代碼和一些常量,然后棧內存中保存p引用變量,并初始化為null,加載完people類之后緊接著就執(zhí)行new people,jvm遇到new關鍵字到堆內存開辟一塊空間,保存people類實例化的對象。并把這塊內存的首地址賦值給p。具體如圖所示。

這里p引用的值是new people對象的內存空間首地址。這里需要注意的是成員變量有個初始值,所有引用類型的初始值是為null,另外一個類創(chuàng)建的多個對象共享成員方法。

三、結語

分析到這里,內存分析系列一就到這里了,接下來我會繼續(xù)深入內存分析,關于this,super以及static,string,和繼承的內存分析,希望能對大家有所幫助。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多