|
1 |
| -0.16.0 (2022-12-006) |
| 1 | +0.17.0 (2023-02-17) |
| 2 | +=== |
| 3 | + |
| 4 | +Plan |
| 5 | +--- |
| 6 | +* Fix a bug where `SemiSpace::get_available_pages` returned unused pages as 'available pages'. It should return half of the unused pages as 'available'. |
| 7 | +* Fix a bug where generational plans may make full-heap GC decision before all the releasing work is done. Now plans have a `Plan::end_of_gc()` method |
| 8 | + that is executed after all the GC work is done. |
| 9 | +* Fix a bug where generational plans tended to trigger full heap GCs when heap is full. Now we properly use Appel-style nursery and allow |
| 10 | + the nursery to extend to the heap size. |
| 11 | +* Add a feature `immix_zero_on_release` as a debug feature for Immix to eagerly zero any reclaimed memory. |
| 12 | +* Fix a bug where the alloc bits for dead objects were still set after the objects were reclaimed. Now Immix eagerly clears the alloc bits |
| 13 | + once the memory is reclaimed. |
| 14 | +* Fix a bug where Immix uses forwarding bits and forwarding pointers but did not declare it. |
| 15 | + |
| 16 | + |
| 17 | +Allocator |
| 18 | +--- |
| 19 | +* Fix a bug about the maximum object size in `FreeListAllocator`. The allowed maximum object size depends on both the block size and the largest bin size. |
| 20 | + |
| 21 | + |
| 22 | +Scheduler |
| 23 | +--- |
| 24 | +* Add a 'sentinel' mechanism to execute a specified 'sentinel' work packet when a bucket is drained, and prevent the GC from entering the next stage depending |
| 25 | + on the sentinel packet. This makes it possible to expand the transitive closure multiple times. It replaces `GCWorkScheduler::closure_end()`. |
| 26 | + |
| 27 | + |
| 28 | +API |
| 29 | +--- |
| 30 | +* Add a new set of APIs to support binding-specific weak reference processing: |
| 31 | + * Add `Scanning::process_weak_refs()` and `Scanning::forward_weak_refs()`. They both supply an `ObjectTracerContext` argument for retaining and |
| 32 | + updating weak references. `Scanning::process_weak_refs()` allows a boolean return value to indicate if the method should be called again |
| 33 | + by MMTk after finishing transitive closures for the weak references, which can be used to implement ephemeron. |
| 34 | + * Add `Collection::post_forwarding()` which is called by MMTk after all weak reference related work is done. A binding can use this call |
| 35 | + for any post processing for weak references, such as enqueue cleared weak references to a queue (Java). |
| 36 | + * These replace old methods for the same purpose, like `Collection::process_weak_refs()`, `Collection::vm_release()`, and `memory_manager::on_closure_end`. |
| 37 | + |
| 38 | + |
| 39 | +Misc |
| 40 | +--- |
| 41 | +* Upgrade the Rust toolchain we use to 1.66.1 and upgrade MSRV to 1.61.0. |
| 42 | +* Improve the boot time significantly for MMTk: |
| 43 | + * Space descriptor map is created as an zeroed vector. |
| 44 | + * Mmapper coalesces the mmap requests for adjancent chunks, and reduces our `mmap` system calls at boot time. |
| 45 | +* Add `GCTrigger` to allow different heuristics to trigger a GC: |
| 46 | + * Implement `FixedHeapSizeTrigger` that triggers the GC when the maximum heap size is reached (the current approach). |
| 47 | + * Implement `MemBalancerTrigger` (https://dl.acm.org/doi/pdf/10.1145/3563323) as the dynamic heap resize heuristic. |
| 48 | +* Refactor `SFTMap` so it is dynamically created now. |
| 49 | +* Fix a bug where `Address::store` dropped the value after store. |
| 50 | +* Fix a bug about an incorrect pointer cast in unsafe code in `CommonFreeListPageResource`. |
| 51 | +* Remove all inline directives from our code base. We rely on Rust compiler and PGO for inlining decisions. |
| 52 | +* Remove `SynchronizedCounter`. |
| 53 | + |
| 54 | + |
| 55 | +0.16.0 (2022-12-06) |
2 | 56 | ===
|
3 | 57 |
|
4 | 58 | Plan
|
|
0 commit comments