時間換空間
由於系統資源是有限的,爲了在有限的資源內,達成某些特定的性能目標,時間換空間或者空間換時間的方法。
時間換空間通常用於嵌入式設備,或者內存、硬盤空間不足的情況,通過使用犧牲CPU的方式,獲得原本需要更多內存或者硬盤空間才能完成的工作。
下面是一個非常簡單的時間換空間的算法,實現了a,b兩個變量值的交換。交換兩個變量的方法是使用一箇中間變量,而引入額外的變量,而引入額外的變量意味着要使用更多的空間。採用下面的方法,則可以免去中間變量,而達到變量交換的目的,其代價是引用更多的CPU運算。
public class Demo {
public static void main(String[] args) throws Exception {
int a=3;
int b=2;
b=a+b;
a=b-a;
b=b-a;
System.out.print(a+"----"+b);
}
}
結果:
2----3
性能優化的關鍵在於掌握各部分組件的性能平衡點,如果系統CPU資源有空閒,但是內存使用緊張,便可以使用用時間換空間的策略,達到整體的性能改良,反之,CPU資源緊張,內存資源有空閒,則可以使用空間換時間的策略,提升整體性能。
空間換時間
與時間換空間的方法相反,空間換時間則是嘗試使用更多的內存或者磁盤空間換取CPU資源或者網絡資源等,通過增加系統的內存消耗,來加快程序的運行速度。
這種方法的典型應用就是緩存,緩存是一塊額外的系統內存區,如果沒有緩存,程序依然可以正常工作,但是在一般情況下,緩存中總是保存那些來之不易的數據,重新取得這些數據會花費大量的資源和時間,而通過緩存這塊額外的內存,避免了頻繁的資源消耗,加快了程序的運行速度。
除了緩存外,一些算法中也可以使用這樣的技術。