Java學習筆記

一、GC分代假設絕大多數對象的生命週期都很短,存活時間短暫。所以GC算法首先關注的便是這些短命對象。對於負載不高的應用來講,也不會發生fullGC的現象。這點提醒咱們,應儘量使對象生命週期縮短。有些程序員會盡量地減小new對象的次數,嘗試減少堆的分配開銷,減小內存碎片,但短命對象的建立在JVM中比咱們想象的性能要好,並且對象建立的速率越高,那麼GC也會越快被觸發!所以,吝嗇new的使用是個不明智的選擇。程序員

 

二、Java容器的一個特色就是能夠動態擴展,因此一般咱們都不會去考慮初始大小的設置,不夠了反正會自動擴容唄。可是擴容不意味着沒有代價,甚至是很高的代價。對於不斷增加的結構來講,通過若干次擴容,會存在大量無用的老數組,而回收這些數組的壓力,全都會加在GC身上。容器的擴容並非等到容器滿了才擴容,而是有必定的比例。在Google Guava框架中咱們能夠經過傳入預估的大小,剩下的由Guava解決。算法

 

三、對於對象池,惟一合適的場景就是當池中的每一個對象的建立開銷很大時,緩存複用纔有意義。即便你真的須要實現一個對象池,也請使用成熟的開源框架,例如Apache Commons Pool。另外,使用JDK的ThreadPoolExecutor做爲線程池,不要重複造輪子。數組

相關文章
相關標籤/搜索