Slide 1

Slide 1 text

ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙ ϝϞϦෆ଍ͱͷઓ͍  ͋͋͏͑ ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 2

Slide 2 text

• iOSΞϓϦΤϯδχΞ • झຯͰ͓ֆඳ͖ͳͲ • ࠷ۙɺ໺֎ϥΠϒͰMacͱ iPhone͕ήϦϥ߽ӍͰਫ຅ ͋͋͏͑  1BTUFMBʛQJYJW ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 3

Slide 3 text

• όΠφϦσʔλͷѻ͍΍ɺࣗ༝౓ͷߴ͍ೖྗ͕͋Δ • ྫ: ϖΠϯτπʔϧɺಈը੍࡞πʔϧɺϏδϡΞϥΠβɺήʔϜ…  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦ࢖༻ྔͷଟ͍ΞϓϦ

Slide 4

Slide 4 text

ྫ: Pastela  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ 📱 iPad޲͚ϖΠϯτπʔϧ ✅ ΧελϚΠζੑ • ϒϥγ • UI഑ஔ • γϣʔτΧοτ ✅ ϨΠϠʔ਺੍ݶͳ͠

Slide 5

Slide 5 text

ྫ: Pastela  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ 📱 iPad޲͚ϖΠϯτπʔϧ ✅ ΧελϚΠζੑ • ϒϥγ • UI഑ஔ • γϣʔτΧοτ ✅ ϨΠϠʔ਺੍ݶͳ͠ ↑ʂʁ

Slide 6

Slide 6 text

• ϝϞϦ্Ͱ͸ඇѹॖ • ୯७ͳܭࢉྫ • 2000×2000px × 32bit(RGBA) × 200ϨΠϠʔ • ≈ 3.2GB ※࣮ࡍʹ͸ϨΠϠʔ಺ͷඞཁͳՕॴ͚ͩ֬อ͢ΔͷͰɺ͜Μͳʹଟ͘͸ͳ͍ • ͜ΕҎ֎ʹ΋ϛοϓϚοϓ΍৭ʑͳΩϟογϡͳͲ͕ଘࡏ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϨΠϠʔͷ֬อϝϞϦʹ͍ͭͯ

Slide 7

Slide 7 text

iOSͰϝϞϦΛ࢖͍͗͢ΔͱͲ͏ͳΔ͔? • iPhone / iPadͷRAM: 2ʙ16GB • ͢΂ͯ࢖͑ΔΘ͚Ͱ͸ͳ͍ • γεςϜ͕ඞཁʹԠͯ͡ΞϓϦΛڧ੍ऴྃ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 8

Slide 8 text

iOSͰϝϞϦΛ࢖͍੾ΔͱͲ͏ͳΔ͔? • ։ൃऀ΁ͷӨڹ • Ϋϥογϡϩά͕૿͑ɺຊདྷͷόάௐ͕ࠪࠔ೉ʹ • ϢʔβʔମݧͷѱԽ • ΞϓϦͷ࠶ىಈ͕ඞཁ • ࡞ۀ಺༰͕ࣦΘΕΔ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 9

Slide 9 text

ରࡦͷྫ • ϝϞϦϦʔΫΛແ͘͢ • Ϣʔβʔσʔλ͕ࣦΘΕͳ͍Α͏ʹอଘ͢Δ • ϝϞϦෆ଍Ͱ͋Δ͜ͱΛϢʔβʔʹ఻͑Δ(ϝϞϦෆ଍Ξϥʔτ)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 10

Slide 10 text

ϝϞϦෆ଍Ξϥʔτͷෆࢥٞ • Ϋϥογϡ࣌ʹϝϞϦෆ଍Ξϥʔτ͕දࣔ͞Ε͍ͯͳ͍? • CrashlyticsͷΧελϜΩʔʹදࣔ͞Ε͍ͯΔ͔ه࿥͍ͯͨ͠ • ൒਺Ҏ্ͷϩάͰදࣔ͞Ε͍ͯͳ͍൑ఆ(Կނ…?)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 11

Slide 11 text

iOSͷϝϞϦʹ͍ͭͯ஌Δ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 12

Slide 12 text

JetsamΠϕϯτ • γεςϜͷϝϞϦ࢖༻ʹ໰୊͕͋Δ৔߹ʹΞϓϦʹૹΒΕͯ͘Δ • ૹΒΕͯ͘ΔͱΞϓϦ͕ڧ੍ऴྃ͞ΕΔ • iOSͷઃఆΞϓϦ͔ΒϩάΛऔಘՄೳ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 13

Slide 13 text

JetsamΠϕϯτΛ֬ೝ͢Δ • .ipsϑΝΠϧ(JSONܗࣜ) • largestProcessΛ֬ೝ͢Δ • ࣗ෼ͷΞϓϦͰ͋Ε͹ϝϞϦ࢖༻ʹ໰୊͕͋ΔՄೳੑ • reason: ऴྃͨ͠ཧ༝(per-process-limit, vm-pageshortage, …) • rpages: ֬อ͞Ε͍ͯͨϖʔδ਺ɻpageSizeΛֻ͚Δͱ࢖༻ྔʹ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 14

Slide 14 text

ϝϞϦϫʔχϯά(didReceiveMemoryWarning) • UIKit • didReceiveMemoryWarning • SwiftUI • didReceiveMemoryWarningNoti fi cation • AppDelegate • applicationDidReceiveMemoryWarning(_:)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 15

Slide 15 text

ϝϞϦϫʔχϯά(DispatchSource) • DispatchSourceMemoryPressure • normal / warning / critical • ෮چ࣌΋௨஌ͯ͘͠ΕΔ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ dispatchSource = DispatchSource.makeMemoryPressureSource(eventMask: .all) dispatchSource.setEventHandler { switch dispatchSource.data { case .normal: ... case .warning: ... case .critical: ... } } dispatchSource.activate() iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 16

Slide 16 text

ϝϞϦϫʔχϯάΛड͚औͬͨΒ • ΩϟογϡΛղ์ɾҰ࣌ఀࢭ • όοΫάϥ΢ϯυ࡞ۀΛ཈੍͢Δ • େن໛ͳϝϞϦׂΓ౰ͯத͸؇΍͔ʹׂΓ౰ͯΔΑ͏ઓུΛมߋ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 17

Slide 17 text

Memory Compression • iOS 7+ • iOSͰ͸Disk SwapͰ͸ͳ͘Memory CompressionΛ࠾༻ iPadOS 16.1͔Β͸Virtual Memory Swap͕༗ޮͳ୺຤΋͋Δ • ࠷ۙΞΫηεͷͳ͍DirtyͳϖʔδΛѹॖ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 18

Slide 18 text

Memory Compression  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ %JSUZ $MFBO iOS Memory Deep Dive - WWDC2018 $PNQSFTTFE iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 19

Slide 19 text

Memory Compression  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ %JDUPOBSZ /4%BUB iOS Memory Deep Dive - WWDC2018 iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 20

Slide 20 text

Memory Compression  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ %JDUJPOBSZ /4%BUB iOS Memory Deep Dive - WWDC2018 iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 21

Slide 21 text

Memory Compression  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ %JDUPOBSZ /4%BUB iOS Memory Deep Dive - WWDC2018 ࠶ΞΫηε👀 iOSͷϝϞϦʹ͍ͭͯ஌Δ

Slide 22

Slide 22 text

ϝϞϦϫʔχϯάͷਂ۷Γ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 23

Slide 23 text

ϝϞϦෆ଍Ξϥʔτ͕දࣔ͞Εͳ͍໰୊Λਪଌ • ϝϞϦϫʔχϯά͕ਖ਼͘͠ड͚औΕ͍ͯͳ͍? • ࠷ॳͷ࣮૷͸didReceiveMemoryWarningΛ࢖༻ • ݹ͍୺຤Ͱ͸ൃՐ͠΍͍͢ • ৽͠Ίͷ୺຤Ͱ͸ൃՐͤͣʹڧ੍ऴྃ·Ͱߦ͘͜ͱ΋? • DispatchSourceMemoryPressureͳΒݕ஌Ͱ͖Δ? • Apple Silicon൛iPadͳͲɺ৽͍͠୺຤ͩͱى͜Δ?  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 24

Slide 24 text

಺෦࣮૷Λ֬ೝʂ • Χʔωϧͷ࣮૷΍υΩϡϝϯτΛݟͯΈΔ • https://github.com/apple-oss-distributions/xnu • XNU͸macOSɺiOSɺiPadOSͳͲͷΧʔωϧ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 25

Slide 25 text

ϝϞϦϫʔχϯάΛड͚औΔ࣮૷͕ѱ͍ͷ͔? • didReceiveMemoryWarning → DispatchSourceMemoryPressure • ࡉ͔͍ΠϕϯτΛड͚औΔΑ͏ʹͨ͠ΒมΘΔͷ͔? • ݁࿦: ಺෦࣮૷͕ಉ͡ͳͨΊɺड͚औΔλΠϛϯά͸มΘΒͳ͍ • > Dispatch Sources • > UIKit further exposes handlers for App developers. See Responding to Low Memory Warnings. https://github.com/apple-oss-distributions/xnu/blob/rel/xnu-11417/doc/vm/memorystatus_notify.md • ͦ΋ͦ΋ɺυΩϡϝϯτʹ͸ϕετΤϑΥʔτͰൃՐ͢Δͱ͋Δ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 26

Slide 26 text

ͳͥϝϞϦϫʔχϯά͕ૹΒΕͯ͜ͳ͍͔? • ͳͥϝϞϦϫʔχϯάΑΓઌʹڧ੍ऴྃ͢Δ(Jetsam͕ݺ͹ΕΔ) ͜ͱ͕͋Δ? • → ൑ఆํ๏͕ҧ͏͔Β  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 27

Slide 27 text

Jetsamͷ൑ఆ • ͍͔ͭ͘ͷஈ֊΍৚݅Ͱͷ൑ఆ͕͋Δ • https://github.com/apple-oss-distributions/xnu/blob/rel/ xnu-11417/doc/vm/memorystatus_kills.md • 13छྨ΄Ͳ • MEMORY_PERPROCESSLIMIT • ϓϩηεͰར༻Ͱ͖ΔϝϞϦ্ݶ஋Λ࢖ͬͨ൑ఆ • ௒͑Δͱଈkill͞ΕΔ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 28

Slide 28 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • Pressure Thresholds • https://github.com/apple-oss-distributions/xnu/blob/rel/ xnu-11417/doc/vm/memorystatus_notify.md#pressure- thresholds • warningͱcritical͕͋Δ͕ɺwarningͷ൑ఆͷΈ঺հ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 29

Slide 29 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVAILABLE_NON_COMPRESSED_MEMORY • AVAILABLE_MEMORY • VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 30

Slide 30 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVAILABLE_NON_COMPRESSED_MEMORY • ͬ͘͟ΓγεςϜͰར༻த + ར༻ՄೳͳϝϞϦϖʔδ਺ • AVAILABLE_MEMORY • VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 31

Slide 31 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVAILABLE_NON_COMPRESSED_MEMORY • AVAILABLE_MEMORY • γεςϜͰར༻Մೳͳ૯ϝϞϦϖʔδ਺ • AVAILABLE_NON_COMPRESSED_MEMORY + compressed • compressed: γεςϜͰѹॖ͞Ε͍ͯΔϖʔδ਺(ѹॖޙ) • VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 32

Slide 32 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVAILABLE_NON_COMPRESSED_MEMORY • AVAILABLE_MEMORY • VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD • 0.5 * AVAILABLE_MEMORY ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 33

Slide 33 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ boolean_t VM_PRESSURE_NORMAL_TO_WARNING(void) { if (!VM_CONFIG_COMPRESSOR_IS_ACTIVE) { ... } else { return (AVAILABLE_NON_COMPRESSED_MEMORY < VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD) ? 1 : 0; } } vm_pageout.c ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 34

Slide 34 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ boolean_t VM_PRESSURE_NORMAL_TO_WARNING(void) { if (!VM_CONFIG_COMPRESSOR_IS_ACTIVE) { ... } else { return (AVAILABLE_NON_COMPRESSED_MEMORY < VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD) ? 1 : 0; } } AVAILABLE_MEMORY - compressed vm_pageout.c ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 35

Slide 35 text

ϝϞϦϫʔχϯάͷᮢ஋(warning)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ boolean_t VM_PRESSURE_NORMAL_TO_WARNING(void) { if (!VM_CONFIG_COMPRESSOR_IS_ACTIVE) { ... } else { return (AVAILABLE_NON_COMPRESSED_MEMORY < VM_PAGE_COMPRESSOR_COMPACT_THRESHOLD) ? 1 : 0; } } 0.5 * AVAILABLE_MEMORY vm_pageout.c ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 36

Slide 36 text

ϝϞϦϫʔχϯάͷ൑ఆ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVL_MEMORY - compressed < AVL_MEMORY * 0.5 ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 37

Slide 37 text

ϝϞϦϫʔχϯάͷ൑ఆ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • AVL_MEMORY - compressed < AVL_MEMORY * 0.5 • compressed > AVL_MEMORY * 0.5 • γεςϜͰར༻Մೳͳ૯ϝϞϦͷ50%ΑΓcompressed͕ଟ͍ͱ ൃՐ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 38

Slide 38 text

୺຤ͷRAMͱϝϞϦϫʔχϯά  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • compressed > AVL_MEMORY * 0.5 • RAM͕େ͖͍ͱAVL_MEMORYͷ஋΋େ͖͍ • ૬ରతʹWarning൑ఆ͞ΕͮΒ͍ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 39

Slide 39 text

compressedͱϝϞϦϫʔχϯά  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ • compressed > AVL_MEMORY * 0.5 • compressedͷ஋͕খ͍͞ͱ૬ରతʹWarning൑ఆ͞ΕͮΒ͍ ϝϞϦϫʔχϯάͷਂ۷Γ

Slide 40

Slide 40 text

 ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ θϩϑΟϧ ϥϯμϜϑΟϧ

Slide 41

Slide 41 text

ϖΠϯτπʔϧͷಛੑͱϝϞϦѹॖ • ϝϞϦ্ʹ͸࿈ଓͨ͠஋͕ଟ͍ • ۭന෦෼΍ɺಉ৭͕ଓ͖ɺѹॖ͠΍͍͢σʔλ • ϝϞϦѹॖ͕ޮ͍ͯɺϝϞϦϫʔχϯά͕ൃՐ͞ΕͮΒ͍ʂʂ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ಉ͡ϐΫηϧ͕࿈ଓ

Slide 42

Slide 42 text

os_proc_available_memory • iOS 13+ • ϓϩηεͰར༻Ͱ͖Δ࢒ΓͷϝϞϦྔΛऔಘ • σϑΥϧτͷঢ়ଶͰiPhone 16 ProͰ3GB΄Ͳ • 0ʹͳΔͱJetsamʹΑͬͯڧ੍ऴྃ • (γϛϡϨʔλʔͰ͸ৗʹ0Λฦ͢)  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 43

Slide 43 text

PastelaͷϝϞϦෆ଍൑ఆΛมߋ • os_proc_available_memory()ͷ஋͕Ұఆ਺ΛԼճͬͨΒϝϞϦෆ ଍ΞϥʔτΛग़͢Α͏ʹ • ϝϞϦѹॖ཰Λؾʹͤͣ൑ఆͰ͖ΔΑ͏ʹʂ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 44

Slide 44 text

Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 45

Slide 45 text

Extended Virtual Addressing Entitlement • iOS 14+ • ΞϓϦʹׂΓ౰ͯΒΕΔԾ૝ΞυϨεۭ͕ؒ޿͕Δ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ແޮ࣌ ༗ޮ࣌ iPhone 16 ProͰͷ஋ Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ

Slide 46

Slide 46 text

Increased Memory Limit • iOS 15+ • ϓϩηεͰར༻Ͱ͖ΔϝϞϦྔΛ૿΍͢͜ͱ͕Ͱ͖Δ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ ແޮ࣌ ༗ޮ࣌ iPhone 16 ProͰͷ஋ Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ

Slide 47

Slide 47 text

Extended Virtual AddressingΛ༗ޮʹ͢Δͱ? • ΞϓϦʹׂΓ౰ͯΒΕΔԾ૝ΞυϨεۭ͕ؒ޿͕Δ • Ͳͷ͘Β͍?  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ

Slide 48

Slide 48 text

Ծ૝ΞυϨεۭؒͷϨΠΞ΢τ(EVAແޮ࣌) • ώʔϓ΍mmap༻ͷྖҬ͸ݶΒΕ͍ͯΔ • εϖοΫʹΑΔ͕ɺେମ3ʙ9GB͘Β͍ • ௕࣌ؒ࢖͏ΞϓϦͩͱஅยԽʹΑͬͯbad_alloc͕ى͖΍͍͢  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ

Slide 49

Slide 49 text

Ծ૝ΞυϨεۭؒͷϨΠΞ΢τ(EVA༗ޮ࣌) • ώʔϓ΍mmap༻ͷྖҬ͕֨ஈʹ޿͘ • அยԽͷ໰୊͕ى͜ΓͮΒ͘ͳΔ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑ Ծ૝ΞυϨεۭؒͷෆ଍ʹରॲ͢Δ

Slide 50

Slide 50 text

 🎉

Slide 51

Slide 51 text

·ͱΊ • Χʔωϧͷ࣮૷ΛಡΜͩΒશ෦ॻ͍ͯ͋ͬͨ • ϝϞϦϫʔχϯάͱJetsamΠϕϯτͷ൑ఆํ๏͸ผ • ୺຤ͷRAMʹΑͬͯϝϞϦϫʔχϯάͷൃՐ͠΍͕͢͞มԽ • ϖΠϯτπʔϧͰ͸ϝϞϦѹॖ͕ى͜Γ΍͍͢σʔλΛѻͬͯ ͓ΓɺϝϞϦϫʔχϯά͕ൃՐͮ͠Β͍ • Extended Virtual AddressingΛ༗ޮʹ͢ΔͱஅยԽʹΑΔ໰୊͕ ى͜ΓͮΒ͘ͳΔ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 52

Slide 52 text

Tips: Firebase CrashlyticsͷRAMۭ͖༰ྔ • Tips: Firebase Crashlyticsͷʮσʔλ > RAMۭ͖༰ྔʯ͸γες Ϝͷ෺ཧϝϞϦͷۭ͖༰ྔ • ΞϓϦ಺Ͱ͸vm_statistics64ͷfree_count * page_sizeͰऔಘ • ීஈϝϞϦ࢖༻ྔͷগͳ͍ΞϓϦͰ͸ϝϞϦϦʔΫ͕ਪଌՄೳ • ଟ͘ͷϝϞϦΛ࢖͏ΞϓϦͰ͸͋·Γҙຯͷͳ͍஋ • RAMۭ͖༰ྔ͕গͳͯ͘΋εϫοϓ΍ѹॖͰղܾ͞ΕΔՄೳੑ ͕͋ΔͨΊ  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑

Slide 53

Slide 53 text

ࢀߟ • Responding to low-memory warnings - Apple Developer • apple-oss-distributions/xnu • iOS Memory Deep Dive - WWDC18 • Detect and diagnose memory issues - WWDC21 • Analyze heap memory - WWDC24  ϝϞϦෆ଍ͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑