標籤:.net 產生 對象 兩種 記憶體回收行程 image 堆記憶體 ima 函數
Java習題10.25
1、
實際上這道題考查的是兩同兩小一大原則:方法名相同,參數類型相同
子類傳回型別小於等於父類方法傳回型別,
子類拋出異常小於等於父類方法拋出異常,
子類存取權限大於等於父類方法存取權限。
2、
Java把記憶體分成兩種,一種叫做棧記憶體,一種叫做堆記憶體。
在函數中定義的一些基本類型的變數和對象的引用變數都是在函數的棧記憶體中分配。當在一段代碼塊中定義一個變數時,java就在棧中為這個變數分配記憶體空間,當超過變數的範圍後,java會自動釋放掉為該變數分配的記憶體空間,該記憶體空間可以立刻被另作他用。
堆記憶體用於存放由new建立的對象和數組。在堆中分配的記憶體,由java虛擬機器自動記憶體回收行程來管理。在堆中產生了一個數組或者對象後,還可以在棧中定義一個特殊的變數,這個變數的取值等於數組或者對象在堆記憶體中的首地址,在棧中的這個特殊的變數就變成了數組或者對象的引用變數,以後就可以在程式中使用棧記憶體中的引用變數來訪問堆中的數組或者對象,引用變數相當於為數組或者對象起的一個別名,或者代號。
引用變數是普通變數,定義時在棧中分配記憶體,引用變數在程式運行到範圍外釋放。而數組&對象本身在堆中分配,即使程式運行到使用new產生數組和對象的語句所在地代碼塊之外,數組和對象本身佔用的堆記憶體也不會被釋放,數組和對象在沒有引用變數指向它的時候(比如先前的引用變數x=null時),才變成垃圾,不能再被使用,但是仍然佔著記憶體,在隨後的一個不確定的時間被記憶體回收行程釋放掉。這個也是java比較占記憶體的主要原因。
以上段落來自於某一本Java程式設計的書中,實際上,
棧中的變數指向堆記憶體中的變數,這就是Java中的指標。
總結起來就是Object Storage Service在堆記憶體,引用變數儲存在棧記憶體。棧記憶體指向堆記憶體。
3、
出於運行速率的考慮,java編譯器會把經常經常訪問的變數放到緩衝(嚴格講應該是工作記憶體)中,讀取變數則從緩衝中讀。但是在多線程編程中,記憶體中的值和緩衝中的值可能會出現不一致。volatile用於限定變數只能從記憶體中讀取,保證對所有線程而言,值都是一致的。但是volatile不能保證原子性,也就不能保證安全執行緒。
4、
DynaValidatorActionForm 動態驗證表單Validation 確認的意思
5、
Java習題10.25