Allocate string literals on frozen segments (#49576)
authorEgor Bogatov <egorbo@gmail.com>
Tue, 13 Sep 2022 15:19:16 +0000 (17:19 +0200)
committerGitHub <noreply@github.com>
Tue, 13 Sep 2022 15:19:16 +0000 (08:19 -0700)
commitdc0e2d902b93732097fdc9b68807d9b66e0cc624
tree14547c9579ad2e2877672c3cbeb1fff75b97cde3
parentec7331448ec019ba77114fb6b6b88895d7505742
Allocate string literals on frozen segments (#49576)

* Naive implementation of FrozenObjectHeap

* Add RegisterFrozenSegment

* Add lock

* Update branch, fix asserts

* Ignore collectible assemblies, fix build

* Rename bAppDomainWontUnload to bIsCollectible

* Address feedback

* Fix more asserts not expecting TYP_REF constants being non zero

* move check to IsEphemeral

* Implement commit-on-demand

* bump FOH_COMMIT_PAGES

* Unix's ClrVirtualAlloc seems to be non-aligned

* Multiple frozen segments

* Fix assert in assertionprop.cpp

* Handle string.Empty (it used to be ignored)

* Address Maoni's feedback:
1) Rename FrozenObjectHeap to FrozenObjectSegment since it represents a single segment
2) Remove unnecessary config knobs and leave only turn off/on one

* heap -> segment in comments

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Co-authored-by: Andy Ayers <andya@microsoft.com>
30 files changed:
src/coreclr/gc/gcee.cpp
src/coreclr/gc/gcimpl.h
src/coreclr/gc/gcinterface.h
src/coreclr/inc/clrconfigvalues.h
src/coreclr/inc/corinfo.h
src/coreclr/inc/crsttypes.h
src/coreclr/jit/assertionprop.cpp
src/coreclr/jit/codegencommon.cpp
src/coreclr/jit/gentree.cpp
src/coreclr/vm/CMakeLists.txt
src/coreclr/vm/appdomain.cpp
src/coreclr/vm/appdomain.hpp
src/coreclr/vm/ceeload.cpp
src/coreclr/vm/ceeload.h
src/coreclr/vm/dynamicmethod.cpp
src/coreclr/vm/frozenobjectheap.cpp [new file with mode: 0644]
src/coreclr/vm/frozenobjectheap.h [new file with mode: 0644]
src/coreclr/vm/gchelpers.cpp
src/coreclr/vm/gchelpers.h
src/coreclr/vm/jithelpers.cpp
src/coreclr/vm/jitinterface.cpp
src/coreclr/vm/jitinterface.h
src/coreclr/vm/loaderallocator.cpp
src/coreclr/vm/loaderallocator.hpp
src/coreclr/vm/object.cpp
src/coreclr/vm/object.h
src/coreclr/vm/stringliteralmap.cpp
src/coreclr/vm/stringliteralmap.h
src/coreclr/vm/syncblk.h
src/coreclr/vm/threads.h