關於gc 那些事

編碼優化-減小無用的對象建立

老年代,新生代就很少說了。不懂的本身補課去。html

在新生代每進行一次垃圾收集後,就會給存活的對象「加1歲」,當年齡達到必定數量的時候就會進入老年代(默認是15)java

 

在java中,一個對象的生命週期爲 ,具體能夠看編譯原理這本書
spring

A:建立(1)爲對象分配存儲空間。服務器

(2)開始構造對象。網絡

(3)遞歸調用其超類的構造方法。併發

(4)進行對象實例初始化與變量初始化。mvc

(5)執行構造方法體。性能

B:使用。有別的方法會對象引用優化

C:銷燬。沒有對象引用時,則認爲是垃圾。編碼

 

 

看個簡單的例子吧

1:public User test(){

  User user=iuserService.findById("1");

  return user;

}

2:

public User test(){

  return  iuserService.findById("1");

}

1和2的區別大嗎?可能有人說,沒啥不同的呀,其實否則,我們作個計算吧,一我的訪問一下產生一個user對象,然而這個對象只使用了一次。使用完以後,就成垃圾了。假如一個user對象,佔用1KB(誇張的說法,這個的話,須要看具體的對象了。這裏只是假如。勿作實際數據) 。那好。咱們都知道像經常使用的springmvc 每個訪問都是一個線程(threadLocal),也就是說,一我的產生了1KB的垃圾,服務器內存就那麼大,內存就那麼多(硬性條件)。假如併發是20k(2萬)的話,垃圾就是1KB*20000 也就是大概20MB,在JVM垃圾回收器收集一個對象以前,通常要求程序調用適當的方法釋放資源,但在沒有明確釋放資源的狀況下,Java提供了缺省機制來終止該對象心釋放資源,這個方法就是finalize()。它的原型爲:protected void finalize() throws Throwable   在finalize()方法返回以後,對象消失,垃圾收集開始執行。原型中的throws Throwable表示它能夠拋出任何類型的異常。然而垃圾多了就會縮短觸發條件出現的時間,增長了了主GC的機會

能夠參考一下 https://www.cnblogs.com/sunzhenchao/p/6711275.html。

假如項目中有1000個這樣的代碼,就可想而知了,若是在for 循環中使用這樣的代碼,就直接給開除吧。

  小代碼,每每是決定性能好壞的關鍵 ,硬性條件能夠加,可是與其加網絡帶寬,內存, cpu 不如從隨手的的地方作好優化。

 

這兒有一篇很好的文章  能夠參考一下 https://blog.csdn.net/huangzhen0914/article/details/45172597

相關文章
相關標籤/搜索