RFR: 8357445: G1: Time-Based Heap Uncommit During Idle Periods [v6]

Monica Beckwith mbeckwit at openjdk.org
Fri Aug 1 01:41:42 UTC 2025


> **Implements:** https://bugs.openjdk.org/browse/JDK-8357445
> 
> Implement time-based heap uncommit for G1 during idle periods.
> 
> Key changes:
> - Added G1HeapEvaluationTask for periodic heap evaluation
> - Switch from G1ServiceTask to PeriodicTask for improved scheduling
> - Implemented time-based heap sizing policy with configurable uncommit delay
> - Added region activity tracking with last access timestamps
> - Integrated VM_G1ShrinkHeap operation for safe heap shrinking
> - Added new G1 flags: G1UseTimeBasedHeapSizing, G1TimeBasedEvaluationIntervalMillis, G1UncommitDelayMillis, G1MinRegionsToUncommit
> - Added 'sizing' log tag for heap sizing operations
> 
> Comprehensive Test Coverage:
> - Enhanced TestG1RegionUncommit: minimum heap boundaries, concurrent allocation/uncommit scenarios
> - Enhanced TestTimeBasedHeapSizing: humongous object handling, rapid allocation cycles, edge cases
> - Enhanced TestTimeBasedRegionTracking: concurrent region access, lifecycle transition validation
> - Enhanced TestTimeBasedHeapConfig: parameter boundary values, small heap configurations
> 
> This ensures time-based heap uncommit works correctly while maintaining all safety guarantees and test expectations.

Monica Beckwith has updated the pull request incrementally with two additional commits since the last revision:

 - Resolve merge conflict - keep proper @tschatzl time type implementation
   
   - Keep Tickspan::from_milliseconds(G1UncommitDelayMillis) initialization
   - Keep (jlong)elapsed.milliseconds() cast for macOS build compatibility
   - Keep elapsed > _uncommit_delay direct Tickspan comparison
   - Maintains cross-platform compatibility
 - JDK-8357445: Implement @tschatzl code review feedback for time-based heap sizing
   
   - Convert from jlong milliseconds to proper time types (Ticks/Tickspan)
   - Reclassify G1UseTimeBasedHeapSizing from EXPERIMENTAL+false to DIAGNOSTIC+true
   - Reclassify G1MinRegionsToUncommit from EXPERIMENTAL to DIAGNOSTIC
   - Keep timing flags (G1UncommitDelayMillis, G1HeapEvaluationIntervalMillis) as MANAGEABLE
   - Update all test files to use UnlockDiagnosticVMOptions instead of UnlockExperimentalVMOptions
   - Remove explicit G1UseTimeBasedHeapSizing=true from tests (now enabled by default)
   - Improve logging terminology from 'time-based' to 'uncommit evaluation'
   - Fix comment style and remove unused heap_sizing_policy() accessor
   - Comprehensive type safety improvements throughout the codebase
   
   This addresses all feedback regarding type safety, flag design,
   and production readiness of the time-based heap sizing feature.

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/26240/files
  - new: https://git.openjdk.org/jdk/pull/26240/files/53a79368..11061e51

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=26240&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=26240&range=04-05

  Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/26240.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26240/head:pull/26240

PR: https://git.openjdk.org/jdk/pull/26240


More information about the hotspot-gc-dev mailing list