In JDK-8077144 we noticed that a large part of startup is spent in initializing the concurrent mark data structures.
This is because they are huge. It might be advantageous to
- try to allocate them more lazily so that not all memory (or reservation) is actually used). A large part of the heap consists of young gen, where no mark bitmap(s) are required.
Also, most likely, not all threads touch the bitmaps for all memory.
- allow better blocking of the data structures so that the can be (un-)committed more easily on a region basis.
- share some memory between threads after all (or only allow particular threads access to particular memory areas)