摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 希望轉載,保留摘要,謝謝!
樂觀上上,how can other kno u,u r yourself!I must be strong and carry on. -泥沙磚瓦漿木匠
一.閑談下
201407月記着那時候身體垮了下來,呵呵。想說,對自己的說,也是對大家的負責吧。那時候胸疼胸悶,然后幾乎累垮了,我還堅持了一星期,那一星期真的迷迷糊糊。完全不能看代碼,看代碼就暈。一直想睡想睡。胸口會間接的疼一下。直到29號那晚飯后,我胸很悶。去旁邊附一三甲醫院檢查,做了可怕的心電圖。醫院也是為人好,但是后面發生完全不可理喻。那時候的心情就像下面的圖,當聽到一個急診不負責阿姨全科醫生說“心電圖有個波略高,趕緊24小時監護,立即聯系家長”(她是不知道,我爸爸那時候也是 冠心病 發生期,他是不知道我根本沒大礙被她這么折騰。我的心情會怎么樣?醫生為什么這么不會做人?雖然我在醫科大學讀書。)
現在慢慢的康復,其實沒什么大病,熬夜熬多了,身子垮了。目前還是帶着血葯。stay with me 很多很多。我記着,我會感激。最大的是Home and 親人。
告訴大家:
- 健康第一,革命的本錢。說說容易,做做難。(盡量規律點,不管你熬不熬夜)
- 還有保持樂觀,這對自己對身體都很好
- 適量的運動
- 有些細節注意並嘗試:泡腳….
二.正文
我想結合自己的故事,說實在有點傷感。但是我也不小心故意的,我只是想把這個故事傳下去,我想你們會喜歡。在這里先謝謝了。就像每個在外的人,每個流浪在外學習也好,工作也好。家就像計算機里面的硬盤,想內存,有着你的家,家的地址。
穿越在城市的人呀,有時候駐足看看自己呀。
就像java,他是我的好朋友一樣。java也有家,也有歸宿。在java中,java程序,java虛擬機,操作系統。哪里都是它的歸宿。它在其中彼此交互着。
下面一段話來自JAVA Bible 《Think in java》:
在JAVA中,有六個不同的地方可以存儲數據: 1. 寄存器(register)。這是最快的存儲區,因為它位於不同於其他存儲區的地方——處理器內部。但是寄存器的數量極其有限,所以寄存器由編譯器根據需求進行分配。你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。 2. 堆棧(stack)。位於通用RAM中,但通過它的“堆棧指針”可以從處理器哪里獲得支持。堆棧指針若向下移動,則分配新的內存;若向上移動,則釋放那些內存。這是一種快速有效的分配存儲方法,僅次於寄存器。創建程序時候,JAVA編譯器必須知道存儲在堆棧內所有數據的確切大小和生命周期,因為它必須生成相應的代碼,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然某些JAVA數據存儲在堆棧中——特別是對象引用,但是JAVA對象不存儲其中。海王星娛樂http://bct5453.com/ 3. 堆(heap)。一種通用性的內存池(也存在於RAM中),用於存放所以的JAVA對象。堆不同於堆棧的好處是:編譯器不需要知道要從堆里分配多少存儲區域,也不必知道存儲的數據在堆里存活多長時間。因此,在堆里分配存儲有很大的靈活性。當你需要創建一個對象的時候,只需要new寫一行簡單的代碼,當執行這行代碼時,會自動在堆里進行存儲分配。當然,為這種靈活性必須要付出相應的代碼。用堆進行存儲分配比用堆棧進行存儲存儲需要更多的時間。 4. 靜態存儲(static storage)。這里的“靜態”是指“在固定的位置”。靜態存儲里存放程序運行時一直存在的數據。你可用關鍵字static來標識一個對象的特定元素是靜態的,但JAVA對象本身從來不會存放在靜態存儲空間里。 5. 常量存儲(constant storage)。常量值通常直接存放在程序代碼內部,這樣做是安全的,因為它們永遠不會被改變。有時,在嵌入式系統中,常量本身會和其他部分分割離開,所以在這種情況下,可以選擇將其放在ROM中 6. 非RAM存儲。如果數據完全存活於程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。
在我看來,我想分析的那塊總結如下:
在java中,內存分析可分為Stack-棧 , Heap-堆(里面包含着方法區)等。棧靈活性不好,自動連續分配內存,后進先出。堆動態分配,靈活。所以java的家有這么些地方。
家是一把傘,幫我們遮風擋雨;家是心靈綠洲,帶給我們快樂,排遣我們的煩惱;家是一盞燈,幫我們照亮前行之路。
一個洞也好,什么也好不如家的狗窩。善於電話打回家,一輩子也就這么短。
三.淺淺分析java內存
從一個小的代碼里面說起吧。從小到大,慢慢讓自己明白。
MainClass 程序的入口,像生活的道路一樣。
public class MainClass { public static void main(String[] args) { People dad = new People(); dad.name = "Jeff Father"; People mum = new People(); mum.name = "Jeff Mum"; Home home = new Home(); home.address = "Place of freedom"; home.dad = dad; home.mum = mum; home.mum.giveLove(); } }
下面對應的兩個類 Home People
public class Home { String address; People dad; People mum; } public class People { String name; int age; public void giveLove() { System.out.println("give Love But Say Nothing!"); } }
Home family 寫到這個類我想到了。那時候,24小時監護讓我擔心着。不敢跟父母說,因為那時候老爸還病着。就打給了在外地的姐姐,那時候真心苦笑着ing。但一直告訴自己“一切都會過去的。”
我很喜歡看動物世界,那里充滿着love的瞬間。我也喜歡攝影。
運行后大家可以看到:(這是父母的愛)
“give Love But Say Nothing!”
首先要說的當着三個類被類加載器,類的代碼信息放到了方法區。比如代碼的屬性,無參數或者帶着參數的方法…如下圖所示:
然后根據代碼我們就把內存理一理。前面四句話,那是家里面可愛的爸爸媽媽,希望他們健健康康。當小的時候爸爸媽媽年輕,你也充滿活力。我想到了《Tears in heaven》的那首歌:
People dad = new People();
dad.name = "Jeff Father";
People mum = new People();
mum.name = "Jeff Mum";
第一句話,首先new People()就在非方法區的堆里面,創造了屬於這個new People的塊,其方法giveLove指向了People類信息里面的具體方法。然后棧里面有對這個new出來的塊一個引用 。
第二句話,首先 “Jeff Father”在MainClass類信息里面的常量池里面。上面new出來的塊里面name對其常量一個引用。
家也是這樣子的。家里面的地址是這輩子從小到大記得最清楚的地址。
Home home = new Home();
home.address = "Place of freedom";
以上代碼和前面的一致。大家慢慢體會,待會給一張圖會明白很多。
home.dad = dad;
home.mum = mum;
home里面的出現了一個people屬性,它引用了dad那個塊的id。就這樣,家里面有了dad 有了mum才是家。家有什么好留戀。是個house,不是是親人。 總結的圖如下:
現在的自己,每天喝着中葯。漸漸地進入了養生,健身的行列。發現了直到你靠近死亡的時候,你會感受到生命的價值,你就不會把價值往那些沒用的地方去。
小的喂食,大的給食。無私是他們的天使職責。
下面有個小的練習題:如果在上面的MainClass main函數里加入如下的代碼:
答案就不說了。哈哈
注意: == 表示數據引用相同是返回 true。
如果還不懂得話,可以根據我的圖,和我下面的總結體會。
生命在於弄出點東西。我開始記備忘錄,開始享受生活。開始新的一切。有時候和禪師說的很對,放下一些,去實踐感受一下。受傷了就學會放下了。加油,大家。加油,我自己。最近我喜歡上了 C++ Java ,有自己的目標和理想。我覺得活的很踏實。姐姐的訂婚日子也快到了,祝賀。我要學會smile。
四.感謝知識來源和小結
堆是一個運行時數據區,類的對象從中分配空間。這些對象通過new建立,它們不需要程序代碼來顯式的釋放。java中的對象和數組都存放在堆中。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。
方法區也是堆,存放着類的代碼信息,static變量,常量池
棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象引用。
參考資料:
google和自己的體會。
如以上文章或鏈接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 “贊一個” 按鈕哦。你也可以點擊頁面右邊“分享”懸浮按鈕哦,讓更多的人閱讀這篇文章。