メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
by
ああうえ
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 • XNUmacOSɺ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 ϝϞϦෆͱͷઓ͍ʙେྔσʔλΛѻ͏ΞϓϦͰͷ࣮ફྫʙʛ͋͋͏͑