Slide 1

Slide 1 text

Python Memory Management ӣળࢿ (ML Research Engineer, Pingpong)

Slide 2

Slide 2 text

Python Memory Management ޖट ੌ੉ ੌযզө?

Slide 3

Slide 3 text

Python Memory Management Name, Reference, Object 10 A name Reference Object

Slide 4

Slide 4 text

Python Memory Management ޖट ੌ੉ ੌযզө?

Slide 5

Slide 5 text

Python Memory Management Reference Count 10 A Reference Object B Reference Count: 2 ࢜۽਍ чਸ Memory ী Allocation ೞח Ѫ੉ ইצ ӝઓ Object ী Reference ୶о

Slide 6

Slide 6 text

Python Memory Management Delete Variable

Slide 7

Slide 7 text

Python Memory Management Reference Count 10 A Object B Reference Count: 1 (-1) पઁ A ੄ Object о Dealloc غח Ѫ੉ ইצ Reference ݅ ࢏ઁ

Slide 8

Slide 8 text

Python Memory Management if Reference Count == 0

Slide 9

Slide 9 text

Python Memory Management if Reference Count == 0 10 A Object B Reference Count: 0 (-1) -> deallocation

Slide 10

Slide 10 text

Python Memory Management п ё୓о ੗न੄ Reference Count ܳ ٜҊ ੓Ҋ, ೧׼ Count о 0੉ غݶ dealloc

Slide 11

Slide 11 text

Python Memory Management Ӓۢ Garbage Collection ੉ ೙ਃ হחѢ ইצоৈ?? ࢎप Python ীࢲח ਤ җ੿ਸ Reference Count based GC ۄҊ ࠗܰҊ ੓णפ׮.

Slide 12

Slide 12 text

Cyclic Reference GC ઁݾ ఫझ౟

Slide 13

Slide 13 text

Python Memory Management ޖट ੌ੉ ੌযզө?

Slide 14

Slide 14 text

[L] Python Memory Management Recursive Reference L Object Reference Count: 2 ੉۠ ࣽജ ଵઑ غয ੓ח ҃਋ Reference Count ܳ ӝ߈ਵ۽ ೠ Deallocation ੉ ࠛоמೞ׮

Slide 15

Slide 15 text

[L] Python Memory Management Cyclic Reference L Object Reference Count: 1 ੿׹: Name L ਸ ૑ਕب ࣽജଵઑ غয ੓ӝ ٸޙী Reference Count ח ੺؀ 0 ੉ غ૑ ঋח׮ => Memory Leak!

Slide 16

Slide 16 text

Python Memory Management GC for Cyclic Reference Python ীࢲ GCח Cyclic Reference ܳ dealloc ೞחؘ ౠചغয ੓णפ׮.

Slide 17

Slide 17 text

Python Memory Management GC for Cyclic Reference

Slide 18

Slide 18 text

Foo(0) Python Memory Management GC for Cyclic Reference A Object Next Foo(1) B Next Foo(0) Ref Count : 2 Foo(1) Ref Count : 2

Slide 19

Slide 19 text

Python Memory Management GC Reference Count Object Reference Count GC_Reference Count Reason Foo(0) 2 2 copy(refCnt) Foo(1) 2 2 copy(refCnt)

Slide 20

Slide 20 text

Python Memory Management Automated Garbage Collection Object Reference Count GC_Reference Count Reason Foo(0) 2 1 Foo(1).next.gcRefCnt -= 1 Foo(1) 2 1 Foo(0).next.gcRefCnt -= 1 Nothing Happened!

Slide 21

Slide 21 text

Python Memory Management GC for Cyclic Reference

Slide 22

Slide 22 text

Foo(0) Python Memory Management GC for Cyclic Reference A Next Foo(1) B Next Foo(0) Ref Count : 1 Foo(1) Ref Count : 1

Slide 23

Slide 23 text

Python Memory Management GC Reference Count Object Reference Count GC_Reference Count Reason Foo(1) 1 1 copy(ref_count) Foo(2) 1 1 copy(ref_count) Reference Count ч Deep Copy

Slide 24

Slide 24 text

Python Memory Management GC Reference Count Object Reference Count GC_Reference Count Reason Foo(0) 1 0 Foo(1).next.gcRefCnt -= 1 Foo(1) 1 0 Foo(0).next.gcRefCnt -= 1

Slide 25

Slide 25 text

Python Memory Management Cyclic Reference ী ؀ೠ GC ࢿҕ!! Object Reference Count GC_Reference Count Reason Foo(0) 1 0 Foo(1).next.gcRefCnt -= 1 Foo(1) 1 0 Foo(0).next.gcRefCnt -= 1 Dealloc Dealloc

Slide 26

Slide 26 text

GIL: Global Interpreter Lock Python Memory Management

Slide 27

Slide 27 text

Pythonਵ۽ ѐߊೞח ഥࢎٜ੄ ױҎ ݶ੽ ޙઁ > ౵੉ॆীࢲ GIL੉ ަөਃ? Python Memory Management

Slide 28

Slide 28 text

Python Memory Management

Slide 29

Slide 29 text

Python Memory Management ୨ 3ѐ੄ Reference Count о хࣗ غযঠ ೞחؘ, Ѿҗ੸ਵ۽ח 2ѐ݅ хࣗؽ -> Race Condition Ѿҗ੸ਵ۽ memory leak ਸ ߊࢤदఃѢա ߈؀۽ ই૒ ࢓ই੓যঠ ೡ objectܳ લৈߡܾ ࣻب ੓׮.

Slide 30

Slide 30 text

Python Memory Management ੉Ѧ ߑ૑ೞ۰ݶ ݽٚ Reference Count Operation ী Lock ਸ Ѧݶ ؽ ೞ૑݅ Python ਷ Ѣ੄ ݽٚ Operation ীࢲ Reference Count ܳ ೞӝ ٸޙী ੉ח ষ୒դ ࠺ബਯࢿਸ оઉ১

Slide 31

Slide 31 text

Python Memory Management Reference Counting ਸ ӝ߈ਵ۽ ೠ GC ܳ ࢎਊೞח ҃਋ Thread-Safe ೧ঠ ೣ Ӓ Ѿҗ GIL ߆ী ؀উ੉ হח Ѫ…. -> Ӓېࢲ Java ח Mark and Sweep ߑध੄ GC ܳ ࢎਊ೤פ׮ ੉Ѥ ׮ܲ ࠙੉..^^7

Slide 32

Slide 32 text

Python Memory Management

Slide 33

Slide 33 text

Python Memory Management ࢎप ݫݽܻ ҕрী ҙೠ ղਊب ੓חؘ.. - Pool, Block, Arena, Generation ١١… ੉۞׮р ೞܖઙੌ ೧ঠ ೧ࢲ ׮਺ ӝഥী..ƃƃ

Slide 34

Slide 34 text

Python Memory Management ࠗ۾: ৵ Python ਷ String Overhead о ੓חо? ౵੉ॆ਷ ‘ч’੉ۄח ѐ֛੉ হ਺ ݽٚ૑ Object - Reference Count - Type Info - Char Array (value) - Intern ച غয ੓ח૑ ৈࠗ - String Object ੄ Hash ч

Slide 35

Slide 35 text

хࢎ೤פ׮✌ ୶о ૕ޙ ژח ҾӘೠ ੼੉ ੓׮ݶ ঱ઁٚ ইې োۅ୊۽ োۅ ઱ࣁਃ! ӣળࢿ (ML Research Engineer, Pingpong) [email protected] Facebook. @codertimo Linked in. @codertimo Github. @codertimo