2014-12-04 59 views
1

我是新來的android開發,我想了解如何Garbage Collection工作,但我需要一個人的第一手清楚的解釋。Android垃圾收集器苗圃充分

我的應用程序正在與服務器進行一些大型事務。當我從一個活動切換到另一個,我不斷地在我的控制檯中看到以下消息:

GC_MINOR: (Nursery full) pause 2.77ms, total 2.95ms, bridge 11.82ms promoted 128K major 2640K los 4441K 

,當然還有,在毫秒時間每次都是不同的,但它發生了很多!

我就可以了here閱讀並創造environment.txt文件在我的項目有以下幾行:

MONO_GC_PARAMS=nursery-size=1024m 
MONO_GC_PARAMS=soft-heap-limit=64m 

我只是在nursery-sizesoft-heap-limit測試不同的值,但它並沒有在幫助所有。

現在,當我從一個活動轉到另一個活動時,應用運行速度非常緩慢。
有人可以請詳細解釋,給我一些選擇?
謝謝。

+0

嘗試增加/伸縮幼兒園規模翻番現在。 – 2014-12-04 06:37:40

回答

2

垃圾收集工作在堆的不同部分

  1. 苗圃
  2. 終身

這是對不同的JVM(熱點,IBM等)不同 通常苗圃尺寸比終身下(託兒所< <有服務年齡) Ex。在2GB的堆空間中,Nusery可以在128-512之間變化,剩餘部分將變成Tenured。

託兒所部分將始終由JVM妥善管理。這部分大部分時間用於新對象創建,分配,因爲這部分GC操作(壓縮,GC採集)的尺寸較小,速度較快且調整良好。

當託兒所的物體長大或活着超過特定的時間限制(長壽命物體)時使用壽命部分。他們在Tenured中維護。這是更大的內存,因此GC操作速度較慢。

幼兒園暫停一般很小,當您持續面對時不應該有很大的影響,那就是問題的表現。調整幼兒園的大小時請記住,它不應該超過終身教職。大小與GC操作時間成正比。

你的情況,你應該看看,

  1. 現有幼兒園規模和對象分配模式。如果創建尺寸較大的對象然後嘗試增加2的倍數的苗圃。
  2. 嘗試用於GC操作的並行線程。這可以大大提高性能。
  3. 瞭解JVM的政策,即吞吐量政策,CMS政策(依賴於JVM)