1. 程式人生 > >小記(重載,重寫,多態)(linux du和df)

小記(重載,重寫,多態)(linux du和df)

tro 不一致 繼承關系 類的方法 沒有 spa str ext span

1.一個方法名,參數不同,這叫方法重載。(Overload)
void foo(String str);
void foo(int number);


2.父類與子類有同樣的方法名和參數,這叫方法覆蓋。(Override)
class Parent {
void foo() {
System.out.println("Parent foo()");
}
}

class Child extends Parent {
void foo() {
System.out.println("Child foo()");
}

}


3.父類引用指向子類對象,調用方法時會調用子類的實現,而不是父類的實現,這叫多態


Parent instance = new Child();
instance.foo(); //==> Child foo()

多態的三個前提:
1.要有繼承關系
2.子類要重寫父類的方法
3.父類引用指向子類對象

我理解的多態與繼承體系有關,與方法覆蓋有關,與方法重載無關。

************************************du和df*******************************************

du(disk usage)是通過搜索文件來計算每個文件的大小然後累加,du能看到的文件只是一些當前存在的,沒有被刪除的。他計算的大小就是當前他認為存在的所有文件大小的累加和。


df(disk free)通過文件系統來快速獲取空間大小的信息,當我們刪除一個文件的時候,這個文件不是馬上就在文件系統當中消失了,而是暫時消失了,當所有程序都不用時,才會根據OS的規則釋放掉已經刪除的文件, df記錄的是通過文件系統獲取到的文件的大小,他比du強的地方就是能夠看到已經刪除的文件,而且計算大小的時候,把這一部分的空間也加上了,更精確了。當文件系統也確定刪除了該文件後,這時候du與df就一致了。


du和df不一致情況原因:
常見的df和du不一致情況就是文件刪除的問題。當一個文件被刪除後,在文件系統 目錄中已經不可見了,所以du就不會再統計它了。然而如果此時還有運行的進程持有這個已經被刪除了的文件的句柄,那麽這個文件就不會真正在磁盤中被刪除,分區超級塊中的信息也就不會更改。這樣df仍舊會統計這個被刪除了的文件。

實際上即使你/home什麽都沒有,df命令依然會顯示占用了一部分空間的,文件系統的元數據占了部分空間。

df和du統計的數據是不同的。
打個比方

,文件是需要放到文件櫃裏的,就算只有一個文件,也要占用一個文件櫃。文件櫃占用的空間比文件要大。
df就是統計使用了多少個文件櫃。
du則統計實際有多少個文件。
這樣下來,df算的就大,du就小。


簡單地說,df命令是根據該卷的inode使用情況進行統計的,而du則是累加所有文件的字節數。一個文件就算只有1字節,也要佔用一個inode。

小記(重載,重寫,多態)(linux du和df)