[{"data":1,"prerenderedAt":1221},["ShallowReactive",2],{"docs-navigation:de":3,"content-page:docs:1e1DR6TgZreTJJujFkeE8_07-LnqazRRanv0_OOL-uU":197,"content-page-surround:docs:1e1DR6TgZreTJJujFkeE8_07-LnqazRRanv0_OOL-uU":1213,"i-lucide:file-json":1215,"i-lucide:clipboard":1219},[4,54,74],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Ableitungen",false,"1","de","content:de:1.dokumentation:1.anleitungen:.navigation.yml","lucide:route","section",[13,19,26,33,40,47],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"icon":17,"path":18},"Guild Wars auf dem Mac installieren","content:de:1.dokumentation:1.anleitungen:1.installation.md","1\u002F1","lucide:download","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Finstallation",{"title":20,"id":21,"canonicalKey":22,"locale":8,"draft":6,"navigation":23,"icon":24,"path":25},"Konten & Mobile-Verknüpfung","content:de:1.dokumentation:1.anleitungen:2.konten.md","1\u002F2",{"title":20},"lucide:key-round","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fkonten",{"title":27,"id":28,"canonicalKey":29,"locale":8,"draft":6,"navigation":30,"icon":31,"path":32},"Auf dem Mac spielen: Optionen","content:de:1.dokumentation:1.anleitungen:3.guild-wars-auf-dem-mac-spielen.md","1\u002F3",{"title":27},"lucide:scale","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fguild-wars-auf-dem-mac-spielen",{"title":34,"id":35,"canonicalKey":36,"locale":8,"draft":6,"navigation":37,"icon":38,"path":39},"Leistung","content:de:1.dokumentation:1.anleitungen:4.leistung.md","1\u002F4",{"title":34},"lucide:gauge","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fleistung",{"title":41,"id":42,"canonicalKey":43,"locale":8,"draft":6,"navigation":44,"icon":45,"path":46},"Templates","content:de:1.dokumentation:1.anleitungen:5.templates.md","1\u002F5",{"title":41},"lucide:bookmark","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ftemplates",{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Fehlerbehebung","content:de:1.dokumentation:1.anleitungen:6.fehlerbehebung.md","1\u002F6",{"title":48},"lucide:wrench","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ffehlerbehebung",{"title":55,"page":6,"canonicalKey":56,"locale":8,"id":57,"draft":6,"icon":58,"sidebar":59,"children":60},"Projekt","2","content:de:1.dokumentation:2.projekt:.navigation.yml","lucide:shield-check","group",[61,67],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":58,"path":66},"Sicherheit & Kontorisiko","content:de:1.dokumentation:2.projekt:1.sicherheit.md","2\u002F1",{"title":62},"\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fsicherheit",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"Über & Credits","content:de:1.dokumentation:2.projekt:2.ueber.md","2\u002F2",{"title":68},"lucide:users","\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fueber",{"title":75,"page":6,"canonicalKey":76,"locale":77,"id":78,"draft":6,"icon":79,"sidebar":11,"fallback":80,"children":81},"For ArenaNet","3","en","content:en:1.docs:3.upstream:.navigation.yml","lucide:send",true,[82,89,96,122,148,160,179],{"title":83,"id":84,"canonicalKey":85,"locale":77,"draft":6,"navigation":86,"icon":87,"fallback":80,"path":88},"Introduction","content:en:1.docs:3.upstream:1.introduction.md","3\u002F1",{"title":83},"lucide:book-open-check","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fintroduction",{"title":90,"id":91,"canonicalKey":92,"locale":77,"draft":6,"navigation":93,"icon":94,"fallback":80,"path":95},"Request summary","content:en:1.docs:3.upstream:2.request-summary.md","3\u002F2",{"title":90},"lucide:list-checks","\u002Fde\u002Fdokumentation\u002Fupstream\u002Frequest-summary",{"title":97,"page":6,"canonicalKey":98,"locale":77,"id":99,"draft":6,"icon":100,"sidebar":59,"fallback":80,"children":101},"File system","3\u002F3","content:en:1.docs:3.upstream:3.filesystem:.navigation.yml","lucide:folder-x",[102,108,115],{"title":103,"id":104,"canonicalKey":105,"locale":77,"draft":6,"navigation":106,"icon":100,"fallback":80,"path":107},"File routines (UR-01…04)","content:en:1.docs:3.upstream:3.filesystem:1.unimplemented-routines.md","3\u002F3\u002F1",{"title":103},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Funimplemented-routines",{"title":109,"id":110,"canonicalKey":111,"locale":77,"draft":6,"navigation":112,"icon":113,"fallback":80,"path":114},"RemoveExtension (UR-05)","content:en:1.docs:3.upstream:3.filesystem:2.path-remove-extension.md","3\u002F3\u002F2",{"title":109},"lucide:scissors","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",{"title":116,"id":117,"canonicalKey":118,"locale":77,"draft":6,"navigation":119,"icon":120,"fallback":80,"path":121},"File::Open mode (UR-06)","content:en:1.docs:3.upstream:3.filesystem:3.file-open-mode.md","3\u002F3\u002F3",{"title":116},"lucide:file-plus-2","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Ffile-open-mode",{"title":123,"page":6,"canonicalKey":124,"locale":77,"id":125,"draft":6,"icon":126,"sidebar":59,"fallback":80,"children":127},"Input","3\u002F4","content:en:1.docs:3.upstream:4.input:.navigation.yml","lucide:mouse-pointer-click",[128,134,141],{"title":129,"id":130,"canonicalKey":131,"locale":77,"draft":6,"navigation":132,"icon":126,"fallback":80,"path":133},"Double-click (UR-07)","content:en:1.docs:3.upstream:4.input:1.double-click-flag.md","3\u002F4\u002F1",{"title":129},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fdouble-click-flag",{"title":135,"id":136,"canonicalKey":137,"locale":77,"draft":6,"navigation":138,"icon":139,"fallback":80,"path":140},"Key labels (UR-08)","content:en:1.docs:3.upstream:4.input:2.key-labels.md","3\u002F4\u002F2",{"title":135},"lucide:keyboard","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fkey-labels",{"title":142,"id":143,"canonicalKey":144,"locale":77,"draft":6,"navigation":145,"icon":146,"fallback":80,"path":147},"Cursor re-test (UR-09)","content:en:1.docs:3.upstream:4.input:3.cursor-re-evaluation.md","3\u002F4\u002F3",{"title":142},"lucide:pointer","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fcursor-re-evaluation",{"title":149,"page":6,"canonicalKey":150,"locale":77,"id":151,"draft":6,"icon":152,"sidebar":59,"fallback":80,"children":153},"Runtime","3\u002F5","content:en:1.docs:3.upstream:5.runtime:.navigation.yml","lucide:cpu",[154],{"title":155,"id":156,"canonicalKey":157,"locale":77,"draft":6,"navigation":158,"icon":152,"fallback":80,"path":159},"Heap maximum (UR-10)","content:en:1.docs:3.upstream:5.runtime:1.heap-maximum.md","3\u002F5\u002F1",{"title":155},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fruntime\u002Fheap-maximum",{"title":161,"page":6,"canonicalKey":162,"locale":77,"id":163,"draft":6,"icon":164,"sidebar":59,"fallback":80,"children":165},"Interface proposals","3\u002F6","content:en:1.docs:3.upstream:6.proposals:.navigation.yml","lucide:plug",[166,173],{"title":167,"id":168,"canonicalKey":169,"locale":77,"draft":6,"navigation":170,"icon":171,"fallback":80,"path":172},"Build identity (UR-11)","content:en:1.docs:3.upstream:6.proposals:1.build-identification.md","3\u002F6\u002F1",{"title":167},"lucide:fingerprint","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fbuild-identification",{"title":174,"id":175,"canonicalKey":176,"locale":77,"draft":6,"navigation":177,"icon":164,"fallback":80,"path":178},"Host interface (UR-12)","content:en:1.docs:3.upstream:6.proposals:2.platform-host-interface.md","3\u002F6\u002F2",{"title":174},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",{"title":180,"page":6,"canonicalKey":181,"locale":77,"id":182,"draft":6,"icon":183,"sidebar":59,"fallback":80,"children":184},"Reference","3\u002F7","content:en:1.docs:3.upstream:7.reference:.navigation.yml","lucide:microscope",[185,191],{"title":186,"id":187,"canonicalKey":188,"locale":77,"draft":6,"navigation":189,"icon":52,"fallback":80,"path":190},"Our workarounds","content:en:1.docs:3.upstream:7.reference:1.our-workarounds.md","3\u002F7\u002F1",{"title":186},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Four-workarounds",{"title":192,"id":193,"canonicalKey":194,"locale":77,"draft":6,"navigation":195,"icon":183,"fallback":80,"path":196},"Verification method","content:en:1.docs:3.upstream:7.reference:2.verification-method.md","3\u002F7\u002F2",{"title":192},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Fverification-method",{"title":198,"ref":199,"description":200,"icon":152,"updated":201,"navigation":202,"body":203,"type":1195,"id":156,"canonicalKey":157,"draft":6,"partial":6,"locale":77,"collection":1196,"navigationFile":6,"file":1197,"route":1203,"resolution":1210},"UR-10: long sessions stop at the 2 GiB heap cap","docs\u002Fupstream\u002Fruntime\u002Fheap-maximum","Build 38797 has a fixed 2 GiB WebAssembly heap. We can prove the ceiling and the failed allocation, but cache retention, fragmentation, and live working set still require an ArenaNet heap profile.","2026-08-08",{"title":155},{"type":204,"children":205,"toc":1172},"root",[206,214,225,232,239,244,285,297,303,315,330,342,401,406,412,417,422,599,604,609,615,620,737,754,759,804,809,828,834,839,912,946,952,958,963,969,974,979,984,1039,1044,1056,1062,1112,1118,1123,1156,1161,1167],{"type":207,"tag":208,"props":209,"children":210},"element","p",{},[211],{"type":212,"value":213},"text","Some content-heavy sessions end when the WebAssembly heap reaches exactly\n2,147,483,648 bytes. That maximum is declared in both artifacts ArenaNet ships:\nthe WASM memory section and its generated JavaScript glue. The next allocation\nthat needs more capacity is refused and the client aborts.",{"type":207,"tag":208,"props":215,"children":216},{},[217,223],{"type":207,"tag":218,"props":219,"children":220},"strong",{},[221],{"type":212,"value":222},"What we are asking ArenaNet to do:",{"type":212,"value":224}," profile settled live ownership across a\nshort multi-zone route, correct the responsible lifecycle, cache budget, or\nallocation pattern, and raise the wasm32 maximum to 4 GiB minus one page as\nadditional headroom. The larger maximum must be built with the matching\nunsigned JavaScript pointer support; changing only the WASM declaration is not\nsafe.",{"type":207,"tag":226,"props":227,"children":229},"warning",{"title":228},"The ceiling is proven; the underlying leak is not",[230],{"type":212,"value":231},"The 2 GiB ceiling and the allocation refused at that ceiling are properties of\nArenaNet's build 38797. We cannot yet classify the preceding memory use as a\nleak, cache retention, fragmentation, or legitimate referenced working set.\nThe allocation that loses at the boundary does not necessarily own the memory\nallocated before it.",{"type":207,"tag":233,"props":234,"children":236},"h2",{"id":235},"what-the-client-says-when-it-stops",[237],{"type":212,"value":238},"What the client says when it stops",{"type":207,"tag":208,"props":240,"children":241},{},[242],{"type":212,"value":243},"One captured failure showed:",{"type":207,"tag":245,"props":246,"children":249},"pre",{"language":212,"class":247,"tabindex":248},"shiki shiki-themes light-plus dark-plus dark:dark-plus","0",[250],{"type":207,"tag":251,"props":252,"children":254},"code",{"class":253},"language-text",[255,266,268,276,277],{"type":207,"tag":256,"props":257,"children":260},"span",{"class":258,"style":259},"line","display: inline",[261],{"type":207,"tag":256,"props":262,"children":263},{},[264],{"type":212,"value":265},"WASM heap at crash: 2048 MiB of 2048 MiB",{"type":212,"value":267},"\n",{"type":207,"tag":256,"props":269,"children":270},{"class":258,"style":259},[271],{"type":207,"tag":256,"props":272,"children":273},{},[274],{"type":212,"value":275},"ASSERTION FAILED: Out of memory!",{"type":212,"value":267},{"type":207,"tag":256,"props":278,"children":279},{"class":258,"style":259},[280],{"type":207,"tag":256,"props":281,"children":282},{},[283],{"type":212,"value":284},"..\u002F..\u002F..\u002FEngine\u002FGr\u002FGles3\u002FGlTex.cpp:397",{"type":207,"tag":208,"props":286,"children":287},{},[288,290,295],{"type":212,"value":289},"This proves that the final failed request was in ArenaNet's GLES3 texture path.\nIt does ",{"type":207,"tag":218,"props":291,"children":292},{},[293],{"type":212,"value":294},"not",{"type":212,"value":296}," prove that textures retained the entire heap. At the limit,\nwhichever allocation asks for the next block raises its own assertion.",{"type":207,"tag":233,"props":298,"children":300},{"id":299},"the-cap-is-compiled-into-both-artifacts",[301],{"type":212,"value":302},"The cap is compiled into both artifacts",{"type":207,"tag":208,"props":304,"children":305},{},[306,308,313],{"type":212,"value":307},"Build 38797's ",{"type":207,"tag":251,"props":309,"children":310},{},[311],{"type":212,"value":312},"Gw.jspi.wasm",{"type":212,"value":314}," declares one memory:",{"type":207,"tag":316,"props":317,"children":318},"ul",{},[319,325],{"type":207,"tag":320,"props":321,"children":322},"li",{},[323],{"type":212,"value":324},"initial: 4,096 pages, or 256 MiB;",{"type":207,"tag":320,"props":326,"children":327},{},[328],{"type":212,"value":329},"maximum: 32,768 pages, or 2 GiB.",{"type":207,"tag":208,"props":331,"children":332},{},[333,335,340],{"type":212,"value":334},"The matching ",{"type":207,"tag":251,"props":336,"children":337},{},[338],{"type":212,"value":339},"Gw.jspi.js",{"type":212,"value":341}," contains:",{"type":207,"tag":245,"props":343,"children":345},{"language":344,"class":247,"tabindex":248},"js",[346],{"type":207,"tag":251,"props":347,"children":349},{"class":348},"language-js",[350,376,377,386,387],{"type":207,"tag":256,"props":351,"children":352},{"class":258,"style":259},[353,359,365,371],{"type":207,"tag":256,"props":354,"children":356},{"style":355},"color:#0000FF;--shiki-dark:#569CD6",[357],{"type":212,"value":358},"var",{"type":207,"tag":256,"props":360,"children":362},{"style":361},"color:#795E26;--shiki-dark:#DCDCAA",[363],{"type":212,"value":364}," getHeapMax",{"type":207,"tag":256,"props":366,"children":368},{"style":367},"color:#000000;--shiki-dark:#D4D4D4",[369],{"type":212,"value":370}," = () ",{"type":207,"tag":256,"props":372,"children":373},{"style":355},[374],{"type":212,"value":375},"=>",{"type":212,"value":267},{"type":207,"tag":256,"props":378,"children":379},{"class":258,"style":259},[380],{"type":207,"tag":256,"props":381,"children":383},{"style":382},"color:#008000;--shiki-dark:#6A9955",[384],{"type":212,"value":385},"  \u002F\u002F Stay one Wasm page short of 4GB: ...",{"type":212,"value":267},{"type":207,"tag":256,"props":388,"children":389},{"class":258,"style":259},[390,396],{"type":207,"tag":256,"props":391,"children":393},{"style":392},"color:#098658;--shiki-dark:#B5CEA8",[394],{"type":212,"value":395},"  2147483648",{"type":207,"tag":256,"props":397,"children":398},{"style":367},[399],{"type":212,"value":400},";",{"type":207,"tag":208,"props":402,"children":403},{},[404],{"type":212,"value":405},"The host does not impose a smaller ceiling. Growth succeeds until the declared\nmaximum is reached. wasm32 cannot provide more than a 4 GiB address space, so a\nlarger maximum buys headroom but cannot make unbounded growth safe.",{"type":207,"tag":233,"props":407,"children":409},{"id":408},"reports-and-measured-sessions",[410],{"type":212,"value":411},"Reports and measured sessions",{"type":207,"tag":208,"props":413,"children":414},{},[415],{"type":212,"value":416},"Reported failures include open-world sessions lasting several hours and\ntexture-dense instanced content reaching the same boundary in roughly half an\nhour. Players have also reported shorter failures in a Resplendent Makuun\nvanquish and Dunes of Despair Hard Mode.",{"type":207,"tag":208,"props":418,"children":419},{},[420],{"type":212,"value":421},"Our longest recorded non-crashing staircase reached 1,619 MiB after 136\nminutes:",{"type":207,"tag":423,"props":424,"children":425},"table",{},[426,453],{"type":207,"tag":427,"props":428,"children":429},"thead",{},[430],{"type":207,"tag":431,"props":432,"children":433},"tr",{},[434,440,445,449],{"type":207,"tag":435,"props":436,"children":437},"th",{},[438],{"type":212,"value":439},"Elapsed",{"type":207,"tag":435,"props":441,"children":442},{},[443],{"type":212,"value":444},"Heap after step",{"type":207,"tag":435,"props":446,"children":447},{},[448],{"type":212,"value":439},{"type":207,"tag":435,"props":450,"children":451},{},[452],{"type":212,"value":444},{"type":207,"tag":454,"props":455,"children":456},"tbody",{},[457,481,504,527,550,573],{"type":207,"tag":431,"props":458,"children":459},{},[460,466,471,476],{"type":207,"tag":461,"props":462,"children":463},"td",{},[464],{"type":212,"value":465},"0.1 m",{"type":207,"tag":461,"props":467,"children":468},{},[469],{"type":212,"value":470},"256 MiB",{"type":207,"tag":461,"props":472,"children":473},{},[474],{"type":212,"value":475},"84.8 m",{"type":207,"tag":461,"props":477,"children":478},{},[479],{"type":212,"value":480},"1,124 MiB",{"type":207,"tag":431,"props":482,"children":483},{},[484,489,494,499],{"type":207,"tag":461,"props":485,"children":486},{},[487],{"type":212,"value":488},"1.4 m",{"type":207,"tag":461,"props":490,"children":491},{},[492],{"type":212,"value":493},"442 MiB",{"type":207,"tag":461,"props":495,"children":496},{},[497],{"type":212,"value":498},"94.5 m",{"type":207,"tag":461,"props":500,"children":501},{},[502],{"type":212,"value":503},"1,220 MiB",{"type":207,"tag":431,"props":505,"children":506},{},[507,512,517,522],{"type":207,"tag":461,"props":508,"children":509},{},[510],{"type":212,"value":511},"13.1 m",{"type":207,"tag":461,"props":513,"children":514},{},[515],{"type":212,"value":516},"627 MiB",{"type":207,"tag":461,"props":518,"children":519},{},[520],{"type":212,"value":521},"97.7 m",{"type":207,"tag":461,"props":523,"children":524},{},[525],{"type":212,"value":526},"1,316 MiB",{"type":207,"tag":431,"props":528,"children":529},{},[530,535,540,545],{"type":207,"tag":461,"props":531,"children":532},{},[533],{"type":212,"value":534},"46.6 m",{"type":207,"tag":461,"props":536,"children":537},{},[538],{"type":212,"value":539},"724 MiB",{"type":207,"tag":461,"props":541,"children":542},{},[543],{"type":212,"value":544},"109.5 m",{"type":207,"tag":461,"props":546,"children":547},{},[548],{"type":212,"value":549},"1,427 MiB",{"type":207,"tag":431,"props":551,"children":552},{},[553,558,563,568],{"type":207,"tag":461,"props":554,"children":555},{},[556],{"type":212,"value":557},"67.5 m",{"type":207,"tag":461,"props":559,"children":560},{},[561],{"type":212,"value":562},"930 MiB",{"type":207,"tag":461,"props":564,"children":565},{},[566],{"type":212,"value":567},"127.2 m",{"type":207,"tag":461,"props":569,"children":570},{},[571],{"type":212,"value":572},"1,523 MiB",{"type":207,"tag":431,"props":574,"children":575},{},[576,581,586,591],{"type":207,"tag":461,"props":577,"children":578},{},[579],{"type":212,"value":580},"82.5 m",{"type":207,"tag":461,"props":582,"children":583},{},[584],{"type":212,"value":585},"1,027 MiB",{"type":207,"tag":461,"props":587,"children":588},{},[589],{"type":212,"value":590},"128.7 m",{"type":207,"tag":461,"props":592,"children":593},{},[594],{"type":207,"tag":218,"props":595,"children":596},{},[597],{"type":212,"value":598},"1,619 MiB",{"type":207,"tag":208,"props":600,"children":601},{},[602],{"type":212,"value":603},"That session did not converge before the player quit. Newer short sessions do\nsometimes converge: one multi-zone run reached 733 MiB and stayed there while\nthe host processed substantial additional image traffic. Both results are\nreal. The route, cache warmth, and allocator reuse affect whether a particular\nsession reproduces the growth.",{"type":207,"tag":208,"props":605,"children":606},{},[607],{"type":212,"value":608},"WASM memory capacity never shrinks within a process. A flat heap means current\nallocations fit into existing capacity; a rising heap means they did not. A\nrising capacity alone cannot distinguish retained live bytes from\nfragmentation.",{"type":207,"tag":233,"props":610,"children":612},{"id":611},"what-allocation-attribution-found",[613],{"type":212,"value":614},"What allocation attribution found",{"type":207,"tag":208,"props":616,"children":617},{},[618],{"type":212,"value":619},"Our first allocator experiment was too expensive to keep: it added about 47%\nsteady-state overhead. Its useful historical snapshots identified several\nlarge ArenaNet allocation owners rather than one texture-only explanation:",{"type":207,"tag":423,"props":621,"children":622},{},[623,644],{"type":207,"tag":427,"props":624,"children":625},{},[626],{"type":207,"tag":431,"props":627,"children":628},{},[629,634,639],{"type":207,"tag":435,"props":630,"children":631},{},[632],{"type":212,"value":633},"Exact build-38797 function",{"type":207,"tag":435,"props":635,"children":636},{},[637],{"type":212,"value":638},"Reverse-engineered owner",{"type":207,"tag":435,"props":640,"children":641},{},[642],{"type":212,"value":643},"Observed retained large bytes",{"type":207,"tag":454,"props":645,"children":646},{},[647,671,695,716],{"type":207,"tag":431,"props":648,"children":649},{},[650,658,666],{"type":207,"tag":461,"props":651,"children":652},{},[653],{"type":207,"tag":251,"props":654,"children":655},{},[656],{"type":212,"value":657},"2797",{"type":207,"tag":461,"props":659,"children":660},{},[661],{"type":207,"tag":251,"props":662,"children":663},{},[664],{"type":212,"value":665},"GlTex",{"type":207,"tag":461,"props":667,"children":668},{},[669],{"type":212,"value":670},"117–148 MiB",{"type":207,"tag":431,"props":672,"children":673},{},[674,682,690],{"type":207,"tag":461,"props":675,"children":676},{},[677],{"type":207,"tag":251,"props":678,"children":679},{},[680],{"type":212,"value":681},"1586",{"type":207,"tag":461,"props":683,"children":684},{},[685],{"type":207,"tag":251,"props":686,"children":687},{},[688],{"type":212,"value":689},"ImgMem",{"type":207,"tag":461,"props":691,"children":692},{},[693],{"type":212,"value":694},"46–96 MiB",{"type":207,"tag":431,"props":696,"children":697},{},[698,706,711],{"type":207,"tag":461,"props":699,"children":700},{},[701],{"type":207,"tag":251,"props":702,"children":703},{},[704],{"type":212,"value":705},"4491",{"type":207,"tag":461,"props":707,"children":708},{},[709],{"type":212,"value":710},"model loading",{"type":207,"tag":461,"props":712,"children":713},{},[714],{"type":212,"value":715},"29–129 MiB",{"type":207,"tag":431,"props":717,"children":718},{},[719,727,732],{"type":207,"tag":461,"props":720,"children":721},{},[722],{"type":207,"tag":251,"props":723,"children":724},{},[725],{"type":212,"value":726},"3421",{"type":207,"tag":461,"props":728,"children":729},{},[730],{"type":212,"value":731},"unresolved secondary owner",{"type":207,"tag":461,"props":733,"children":734},{},[735],{"type":212,"value":736},"24–49 MiB",{"type":207,"tag":208,"props":738,"children":739},{},[740,742,746,748,752],{"type":212,"value":741},"The replacement research probe wraps only exact lifecycle functions for\n",{"type":207,"tag":251,"props":743,"children":744},{},[745],{"type":212,"value":689},{"type":212,"value":747},", models, and ",{"type":207,"tag":251,"props":749,"children":750},{},[751],{"type":212,"value":665},{"type":212,"value":753},". It exports aggregates rather than pointers or\nper-allocation events.",{"type":207,"tag":208,"props":755,"children":756},{},[757],{"type":212,"value":758},"Static analysis found a complete reference-safe model lifecycle already in the\nclient:",{"type":207,"tag":760,"props":761,"children":762},"ol",{},[763,775,787,799],{"type":207,"tag":320,"props":764,"children":765},{},[766,768,773],{"type":212,"value":767},"release function ",{"type":207,"tag":251,"props":769,"children":770},{},[771],{"type":212,"value":772},"4629",{"type":212,"value":774}," moves zero-reference models to an unused list with a\none-second expiry;",{"type":207,"tag":320,"props":776,"children":777},{},[778,780,785],{"type":212,"value":779},"acquire function ",{"type":207,"tag":251,"props":781,"children":782},{},[783],{"type":212,"value":784},"4628",{"type":212,"value":786}," removes a reused model from that list;",{"type":207,"tag":320,"props":788,"children":789},{},[790,792,797],{"type":212,"value":791},"sweep function ",{"type":207,"tag":251,"props":793,"children":794},{},[795],{"type":212,"value":796},"4649",{"type":212,"value":798}," destroys expired unused entries through the normal\nvirtual destructor;",{"type":207,"tag":320,"props":800,"children":801},{},[802],{"type":212,"value":803},"the normal model update calls that sweep approximately every ten seconds.",{"type":207,"tag":208,"props":805,"children":806},{},[807],{"type":212,"value":808},"A corrected short capture observed 6,092 normal model evictions and only\n1.9 MiB in the zero-reference aggregate, but its bootstrap completeness flag\nwas false. That data cannot authorize an external trim. It does show that the\nnormal model sweep is active.",{"type":207,"tag":208,"props":810,"children":811},{},[812,814,819,821,826],{"type":212,"value":813},"We found no certified standalone unused check for the image or texture\ndestruction paths. Calling a destructor, raw ",{"type":207,"tag":251,"props":815,"children":816},{},[817],{"type":212,"value":818},"free",{"type":212,"value":820},", or ",{"type":207,"tag":251,"props":822,"children":823},{},[824],{"type":212,"value":825},"glDeleteTexture",{"type":212,"value":827}," from\nthe host would risk stale lookup entries and use-after-free defects.",{"type":207,"tag":233,"props":829,"children":831},{"id":830},"the-short-internal-reproduction-arenanet-can-run",[832],{"type":212,"value":833},"The short internal reproduction ArenaNet can run",{"type":207,"tag":208,"props":835,"children":836},{},[837],{"type":212,"value":838},"ArenaNet does not need to wait hours for the public abort. Source symbols and a\nheap profiler turn this into a short ownership test:",{"type":207,"tag":840,"props":841,"children":843},"steps",{"mode":842},"numbered",[844,851,856,862,867,873,901,907],{"type":207,"tag":845,"props":846,"children":848},"h3",{"id":847},"the-short-internal-reproduction-arenanet-can-run-record-a-settled-baseline",[849],{"type":212,"value":850},"Record a settled baseline",{"type":207,"tag":208,"props":852,"children":853},{},[854],{"type":212,"value":855},"Use build 38797 with allocation\u002Ffree stacks. Record live bytes, the largest\nfree block, free-bin distribution, and image\u002Fmodel\u002Ftexture ownership.",{"type":207,"tag":845,"props":857,"children":859},{"id":858},"the-short-internal-reproduction-arenanet-can-run-travel-through-ten-distinct-zones",[860],{"type":212,"value":861},"Travel through ten distinct zones",{"type":207,"tag":208,"props":863,"children":864},{},[865],{"type":212,"value":866},"Pause after transitions 3, 6, and 9 so unload work and the model sweep can\nfinish. Revisit three earlier zones, then remain idle for 30 seconds.",{"type":207,"tag":845,"props":868,"children":870},{"id":869},"the-short-internal-reproduction-arenanet-can-run-compare-capacity-with-live-ownership",[871],{"type":212,"value":872},"Compare capacity with live ownership",{"type":207,"tag":316,"props":874,"children":875},{},[876,881,886,891,896],{"type":207,"tag":320,"props":877,"children":878},{},[879],{"type":212,"value":880},"Capacity rises while live bytes return near baseline: fragmentation.",{"type":207,"tag":320,"props":882,"children":883},{},[884],{"type":212,"value":885},"Settled live bytes rise across unloads: retention or legitimate working set.",{"type":207,"tag":320,"props":887,"children":888},{},[889],{"type":212,"value":890},"Zero-reference bytes remain high: cache budget or sweep issue.",{"type":207,"tag":320,"props":892,"children":893},{},[894],{"type":212,"value":895},"Referenced bytes remain high: follow the retaining reference; do not destroy\nthe object externally.",{"type":207,"tag":320,"props":897,"children":898},{},[899],{"type":212,"value":900},"Both capacity and live bytes plateau: normal warm-up for that route.",{"type":207,"tag":845,"props":902,"children":904},{"id":903},"the-short-internal-reproduction-arenanet-can-run-repeat-with-a-warm-cache",[905],{"type":212,"value":906},"Repeat with a warm cache",{"type":207,"tag":208,"props":908,"children":909},{},[910],{"type":212,"value":911},"Use the same build, route, account, and settings. A controlled comparison must\nchange only one variable.",{"type":207,"tag":208,"props":913,"children":914},{},[915,917,921,923,927,929,933,935,939,940,944],{"type":212,"value":916},"The first source paths worth inspecting are ",{"type":207,"tag":251,"props":918,"children":919},{},[920],{"type":212,"value":689},{"type":212,"value":922}," allocation ",{"type":207,"tag":251,"props":924,"children":925},{},[926],{"type":212,"value":681},{"type":212,"value":928},", model\nload ",{"type":207,"tag":251,"props":930,"children":931},{},[932],{"type":212,"value":705},{"type":212,"value":934},", and ",{"type":207,"tag":251,"props":936,"children":937},{},[938],{"type":212,"value":665},{"type":212,"value":922},{"type":207,"tag":251,"props":941,"children":942},{},[943],{"type":212,"value":657},{"type":212,"value":945},", plus their existing cache budgets\nand normal release paths.",{"type":207,"tag":233,"props":947,"children":949},{"id":948},"our-interim-mitigation",[950],{"type":212,"value":951},"Our interim mitigation",{"type":207,"tag":845,"props":953,"children":955},{"id":954},"our-interim-mitigation-safe-reload-warning",[956],{"type":212,"value":957},"Safe reload warning",{"type":207,"tag":208,"props":959,"children":960},{},[961],{"type":212,"value":962},"GWonMac's production warning monitors the effective heap capacity while there\nis still room to return to a town or outpost, then lets the player choose when\nto reload. Reloading resets the WASM heap. It is recovery, not a memory fix.",{"type":207,"tag":845,"props":964,"children":966},{"id":965},"our-interim-mitigation-exact-build-4-gb-research-profile",[967],{"type":212,"value":968},"Exact-build 4 GB research profile",{"type":207,"tag":208,"props":970,"children":971},{},[972],{"type":212,"value":973},"We have also built an off-by-default research profile for build 38797. It\nchanges the WASM maximum to 65,535 pages—4 GiB minus one 64 KiB page—and\ntransforms the exact generated JavaScript to treat high wasm32 pointers as\nunsigned addresses.",{"type":207,"tag":208,"props":975,"children":976},{},[977],{"type":212,"value":978},"The pair is hash-gated and fails closed: an unknown JS or WASM artifact runs\nuntouched. Raising only the WASM maximum is explicitly refused.",{"type":207,"tag":208,"props":980,"children":981},{},[982],{"type":212,"value":983},"Qualification completed so far:",{"type":207,"tag":316,"props":985,"children":986},{},[987,992,997,1002,1027],{"type":207,"tag":320,"props":988,"children":989},{},[990],{"type":212,"value":991},"ArenaNet's real allocator grew to 3,025,928,192 bytes offline;",{"type":207,"tag":320,"props":993,"children":994},{},[995],{"type":212,"value":996},"it returned and reused allocations above 2 GiB;",{"type":207,"tag":320,"props":998,"children":999},{},[1000],{"type":212,"value":1001},"the live Electron client grew to 2,625 MiB;",{"type":207,"tag":320,"props":1003,"children":1004},{},[1005,1007,1012,1014,1019,1021,1026],{"type":212,"value":1006},"live ",{"type":207,"tag":251,"props":1008,"children":1009},{},[1010],{"type":212,"value":1011},"malloc",{"type":212,"value":1013}," returned raw signed pointer ",{"type":207,"tag":251,"props":1015,"children":1016},{},[1017],{"type":212,"value":1018},"-2078907408",{"type":212,"value":1020},", unsigned address\n",{"type":207,"tag":251,"props":1022,"children":1023},{},[1024],{"type":212,"value":1025},"2216059888",{"type":212,"value":400},{"type":207,"tag":320,"props":1028,"children":1029},{},[1030,1032,1037],{"type":212,"value":1031},"the transformed generated string glue wrote and read ",{"type":207,"tag":251,"props":1033,"children":1034},{},[1035],{"type":212,"value":1036},"GW4G",{"type":212,"value":1038}," through that\nhigh pointer without trapping.",{"type":207,"tag":208,"props":1040,"children":1041},{},[1042],{"type":212,"value":1043},"This proves the core approach across the former boundary. It does not prove\nevery rare WebGL or host callback path, and it does not bound the underlying\nmemory demand. The current profile remains a developer experiment. All five\nvariants the production chain can emit—including Enhancements disabled—are\nhash-pinned. It still needs packaged high-address gameplay coverage,\nsystem-memory testing, and an explicit user setting before an experimental\nplayer release.",{"type":207,"tag":208,"props":1045,"children":1046},{},[1047,1049,1054],{"type":212,"value":1048},"If released before an ArenaNet update, it will be labelled ",{"type":207,"tag":218,"props":1050,"children":1051},{},[1052],{"type":212,"value":1053},"Experimental 4 GB\nmemory mode",{"type":212,"value":1055},", disabled by default, restricted to exact certified builds, easy\nto turn off, and recommended only on Macs with at least 16 GB of RAM.",{"type":207,"tag":233,"props":1057,"children":1059},{"id":1058},"what-we-will-not-do",[1060],{"type":212,"value":1061},"What we will not do",{"type":207,"tag":316,"props":1063,"children":1064},{},[1065,1070,1075,1092,1097,1102,1107],{"type":207,"tag":320,"props":1066,"children":1067},{},[1068],{"type":212,"value":1069},"Change only the WASM maximum.",{"type":207,"tag":320,"props":1071,"children":1072},{},[1073],{"type":212,"value":1074},"Exceed wasm32's 4 GiB address space.",{"type":207,"tag":320,"props":1076,"children":1077},{},[1078,1080,1084,1086,1090],{"type":212,"value":1079},"Call raw ",{"type":207,"tag":251,"props":1081,"children":1082},{},[1083],{"type":212,"value":818},{"type":212,"value":1085},", direct destructors, or ",{"type":207,"tag":251,"props":1087,"children":1088},{},[1089],{"type":212,"value":825},{"type":212,"value":1091},".",{"type":207,"tag":320,"props":1093,"children":1094},{},[1095],{"type":212,"value":1096},"Guess a cache function or context pointer.",{"type":207,"tag":320,"props":1098,"children":1099},{},[1100],{"type":212,"value":1101},"Replace ArenaNet's allocator.",{"type":207,"tag":320,"props":1103,"children":1104},{},[1105],{"type":212,"value":1106},"Automatically reload a player during a mission.",{"type":207,"tag":320,"props":1108,"children":1109},{},[1110],{"type":212,"value":1111},"Present the 4 GB profile as a fix for unbounded retention.",{"type":207,"tag":233,"props":1113,"children":1115},{"id":1114},"acceptance-criteria",[1116],{"type":212,"value":1117},"Acceptance criteria",{"type":207,"tag":208,"props":1119,"children":1120},{},[1121],{"type":212,"value":1122},"For ArenaNet's corrective build:",{"type":207,"tag":316,"props":1124,"children":1125},{},[1126,1131,1136,1141,1146,1151],{"type":207,"tag":320,"props":1127,"children":1128},{},[1129],{"type":212,"value":1130},"settled live ownership and heap capacity plateau across repeated content\ntransitions;",{"type":207,"tag":320,"props":1132,"children":1133},{},[1134],{"type":212,"value":1135},"zero-reference cache entries leave through normal reference-safe eviction;",{"type":207,"tag":320,"props":1137,"children":1138},{},[1139],{"type":212,"value":1140},"freed large blocks are reusable when fragmentation was the cause;",{"type":207,"tag":320,"props":1142,"children":1143},{},[1144],{"type":212,"value":1145},"a three-hour content-diverse session does not approach the effective maximum;",{"type":207,"tag":320,"props":1147,"children":1148},{},[1149],{"type":212,"value":1150},"if the maximum is raised, generated JS and WASM agree and ordinary game paths\nwork above 2 GiB;",{"type":207,"tag":320,"props":1152,"children":1153},{},[1154],{"type":212,"value":1155},"the client retains a clear failure reason if it exhausts the new maximum.",{"type":207,"tag":208,"props":1157,"children":1158},{},[1159],{"type":212,"value":1160},"For our optional mitigation, every accepted JS\u002FWASM pair must be pinned to an\nexact ArenaNet build, unknown builds must remain untouched, the mode must be\nvisible in diagnostics, and disabling it must restore ordinary client behavior\nafter restart.",{"type":207,"tag":233,"props":1162,"children":1164},{"id":1163},"current-conclusion",[1165],{"type":212,"value":1166},"Current conclusion",{"type":207,"tag":208,"props":1168,"children":1169},{},[1170],{"type":212,"value":1171},"The 2 GiB limit and final failed allocation are in ArenaNet's shipped client.\nThe reason some sessions consume the available address space still needs an\nArenaNet source-level heap profile. Until that is fixed, a safe reload remains\nthe conservative mitigation and an exact-build 4 GB mode can provide optional\nheadroom for informed testers.",{"title":1173,"searchDepth":1174,"depth":1174,"links":1175},"",4,[1176,1178,1179,1180,1181,1188,1192,1193,1194],{"id":235,"depth":1177,"text":238},2,{"id":299,"depth":1177,"text":302},{"id":408,"depth":1177,"text":411},{"id":611,"depth":1177,"text":614},{"id":830,"depth":1177,"text":833,"children":1182},[1183,1185,1186,1187],{"id":847,"depth":1184,"text":850},3,{"id":858,"depth":1184,"text":861},{"id":869,"depth":1184,"text":872},{"id":903,"depth":1184,"text":906},{"id":948,"depth":1177,"text":951,"children":1189},[1190,1191],{"id":954,"depth":1184,"text":957},{"id":965,"depth":1184,"text":968},{"id":1058,"depth":1177,"text":1061},{"id":1114,"depth":1177,"text":1117},{"id":1163,"depth":1177,"text":1166},"markdown","docs",{"source":1198,"path":1199,"stem":1200,"dir":1201,"extension":1202},"content","en\u002F1.docs\u002F3.upstream\u002F5.runtime\u002F1.heap-maximum.md","en\u002F1.docs\u002F3.upstream\u002F5.runtime\u002F1.heap-maximum","runtime","md",{"requestedPath":159,"resolvedPath":1204,"alternates":1205},"\u002Fdocs\u002Fupstream\u002Fruntime\u002Fheap-maximum",[1206,1208],{"locale":77,"path":1204,"source":1207},"variant",{"locale":8,"path":159,"source":1209,"resolvedLocale":77},"fallback",{"requested":1211,"resolved":1212,"usedFallback":80},{"locale":8},{"locale":77},{"previous":1214,"next":1214},null,{"left":1216,"top":1216,"width":1217,"height":1217,"rotate":1216,"vFlip":6,"hFlip":6,"body":1218,"hidden":80},0,24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"\u002F>\u003Cpath d=\"M14 2v4a2 2 0 0 0 2 2h4m-10 4a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1a1 1 0 0 1 1 1v1a1 1 0 0 0 1 1m4 0a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1a1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1\"\u002F>\u003C\u002Fg>",{"left":1216,"top":1216,"width":1217,"height":1217,"rotate":1216,"vFlip":6,"hFlip":6,"body":1220},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786362945513]