java感悟 從文件到匿名對象 幫別人回答的答案

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

 

計算機怎麼儲存數據的?
計算機是個二進制機器,我們知道電流具有磁效應,通過電路的開關可以改變一個小磁針的N極所指示的方向,這些都知道吧?如果不知道,真得滾去百度了!!!!
通過磁盤,磁盤上的磁道中的小磁粒的不同指向,代表0和1,這裏的一個0或1代表數據存儲單位中的一個位,通過這些小磁針的不同排列,就能表示信息,就跟DNA表示信息的方式類似,通過不同的排列表示信息,所有的文件就這樣被儲存了~~
數字在計算機上怎麼表示知道嗎?byte 類型最大纔可以表示2的7次方減一是127,這是有原因的!
因爲,早起的計算機科學家們規定了八個位表示一個字節byte ,想想一下,一個字節不就可以表示一個二進制的數字了嗎?
是的,你應該能想到最大的數字是二進制的 11111111對吧,這個數換算成十進制是255,爲什麼不是127呢?
因爲人類社會中有負數,所以java規定,最高位表示正負,位是從右往左看的,所以左邊第一位是最高位,很不幸,最高位爲1時,表示負數,所以byte類型的正數最大值只能是01111111,換算成十進制就是127!
想想看,127加1的二進制表示是什麼?定義一個byte類型的數據,讓它的值“等於”128,然後打印出來,然後很驚訝,然後想想,然後明白,然後恍然大悟 ~_~
然後,就有了short、int、long、各種編碼方式、文本文件、各種文件,然後你會發現,計算機原來就是這麼個玩意兒~~

計算機簡化成一個模型:
在我看來(上面的絕對正確,這一段剩下的內容是我自己的想法,畢竟我沒上過大學,呵呵):
就類似於學童時代拿着手指頭算加減法,內存就是手指頭,腦子就是cpu!
手指頭做記錄,腦子做計算!
像不像?其實就死計算機的操作太快了而已!
問題就來了,大量運算或者複雜運算的時候,手指頭就不夠了吧,就要節省着用,這就是要節省內存的原因,接着往下看


什麼是“對象”?
生活中:對象是一個個實實在在存在的物體
程序中:類的實例化,一般具有屬性和方法
思考一下,對象在內存中被創建的時候到底是個什麼東西?
由前面的我們可以知道,說白了,一個確定的對象就是一小塊內存加上一種定義(定義怎樣的排列方式是一種什麼樣的信息)而已!下面就是詳細剖析:
類中的成員變量爲什麼可以通過對象名打點的方式找到?
其實對象創建在堆內存中,其實就是在內存中劃出一小塊內存,來放這個對象!
但是問題又來了,這個內存該劃成多大呢?這是jvm頭疼的事,但是肯定是有大小的,要不然jvm怎麼劃分!
再想一下,對象的屬性是不是每個對象都不一樣?是不是每個人都要標示?但是對象的行爲(即類中的方法)是不是每個人都一樣?
既然這樣,那好,java的設計者們就這樣設計了jvm:
我可以把一塊有限內存分成幾種不同用途的塊,提高使用效率!
堆內存,棧內存,方法區,常量池等!
屬性每個人都有,我就給每個人所在的內存塊中放入表示內存的小塊,放在對象所在的內存塊,這就是堆內存的由來!放那些程序運行過程中需要被記錄住的信息。
類的方法我也要記錄,但是每個對象都記錄的話就太浪費了,那我就劃出來一塊地方,專門存方法,這就是方法區嘍~~
但是,for循環裏面的變量用完之後還有用嗎?很明顯沒用了,局部變量都是這樣的,不是嗎?
所以有了棧內存,存放那些使用過之後就立刻釋放的變量,節省內存!
這麼多內存塊我怎麼找到哪個是哪個呢?於是,內存塊就有了地址,編上編號,就知道哪個是什麼了!
通過這個編號我們就能找到我們在程序中所定義的對象在內存中的真身啦!!!!!!!!!
累死了,終於知道對象在內存中的表現了。
某個類型對象的大小其實是確定的:萬能父類Object(連這都不知道的話,滾去百度)是固定的8K,再加上自身屬性所佔的大小,就是一個對象在堆內存中所佔用的大小了!
這就好辦多了,其實所謂的對象名,即所謂的引用,那個引用的值就是對象所在內存塊的編號(怎樣編號?操作系統的事,這個我就真不知道了,想知道的話,東西太多了,所以有些東西深究不得),
通過這個編號就能找到對象,我們也說成,引用指向那個對象!
什麼是匿名對象?就是沒有被任何一個引用指向的對象。
但是堆內存中是確確實實存在的,只不過棧內存中沒有響應的引用指向它罷了!
自己可以想象到了吧!
但是不起名字也就沒法用,會造成一直佔用堆內存,會造成浪費啊!怎麼辦?
這就是javaGC大神乾的活了,當堆內存中一塊內存沒有任何引用指向它的時候,它也就沒有存在的必要了,GC大神會在某個不確定的時間(GC大神運行也是很耗費內存的,所以一般不會一直運行)把它回收掉!

發佈了32 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章