dalvikのgcをのぞいてみた
DESCRIPTION
dalvikでGCをしている箇所のソースを読んだので、そのまとめ。TRANSCRIPT
- 1.
- dalvik GC @akachochin
2.
- @akachochin
3. MFPnetbsdOS 4. 5. 6. 7. GC
- ()
8. Web Page2.3GC 9. OS 10. GCGC 11. 1 - GC
12. 13. GC 14. 2 - GC
- GC(Ex.malloc())(free())
15. free()free()free() 16. 17. Dalvik
- DalvikAndoroidGC
18. 19. (Copy GC) 20. 21. 1 --
22. ( ) 23. 1 --
- ()
24. 2 -
25. Java gDvm 26. GC?
27. GC 28. grep -ri concurrent * 29. 30. vm/alloc/HeapSource.c:dvmCollectGarbageInternal(false, GC_CONCURRENT); 31. GC?
- static void *gcDaemonThread()
32. 33. dvmCollectGarbageInternal() 34.
- dvmCollectGarbageInternal
- ()
35. () 36. vm/alloc/Heap.hGcReason GC_CONCURRENT 37. GC GC_CONCURRENT 38.
- dvmCollectGarbageInternal
- GC_CONCURRENT
39. 1.GC 40. 2.GC VM ( ) (dvmResumeAllThreads(SUSPEND_FOR_GC);) 41. -> GC VM GC 42.
- dvmCollectGarbageInternal
- 13 2 VM
43. GC 44. GC GC 45.
- dvmCollectGarbageInternal (dvmMalloc())
46. GC 47. GC 48. dvmMalloc()
- dvmMalloc()
49. VMJavanewVMdvmAllocObject()dvmMalloc() 50. dvmMalloc()
- dvmMalloc() -> tryMalloc() ->dvmHeapSourceAlloc()
51. 52. mspace_calloc() 53. countAllocation() ->dvmHeapBitmapSetObjectBit() 54. mspace_calloc() 55. mspace_calloc() 56. dvmHeapBitmapSetObjectBit()
- liveBits
57. GCVM 58. GC GcHeap HeapSource MarkContext GcMarkContext GC HeapSource liveBits markBits liveBits MarkContext bitmap stack finger 2 59. bitmap (liveBits,MarkBits) 8byte 8byte liveBits MarkBits 8byte 60. dvmHeapBitmapSetObjectBit()
- 8bytelivebit
61. 24byteliveBits 1 liveBits 1 62. dvmHeapBitmapSetObjectBit()
- Javanew()
63. bit(bit) 64. liveBits 65.
- dvmCollectGarbageInternal ( 1)
- dvmCollectGarbageInternalGC
66. 1.(suspend) 67. 2.root 68. 3.card(card) 69. 4.(resume) 70. 5. 71.
- dvmCollectGarbageInternal ( 2)
- 6.(suspend) 7. 8. 9. 10.(resume)
72.
- dvmCollectGarbageInternal ( )
73. 1.(1 4) 74. 2.(5-6) 75. 3.(7-8) 76. 4.(9) 77.
- dvmCollectGarbageInternal ( )
- dvmHeapMarkRootSet()
78. JavanewdvmGcScanRootClassLoader() 79. gDvm 80.
- dvmCollectGarbageInternal ( )
- markClassObject()dvmMarkObjectNonNull - markObjectNonNull setAndReturnMarkBit()markbitobjobjmarkbit(1)
1 MarkBits 1 81.
- dvmCollectGarbageInternal ( )
- dvmCollectGarbageInternal() dvmClearCardTable() CardTable 0
- 1. cardTable 128byte
82. 2. cardTable Darty 83.
- dvmCollectGarbageInternal ( )
- cardtable livebit
cardTable liveBits Darty livebit16( 128byte) CardTable 84.
- dvmCollectGarbageInternal ( )
- dvmHeapScanMarkedObjects()
85. 2 86. 1.dvmHeapBitmapScanWalk() 87. -> markBits()() 88. 2.processMarkStack() 89. -> () 90. () 91.
- dvmCollectGarbageInternal ( )
- dvmHeapBitmapScanWalk()
92. markBit 1 markBits LiveBit 1 93.
- dvmCollectGarbageInternal ( )
- Java
Java 94.
- dvmCollectGarbageInternal ( )
- (finger) markBits 1
1 markBits finger markBits 1 95.
- dvmCollectGarbageInternal ( )
- finger markbit 1 stack
markBits finger markBits 1 96.
- dvmCollectGarbageInternal ( )
- StackmarkBit
97. 1.stack 98. 2.1markBits 99. 3.2 100. 13stack 101.
- dvmCollectGarbageInternal ( )
stack 1 markBits 102.
- dvmCollectGarbageInternal ( )
- 3136
103. 104.
- dvmCollectGarbageInternal ( )
- dvmHeapReMarkRootSet()
105. 2728 106.
- dvmCollectGarbageInternal ( )
- dvmHeapReScanMarkedObjects()
107. 108. dvmHeapReScanMarkedObjects() 109.
- dvmCollectGarbageInternal ( )
- 2930cardTable
- 128bytecardTableDarty
A B C B B C 110.
- dvmCollectGarbageInternal ( )
cardTable markbits 111.
- dvmCollectGarbageInternal ( )
- markbit
112.
- dvmCollectGarbageInternal ( )
113. dvmHeapSweepUnmarkedObjects() 114. dvmHeapBitmapSweepWalk() 115.
- dvmCollectGarbageInternal ( )
markbits livebits 1 GC 1 116.
- dvmCollectGarbageInternal ( )
117. live & ~mark live ~mark & 0 0 0 0 1 0 1 0 0 1 1 1 118.
- dvmCollectGarbageInternal ( )
- 461(DECODE_BITS)
119. (FLUSH_POINTERBUFsweepBitmapCallback 120. 121.
- DalvikGCMark & Sweep
122. GC 123. 2Mark 124. sweep 125. 126.