Currently we exit the VM after static dumping with 
`MetaspaceShared::exit_after_static_dump()`. 


 // We have finished dumping the static archive. At this point, there may be 
pending VM
 // operations. We have changed some global states (such as 
vmClasses::_klasses) that
 // may cause these VM operations to fail. For safety, forget these operations 
and
 // exit the VM directly.
 void MetaspaceShared::exit_after_static_dump() {
   os::_exit(0);
 } 


As the comment suggests, the VM state is altered when preparing and performing 
the static dump, so this change aims to prevent these state changes so the VM 
can exit normally after the static dump completes. There are three major 
aspects to this change:
1. Since the resolved references array in the Constant Pool is altered when 
preparing for a static dump, a "scratch copy" is created and archived instead 
2. Symbols are sorted by address and have their hash recalculated. Similarly to 
point 1, the copies of the symbols that are to be archived have their hashes 
updated as opposed to the originals.
3. The handling of -Xshare:dump during argument parsing such that the VM can 
continue and exit normally with an exit code of 0.

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

Commit messages:
 - Merge branch 'master' into remove_exit_after_dump_8306582
 - Windows fix
 - 8306582: Remove MetaspaceShared::exit_after_static_dump()

Changes: https://git.openjdk.org/jdk/pull/14879/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14879&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8306582
  Stats: 109 lines in 10 files changed: 76 ins; 26 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/14879.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14879/head:pull/14879

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

Reply via email to