java對象與內存

      java的內存管理包括兩個方面,內存分配與內存回收,內存分配指的是JVM在建立java對象時,在堆中所分配的內存。內存回收指的是java對象在失去引用,變成垃圾時,java的內存回收機制將內存進行回收。java

     因爲java的內存回收機制是由一條後臺線程執行的,也是很是耗能的,若是肆無忌憚的建立java對象,讓java的內存回收機制進行回收,這樣作有兩個壞處性能

     1.不斷分配的內存使系統中的可用內存愈來愈少,從而下降程序的運行性能線程

     2.大量已分配內存的java對象的回收使得垃圾回收的分擔加劇,下降程序的運行性能。對象

—.內存分生命週期

      java的變量大致可分爲局部變量和實例變量內存

      局部變量可分爲以下三種內存管理

      1,方法內的形參,方法局部變量,代碼塊中的變量。方法局部變量中參數必須顯示的進行初始化,且生命週期隨方法的消失而消亡。代碼塊中的變量也必須顯示的進行初始化,且隨着代碼塊的消失而消亡。他們都儲存在方法的棧內存中。編譯

     成員變量後臺

     在類體內定義的變量屬於成員變量,若是成員變量使用static進行修飾,那麼該變量屬於類自己,稱爲類變量。若是該成員變量沒有用static進行修飾,屬於對象的實例,稱爲實例變量。同一個JVM只能有一個Class對象,所以同一個JVM的類變量只需同一塊內存。而同一個Class對象可用創造出n多個對象的實例,所以每建立出一個對象的實例,就須要創造出一塊內存。變量

      (1)實例變量

         實例變量的初始化時機有三種

         1. 定義時進行初始化

         2.代碼塊中進行初始化(與1的地位相等)

         3.構造器中進行初始化(地位低於上兩位)

       (2)類變量

         1.定義時進行初始化

         2.靜態代碼塊中進行初始化

    1. 當變量的編譯類型與運行時類型不一樣時,經過變量訪問它引用的對象的實例變量時,該實例變量的值由聲明該變量的類型決定。但經過變量調用它引用的對象的實例方法時,該方法行爲將有它實際所引用的對象來決定。

    2.若是父類的構造器中調用了被子類重寫的方法,且經過子類構造器來建立子類對象,調用了這個父類構造器(無論是顯示調用仍是隱示調用)就會致使子類的重寫方法訪問不到子類的實例變量值得情形。 

相關文章
相關標籤/搜索