Go Conference 2019 Autumn
©2019 Wantedly, Inc.Go GC algorithm 101Go Conference 2019 AutumnOct 28, 2019 - Takuma Shiotsu(@taxio_tech)
View Slide
©2019 Wantedly, Inc.ࣗݾհ‣ Wantedly. Inc. 20ଔఆऀ‣ ژܳણҡେֶେֶӃ M2- ιϑτΣΞֶݚڀࣨ5BLVNB4IJPUTV!UBYJP@UFDI
©2019 Wantedly, Inc.✋($Λগ͠Ͱ͍ͬͯΔਓ✋
©2019 Wantedly, Inc.✋ฉ͍ͨ͜ͱͳ͍ͱ͍͏ਓ✋
©2019 Wantedly, Inc.✋࣮ͨ͜͠ͱ͕͋Δਓ✋
©2019 Wantedly, Inc.ຊηογϣϯͷඪw ($ͱԿ͔ΛΔw ϓϩϑΝΠϧ݁ՌΛோΊ͍ͯΔͱ͖ʹͳΜͱͳ͘SVOUJNFͷ($ϑΣʔζΛײ͡औΕΔΑ͏ʹͳΔw 3FMFBTF/PUFͷ3VOUJNFͷ߲ΛϫΫϫΫ͠ͳ͕ΒோΊΔ͖͔͚ͬΛ࣋ͭ
©2019 Wantedly, Inc.ँࣙw ($ʹؔ͢Δ·ͱ·ͬͨใຊʹগͳ͍‣ 3JDIBSE+POFT FUD ʮΨϕʔδίϨΫγϣϯࣗಈϝϞϦཧΛߏ͢Δཧͱ࣮ʯ‣ தଜ༸ FUD ʮΨϕʔδίϨΫγϣϯͷΞϧΰϦζϜͱ࣮ʯw ॻ੶ϒϩάΛެ։͍ͯͩͬͯ͘͠͞Δํʑɼͦͯ͠ԿΑΓ(PͷDPOUSJCVUPSͷํʑʹਂ͘ײँ͠·͢
©2019 Wantedly, Inc."HFOEBw ͢͜ͱ‣ ($ͷجૅతͳཧ‣ (PͰ࠾༻͞Ε͍ͯΔ($ΞϧΰϦζϜͷભҠͱ༰w ͞ͳ͍͜ͱ‣ (P͕࠾༻͍ͯ͠ͳ͍ଞͷ($ΞϧΰϦζϜ‣ ώʔϓߏɼ"MMPDBUJPO&TDBQFղੳͷ
©2019 Wantedly, Inc."HFOEBw ࠓͷηογϣϯͷྲྀΕ‣ ($ͷجૅͷઆ໌‣ (Pͱ.BSL4XFFQ($‣ (Pͱ$PODVSSFOU.BSL4XFFQ($w ཧ࣮ཧ࣮ͷॱͰઆ໌͍͖ͯ͠·͢
©2019 Wantedly, Inc.*OUSPEVDUJPO
©2019 Wantedly, Inc.($ͱʁw (BSCBHF$PMMFDUJPOw ώʔϓྖҬʹ֬อ͞Εͨɼ͏ΘΕͳ͍Ͱ͋Ζ͏ϝϞϦΛղ์͢Δw (PͰ3VOUJNFʹࡌ͞Ε͍ͯΔ
©2019 Wantedly, Inc.(PͰw ҰఆͷλΠϛϯάͰ3VOUJNF͕($Λىಈw runtime.GC()ͰىಈՄೳw ($ʹӨڹΛ༩͑Δڥม‣ GOGCɼGODEBUGʹ৭ʑ‣ IUUQTRJJUBDPNNBUUOJUFNTFDGG
©2019 Wantedly, Inc.($ͷجૅ༻ޠ
©2019 Wantedly, Inc.($ͷجૅ༻ޠw ΦϒδΣΫτ‣ ώʔϓྖҬ͔Β֬อ͢Δσʔλߏͷ୯Ґ‣ ϔομΦϒδΣΫτͷϝλใ‣ ϑΟʔϧυଞͷΦϒδΣΫτͷࢀরw ϛϡʔςʔλ‣ ΦϒδΣΫτͷੜ "MMPDBUJPOߋ৽Λߦ͏)FBEFS 'JFMET
©2019 Wantedly, Inc.($ͷجૅ༻ޠw 3PPU‣ ΦϒδΣΫτͷࢀরؔΛ͏ͨΊͷ࢝‣ TUBDLTUBUJDྖҬʹอ࣋͞ΕΔมͳͲ‣ 3PPUʹଘࡏ͢ΔΦϒδΣΫτΛ3PPUΦϒδΣΫτͱݴ͏w ࢮΜͰ͍ΔΦϒδΣΫτ‣ 3PPU͔ΒḷΕͳ͍ΦϒδΣΫτ͏ΘΕͳ͍ͣ ͜ΕΛճऩ͍ͨ͠%FBE3PPU
©2019 Wantedly, Inc.ͭ·Γw ($ΞϧΰϦζϜͱ͍͏ͷɼ‣ ࢮΜͰ͍Δੜ͖͍ͯΔΦϒδΣΫτΛͲ͏ݟ͚ͯɼͲ͏ղ์͍ͯ͘͠ͷ͔‣ ಈ͖ଓ͚ΔϛϡʔςʔλͱͲ͏͍͏࿈ܞΛऔΔͷ͔w ධՁ࣠‣ -BUFODZϛϡʔςʔλͷ ࠷େఀࢭ࣌ؒ‣ 5ISPVHIQVU୯Ґ࣌ؒ͋ͨΓͷώʔϓαΠζॲཧೳྗ‣ ଞʹώʔϓྖҬͷঢ়ଶʹ͍͔ؔͯͭ͘͠
©2019 Wantedly, Inc.۩ମతͳ($ΞϧΰϦζϜ
©2019 Wantedly, Inc..BSL4XFFQ($w ʹൃද͞Εͨ࠷ॳͷ($ΞϧΰϦζϜ‣ +PIO.D$BSUIZ 3FDVSTJWFGVODUJPOTPGTZNCPMJDFYQSFTTJPOTBOEUIFJSDPNQVUBUJPOCZNBDIJOF $PNNVOJDBUJPOPGUIF"$. "QSw ͭͷϑΣʔζ͔ΒΔ‣ ੜ͖͍ͯΔΦϒδΣΫτΛ୳͢.BSLϑΣʔζ‣ ࢮΜͰ͍ΔΦϒδΣΫτΛճऩ ղ์͢Δ4XFFQϑΣʔζw ($͕ىಈ͔ͯ͠Βऴྃ͢Δ·Ͱɼϛϡʔςʔλಈ࡞͠ͳ͍‣ 458 4UPQ5IF8PSME‣ ͜Ε͕MBUFODZͷओͳཁҼ
©2019 Wantedly, Inc..BSLϑΣʔζw ੜ͖͍ͯΔΦϒδΣΫτΛݟ͚ͭΔϑΣʔζw 3PPU͔Β୳ࡧ͍͖ͯ͠ɼݟ͚ͭͨΦϒδΣΫτͷϔομʹ.BSLΛ͚͍ͯ͘✔ ✔✔Root
©2019 Wantedly, Inc.4XFFQϑΣʔζw ࢮΜͰ͍ΔΦϒδΣΫτΛճऩ͢ΔϑΣʔζw ώʔϓྖҬΛ͔Β୳ࡧw .BSLͷ͍͍ͯͳ͍ΦϒδΣΫτΛճऩ‣ ࣍ͷ"MMPDBUJPOʹ͏ͨΊͷ४උ‣ ྫ͑GSFFͳPCKFDUΛཧ͓ͯ͘͠ϦετʹՃ✔ ✔ ✔Heap
©2019 Wantedly, Inc..BSL4XFFQ($w ϝϦοτ‣ ୯७Ͱൺֱత࣮͕؆୯w σϝϦοτ‣ ϝϞϦͷஅยԽ ϑϥάϝϯςʔγϣϯ‣ ͳ"MMPDBUJPO‣ 458ͷӨڹͰMBUFODZ͕େ͖͍
©2019 Wantedly, Inc.(Pͱ.BSL4XFFQ($w (P·Ͱओʹ͜ͷΞϧΰϦζϜw લճͷ($ͰNBSLͨ͠ੜଘΦϒδΣΫτͷ૯αΠζGOGCͷϝϞϦ͕৽͘͠"MMPDBUF͞Εͨͱ͖ʹىಈ‣ NBSLࡁΈ૯αΠζͷॳظ.#‣ GOGC=offͷ߹($ىಈ͠ͳ͍w ͪΖΜ͜Ε͚ͩͩͱ͍ͷͰɼ͍͕ͭ͘Γࠐ·Ε͍ͯΔ‣ #JUNBQNBSLJOH 1BSBMMFMJNQM 5$.BMMPD FUD
©2019 Wantedly, Inc.#JUNBQNBSLJOHw ΦϒδΣΫτͷϔομʹ.BSLΛ͚ΔͷͰͳ͘ɼผͷྖҬʹ·ͱΊ͓ͯ͘‣ 4XFFQ࣌ͷ͕ࠪ͘ͳΔ‣ .BSLϑϥάΛ͢ͷָ͕‣ $PQZPO8SJUFͱͷ૬ੑ͕͍͍
©2019 Wantedly, Inc.͔͠͠458ͷӨڹͰMBUFODZ͕େ͖͍
©2019 Wantedly, Inc.ͦͦͳͥ458͕ඞཁʁw ($தʹϛϡʔςʔλ͕ΦϒδΣΫτͷࢀরߏΛม͑ͯ͠·͏ͱɼ߹ੑΛอূͰ͖ͳ͍ྫ͑...
©2019 Wantedly, Inc.$PODVSSFOU.BSL4XFFQ($
©2019 Wantedly, Inc.$PODVSSFOU.BSL4XFFQ($w ϛϡʔςʔλͱ($Λฒߦʹಈ࡞ͤ͞Δw ຬ͖ͨ͢ਖ਼ੑ‣ গͳ͘ͱ3PPU͔Β౸ୡՄೳͳશͯͷPCKFDU͕ࣦΘΕͳ͍Α͏ʹ͢Δ‣ ࠷ऴతʹ($Λྃ͢Δw Ͳ͏ͬͯ͜ΕΒΛຬͨ͠ͳ͕Βฒߦ࣮ߦ͢Δͷ͔ʁ‣ ৭NBSLJOH‣ 8SJUFCBSSJFS
©2019 Wantedly, Inc.৭NBSLJOHw PCKFDUʹͭͷঢ়ଶΛఆٛ ศ্ٓɼ৭Ͱදݱ‣ നະ୳ࡧ NBSLແ͠‣ փ୳ࡧத NBSLࡁΈϦετʹೖΕ͓ͯ͘‣ ࠇ୳ࡧࡁΈ NBSLࡁΈϦετʹແ͍w Ϧετ͔ΒΦϒδΣΫτͷࢀরΛऔΓग़͠ɼͦͷGJFMEΛ୳ࡧ͍ͯ͘͠‣ (PͰRVFVFͱ࣮ͯ͠͞Ε͍ͯΔRoot
©2019 Wantedly, Inc.8SJUFCBSSJFSw ΦϒδΣΫτ͕໎ࢠʹͳΔ݅‣ ϛϡʔςʔλ͕നΦϒδΣΫτͷϙΠϯλΛࠇΦϒδΣΫτʹॻ͖ࠐΉશͯͷփ৭ΦϒδΣΫτ͔ΒͷɼͦͷനΦϒδΣΫτͷܦ࿏͕ଘࡏ͠ͳ͍w ͜ͷ͕݅ୡ͞Εͳ͍Α͏ʹϛϡʔςʔλͷΦϒδΣΫτૢ࡞ʹҰఆͷॲཧΛڬΉ‣ ৭ʑͳख๏͕͋Δ‣ (P͕࠾༻͍ͯ͠Δख๏ޙͰղઆ
©2019 Wantedly, Inc.$PODVSSFOU.BSL4XFFQ($w େɼҎԼͷϑΣʔζ͔ΒΔ‣ .BSLTFUVQ 458 3PPUΦϒδΣΫτΛશͯփ৭ʹృΔ SVOUJNFͷ($ʹඞཁͳ͋Ε͜ΕͷॳظԽ‣ $PODVSSFOUNBSL‣ .BSLUFSNJOBUJPO 458 ඞཁͳ߹3PPUΛ࠶ࠪ‣ $PODVSSFOUTXFFQ‣ 4XFFQUFSNJOBUJPO 458
©2019 Wantedly, Inc.$PODVSSFOU.BSL4XFFQ($w ϝϦοτ‣ 458ݮʹΑͬͯMBUFODZ͕ݮΔw σϝϦοτ‣ 8SJUFCBSSJFSʹΑͬͯεϧʔϓοτ͕Լ͕Δ
©2019 Wantedly, Inc.(PͰͷ࣮
©2019 Wantedly, Inc.(Pͷ$PODVSSFOU($࣮ͷྺ࢙w "VH (P(BSCBHF$PMMFDUJPO ($1MBOBOE3PBENBQ‣ IUUQTEPDTHPPHMFDPNEPDVNFOUE:*TO/3$/.Y/;D:9;-PWS)WW-I,@I,/XP50w (P‣ $PODVSSFOU4XFFQw (P‣ $PODVSSFOU.BSL 8SJUFCBSSJFS‣ $PODVSSFOU($w (P‣ 8SJUFCBSSJFSվྑ Ͱվྑྃ 1SPQPTBMFMJNJOBUFSFTDBO
©2019 Wantedly, Inc.$PODVSSFOU($ಋೖ݁Ռw MBUFODZ͕େ෯ʹݮͬͨ'SPN3JDL)VETPO IUUQTUBMLTHPMBOHPSHHPHDQEG Q (PQIFS$PO%FOWFS +VMZ
©2019 Wantedly, Inc.(Pͷ8SJUFCBSSJFSw "MMPDBUJPO࣌‣ ৽֬͘͠อ͞ΕͨΦϒδΣΫτΛͪʹࠇʹృΔRoot৽ΦϒδΣΫτ
©2019 Wantedly, Inc.(Pͷ8SJUFCBSSJFSw ΦϒδΣΫτͷࢀরؔΛॻ͖͑ͨͱ͖‣ ࢀর͞Ε͍ͯͨ͞Ε͍ͯΔΦϒδΣΫτͷ྆ํΛփ৭ʹృΔ‣ ͢ͰʹNBSL͞Ε͍ͯΔ փPSࠇ߹Կ͠ͳ͍Ͳ͔͔͜Βͷࢀর
©2019 Wantedly, Inc.(Pͷ8SJUFCBSSJFSw ($։࢝࣌ʹࢮΜͰ͍ΔΦϒδΣΫτΛճऩ͢Δ‣ ($ऴྃ࣌ʹࢮΜͰ͍ΔΦϒδΣΫτ͕ଘࡏ͠ͳ͍อূແ͍‣ %JKLTUSBTUZMFͱ:VBTBTUZMFͷϋΠϒϦουw SFGHJUIVCDPNHPMBOHHPCMPCFBTSDSVOUJNFNCBSSJFSHP
©2019 Wantedly, Inc.(Pͷ$PODVSSFOU($w ϑΣʔζ 4XFFQUFSNJOBUJPO .BSLTFUVQ .BSL .BSLUFSNJOBUJPO 4XFFQw SFGHJUIVCDPNHPMBOHHPCMPCFBTSDSVOUJNFNHDHP
©2019 Wantedly, Inc.4XFFQUFSNJOBUJPOw લճͷ4XFFQ͕ऴΘ͍ͬͯͳ͍߹ɼ458Λͨ͠͏͑Ͱ4XFFQϑΣʔζΛऴΘΒͤΔ
©2019 Wantedly, Inc..BSLTFUVQw 458w ॳظԽ‣ gcphase_GCoff_GCmark‣ 8SJUFCBSSJFS༗ޮԽ‣ "TTJTU༗ޮԽw 3PPUΦϒδΣΫτΛશͯփ৭ʹృΔ
©2019 Wantedly, Inc..BSLw ($༻ͷHPSPVUJOF͕NBSLJOH͍ͯ͘͠w .BSLJOHΑΓ"MMPDBUJPOͷ͕ૣ͍߹ɼ"TTJTU༻ͷHPSPVUJOF͕ىಈ͢Δ
©2019 Wantedly, Inc..BSLUFSNJOBUJPOw 458w NBSLϑΣʔζͷޙॲཧ‣ gcphase_GCmark_GCmarktermination‣ "TTJTUͳͲͷແޮԽ‣ ࣍ͷ($ىಈ༻ͷώʔϓαΠζΛࢉग़
©2019 Wantedly, Inc.4XFFQw લॲཧ‣ gcphase_GCmarktermination_GCoff‣ 8SJUFCBSSJFSΛແޮԽw (P5$.BMMPDΛϕʔεͱͨ͠"MMPDBUJPOػߏ‣ ίϨΫλ͕·ͩݟ͍ͯͳ͍ྖҬʹΦϒδΣΫτΛ֬อ͠ͳ͍Α͏ʹɼ"MMPDBUJPO͢ΔલʹͦͷαΠζͷQBHFͷTXFFQॲཧΛਐΊ͓ͯ͘ɾɾɾ͜͜·ͰͷྖҬͳΒ നΦϒδΣΫτΛ֬อͯ͠େৎHeap(Page)
©2019 Wantedly, Inc.Ͱͦͷઌʁ
©2019 Wantedly, Inc.ະདྷͷ(P($w ($ΞϧΰϦζϜɼύϥμΠϜଞʹ·ͩ·ͩ͋Δw ੈผ($Λಋೖ͍ͨ͠ͱ͍͏͋Δ‣ 3JDL IUUQTCMPHHPMBOHPSHJTNNLFZOPUF *4..‣ ϨΠςϯγԼ͕Δ͕8SJUFCBSSJFSʹΑͬͯɼεϧʔϓοτ͕Լ͕ΔՄೳੑ͕͋Δw ۩ମతͳٞ·ͩݟͨΒͳ͍ ݟ͚ͭͯͳ͍͕ɼ(PͳͲͰͲ͏มΘָ͍͔͕ͬͯ͘͠Έ
©2019 Wantedly, Inc.·ͱΊw $PODVSSFOU.BSL4XFFQ($Λ࠾༻͍ͯ͠Δ‣ ($ىಈத($༻ͷHPSPVUJOF͕࡞ಈ͍ͯ͠Δw ($ͷىಈλΠϛϯάڥมGOGCͰௐՄೳw ($͠ଓ͚͍ͯΔ‣ 3FMFBTFOPUF1SPQPTBMΛಡΉͷָ͕͠ΈͰ͢Ͷ
©2019 Wantedly, Inc.͋Γ͕ͱ͏͍͟͝·ͨ͠