|
| 1 | +0.16.0 (2022-12-006) |
| 2 | +=== |
| 3 | + |
| 4 | +Plan |
| 5 | +--- |
| 6 | + |
| 7 | +* Refactor `MarkSweep` to work with both our native mark sweep policy and the malloc mark sweep policy backed by malloc libraries. |
| 8 | + |
| 9 | +Allocators |
| 10 | +--- |
| 11 | + |
| 12 | +* Add `FreeListAllocator` which is implemented as a `MiMalloc` allocator. |
| 13 | +* Fix a bug in `ImmixAllocator` that alignment is properly taken into consideration when deciding whether to do overflow allocation. |
| 14 | + |
| 15 | +Policies |
| 16 | +--- |
| 17 | + |
| 18 | +* Add `MarkSweepSpace`: |
| 19 | + * It uses our native MiMalloc implementation in MMTk core. |
| 20 | + * When the feature `malloc_mark_sweep` is enabled, it uses the selected malloc library to back up its allocation. |
| 21 | +* Malloc mark sweep now accounts for memory based on page usage, and each malloc library may use a different page size. |
| 22 | +* The immix space now uses the newly added `BlockPageResource`. |
| 23 | +* Changes to Space Function Table (SFT) to improve our boot time and reduce the memory footprint: |
| 24 | + * Rename the current SFT map to `SFTSparseChunkMap`, and only use it for 32 bits architectures. |
| 25 | + * Add `SFTSpaceMap` and by default use it for 64 bits architectures. |
| 26 | + * Add `SFTDenseChunkMap` and use it when we have no control of the virtual address range for a MMTk space on 64 bits architectures. |
| 27 | + |
| 28 | +API |
| 29 | +--- |
| 30 | + |
| 31 | +* Add an option `thread_affinity` to set processor affinity for MMTk GC threads. |
| 32 | +* Add `AllocationSemantics::NonMoving` to allocate objects that are known to be non-moving at allocation time. |
| 33 | +* Add `ReferenceGlue::is_referent_cleared` to allow some bindings to use a special value rather than a normal null reference for a cleared referent. |
| 34 | +* Add `pin`, `unpin`, and `is_pinned` for object pinning. Note that some spaces do not support object pinning, and using these methods may |
| 35 | + cause panic if the space does not support object pinning. |
| 36 | +* Refactor `ObjectReference`: |
| 37 | + * MMTk core now pervasively uses `ObjectModel::ref_to_address` to get an address from an object reference for setting per-object side metadata. |
| 38 | + * Add `ObjectModel::address_to_ref` that does the opposite of `ref_to_address`: getting an object reference from an address that is returned by `ref_to_address`. |
| 39 | + * Add `ObjectModel::ref_to_header` for the binding to tell us the base header address from an object reference. |
| 40 | + * Rename `ObjectModel::object_start_ref` to `ObjectModel::ref_to_object_start` (to be consistent with other methods). |
| 41 | + * Remove `ObjectModel::OBJECT_REF_OFFSET_BEYOND_CELL`, as we no longer use the raw address of an object reference. |
| 42 | + * Add `ObjectModel::UNIFIED_OBJECT_REFERENCE_ADDRESS`. If a binding uses the same address for `ObjectReference`, `ref_to_address` and `ref_to_object_start`, |
| 43 | + they should set this to `true`. MMTk can utilize this information for optimization. |
| 44 | + * Add `ObjectModel::OBJECT_REF_OFFSET_LOWER_BOUND` to specify the minimam value of the possible offsets between an allocation result and object reference's raw address. |
| 45 | +* `destroy_mutator()` no longer requires a boxed mutator as its argument. Instead, a mutable reference to the mutator is required. It is made clear that the binding should |
| 46 | + manage the lifetime of the boxed mutator from a `bind_mutator()` call. |
| 47 | +* Remove `VMBinding::LOG_MIN_ALIGNMENT` and `VMBinding::MAX_ALIGNMENT_SHIFT` (so we only keep `VMBinding::MIN_ALIGNMENT` and `VMBinding::MAX_ALIGNMENT`). |
| 48 | + |
| 49 | +Misc |
| 50 | +--- |
| 51 | + |
| 52 | +* Add a lock-free `BlockPageResource` that can be used for policies that always allocate memory at the granularity of a fixed sized block. |
| 53 | + This page resource facilitates block allocation and reclamation, and uses lock-free operations where possible. |
| 54 | +* Fix a race condition in `FreeListPageResource` when multiple threads release pages. |
| 55 | +* Fix a bug in `fetch_and/or` in our metadata implementation. |
| 56 | +* Fix a bug in side metadata bulk zeroing that may zero unrelated bits if the zeroed region cannot be mapped to whole metadata bytes. |
| 57 | +* Remove unused `meta_data_pages_per_region` in page resource implementations. |
| 58 | +* Remove the use of `MaybeUninit::uninit().assume_init()` in `FreeListPageResource` which has undefined behaviors |
| 59 | + and causes the illegal instruction error with newer Rust toolchains. |
| 60 | +* Remove the trait bound `From<Address>` and `Into<Address>` for `Region`, as we cannot guarantee safe conversion between those two types. |
| 61 | +* Extract `Chunk` and `ChunkMap` from the immix policy, and make it available for all the policies. |
| 62 | + |
1 | 63 | 0.15.0 (2022-09-20)
|
2 | 64 | ===
|
3 | 65 |
|
|
0 commit comments