static靜態方法執行 記憶體分析

2021-09-21 12:51:29 字數 961 閱讀 1739

1、static方法與非static方法區別:

● 生命週期(lifecycle):

靜態方法(static method)與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體(memory),不自動進行銷毀,會一直存在於記憶體中,直到jvm關閉。

非靜態方法(non-static method)又叫例項化方法,屬於例項物件,例項化後才會分配記憶體,必須通過類的例項來引用。不會常駐記憶體,當例項物件被jvm **之後,也跟著消失。 

● 在記憶體中儲存位置

靜態方法和靜態變數建立後始終使用同一塊記憶體,是連續的。

非靜態方法會存在於記憶體的多個地方,是離散的。

● 效率

靜態方法的使用效率比非靜態方法的效率高。

● 執行緒安全

靜態方法是共享**段,靜態變數是共享資料段。既然是「共享」就有併發(concurrence)的問題。

● 使用範圍

靜態方法:⒈ 有靜態屬性的類,一般會定義靜態方法。⒉ 沒有屬性的類,一般會定義靜態方法。⒊ 如果乙個方法與他所在類的例項物件無關,那麼它就應該是靜態的。靜態方法可以被繼承但是不能被覆蓋。

●  總計

如果靜態方法在系統中定義太多,會占用大量的資源,最後造成記憶體溢位,所以靜態方法不能濫用。如果從執行緒安全、效能、相容性上來看,選用例項化方法為宜。

static 方法 (靜態方法)

方法在該方法所屬型別第一次被使用的時候載入、在該型別所在應用程式域解除安裝的時候解除安裝、也就是說 static 方法只載入一次、除非整個domain 被解除安裝了。

例項方法(非靜態方法)

總的來說,static 方法只用載入一次,但一直會占用記憶體。多了些資源消耗;而例項方法需要載入多次,但不會一直占用記憶體。少些資源消耗。一般來說, 在程式裡面,一些使用頻率高的方法就用static 方法、使用頻率低的則用例項方法。

二、靜態方法執行的記憶體分析

靜態方法只能訪問靜態變數,沒有什麼執行緒安全之說,只有靜態變數才有。

static 靜態方法

乙個不需要任何主叫物件的方法就是靜態方法。靜態方法需要關鍵字static來宣告於定義,他不需要主叫物件,因為它不屬於物件而是屬於類。靜態方法可以被子類繼承,也可以被重寫,但是不能實現多型性。多型性的實現重點在於動態繫結,每一次在呼叫相應方法的時候都是去動態查詢匹配,靜態方法是在類初次載入的時候就已經...

static靜態方法

static也可以修飾方法,使之成為靜態方法,我們通常用的入口函式,也就是main方法就是乙個靜態方法。注意事項 靜態方法可以直接呼叫靜態變數,不能呼叫非靜態成員變數。public class helloworld 2.可以通過建立類的物件來呼叫非靜態成員 public class hellowor...

static 靜態方法

靜態變數 原理就是共享資料段,只要沒有進行 寫入 操作就不會產生問題,但是資料通常都是用於讀和寫所以靜態變數要注意使用 什麼時候用靜態的方法 一般靜態物件適合物件無狀態的情況 或唯讀的狀態 而又頻繁使用的資料,比如連線字串,配置資訊等,而例項化適合物件有狀態的情況 變化的狀態 如 使用者類物件狀態經...