コンカレントgc

Download コンカレントGc

If you can't read please download the document

Upload: akachochin

Post on 24-Jun-2015

1.466 views

Category:

Technology


1 download

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.