• Home
  • Raw
  • Download

Lines Matching full:for

5 Panda Runtime should be scalable onto different devices/OSes. So we need some abstraction level for
6 For now, all targets suppose interaction with the user, so we have some limitations for the STW pau…
7 We have very limited memory resources for IoT target, so we should maximize efforts on reducing mem…
15 * internal memory for runtime(ArenaAllocators for JIT, etc)
16 * application memory(i.e., memory for objects created by application)
18 * memory for JITed code
22 There are several modes for memory management:
28 …- low-pause/pauseless GC(for games) or GC with high throughput and acceptable STW pause (for not g…
33 Mode are chosen at the startup time (we'll use profile info from cloud for that).
42 * Similar design for two different platforms - high-end and low-end
43 * Compact Object Header for low-end target
53 **Methods, specific for Class word:**
61 **Methods, specific for Mark word:**
64 * Marked for GC or not
70 128 bits object header for high-end devices(64 bits pointers):
88 64 bits object header for high-end devices(32 bits pointers):
127 32 bits object header for low-end devices:
152 Heavyweight Lock - we have competition for this object(few threads try to lock this object).
198 If the compressed bit is 1, the string has a compressed payload - 8 bits for each element.
202 …ring representation is to use a hash state inside Mark Word as a container for string hash value (…
223 - simple and effective allocator for JIT
228 - support for pool extension and reduction(i.e., we can add another memory chunk to the allocator, …
241 Deallocation for the specific object doesn't have effect in this allocator.
249 …emory usage at some reasonable level - Arena Allocator ideally fits JIT requirements for allocator.
254 - should allocate executable memory for JITed code
257 For example, if we have some callgraph info, we can use it and allocate code for connected methods …
278 Size-segregated algorithm used for small size class to reduce fragmentation.
279 Small objects are joined in "runs"(not individual element for each size, but some "container" with …
282 | header for run of objects with size X| obj with size X | free mem size X | ... | obj with size X |
290 _Note: below for non-embedded target_
292 Each thread maintains a cache for objects(at least for all objects with small size).
296 - locks should protect localized/categorized resources(for example one lock for each size in small …
301 We can use profile information about allocation size for improving main allocator metrics.
316 For the cases when we can get memory shortage we should have some preallocated buffer which allow R…
319 For the IoT systems without MMU Pools should have non-trivial implementation.
321 For some systems/languages will be implemented context-scoped allocator.
329 - Internal memory space for non-compiler part of runtime (including GC internals)
335 - RegionSpace(optional for some GCs)
341 - young space (optional for some GCs)
354 - GC suitable for each mode he shouldn't violate requirements for this mode(see [here](#overview))
356 Requirements for Runtime:
357 - support for precise/exact roots
362 So we should have possibility to use optimal GC for each application.
368 Epsilon GC should be used only for debug and profiling purposes. I.e., we can disable GC and measur…
389 We need to conduct more performance analysis experiments for choosing optimal scheme, but for now l…
393 Spaces(for moving CMS):
401 Survivor space is optional and only for high-end targets.
402 Since one of the metric for this GC - high throughput, the most of the objects in the Eden will liv…
404 So we can support it optionally for experiments. As alternative we can introduce some average age m…
407 1. Root scan for young gen, CardTable used for finding roots in old gen
411 Note: we'll use adaptive thresholds for triggering Minor GC for minimizing STW pause
434 Since typical heap size for mobile applications is small - this GC can be considered as good choice…
447 - humonguous regions(for humonguous objects)
450 Incoming references for each region are tracked via remembered sets:
454 Minor GC(only for young regions - STW):
455 1. Root scan for young gen, remembered sets used for finding roots in old gen
462 Concurrent marking(triggered when we reach some threshold for tenured generation size):
486 Note: good choice for the applications with big heap or for applications when it is hard to provide…
488 Note: compaction is target and mode dependent, so for low-memory devices we can consider [semi-spac…
489 For straight-forward approach we can consider some support from OS to minimize overlapping of semi-…
496 * one HW register reserved for the pointer to the ExecState(per-thread state), let's call it `RVSta…
497 * ExecState structure has field with address of some page used for safepoints and we knew offset of…
500 For example, it can be something like this: `LDR R12, [RVState, #SPaddrOffset]`
504 Note: If it is no MMU available - it is allowed to use explicit condition for safepoint, i.e. somet…
516 For each safepoint, we should have a method that can provide GC with information about objects on t…
518 But for JIT/compiler, it looks like we need some generated(by JIT/compiler) method that can get all…
529 …| method that prepares data about objects on stack for the #X safepoint and waits until STW ends |…
536 * should we generate method for each safepoint, or all safepoints at once?
549 …of heap inconsistency problem, write barrier can be used for maintaining incoming references for y…
561 obj.field = new_val; // STORE for which barrier generated
564 …n references). In this case we always know external roots for the young generation space(or for re…
566 obj.field = new_val; // STORE for which barrier generated
569 …j.field)); // call function which marks some memory range as containing roots for young generation
577 For example we concurrently moving object from one place(`from-space`) to the another(`to-space`).
591 Note: for performance, we can put into ExecState address of conditional flag for conditional barrie…
594 There are several approaches for that:
595 …d/encoded by all compilers compatible with runtime (it is currently not applicable for the runtime)
597 …1. The compiler knows for each barrier type how it should be encoded (see pseudocode in `libpandab…
600 - for this barrier type get all needed operands provided by Runtime via