HotSpot Internals
This wiki is written by and for programmers working on the HotSpot JVM system. This includes programmers of systems which generate JVM bytecodes (i.e., language implementors).
Contents
- Building
- Compiler
- PerformanceTechniques — What code shapes does the JVM optimize best? Here is a list.
- Inlining — Methods are often inlined, widening the compiler's "horizon" of optimization.
- LogCompilation
- MicroBenchmarks — Here are some rules, in priority order, to know about when you write micro-benchmarks for Hotspot.
- PerformanceTacticIndex
- PrintAssembly — Puzzled by a performance glitch? You might have to look at the generated code.
- RangeCheckElimination — For loop-invariant arrays, range checks can usually be eliminated.
- Publications JKU
- Runtime
- CallingSequences — A calling sequence is a contract between two blocks of code, a call site (within a caller) and and entry point (within a callee).
- CompressedOops
- JavaControlStack
- Synchronization
- Serviceability
- StorageManagement
- StoreBarriers — Changes to the heap's object graph need to be tracked by the GC; such tracking is done via store barriers.
- StyleGuide — How will my new code best fit in with the Hotspot code base? Here are some guidelines.
Intentions and non-intentions
This wiki contains:
- An architectural guide to the Runtime, Compiler, GC, Serviceability, etc.
- Details on performance techniques.
- A place to document likely future work (major refactorings or cleanups, new optimizations, etc.).
- Quick links to similar information in other places on the web.
- http://java.sun.com/javase/technologies/hotspot ("Java SE HotSpot at a Glance")
- http://openjdk.java.net/groups/hotspot/ (OpenJDK HotSpot Project home)
- HotSpot-related research at the Johannes Kepler University Linz
- Information which, once written, is expected to remain accurate and relevant, as long as the related code remains stable.
Please look for the following types of information elsewhere:
- Not non-architectural or non-technical developer notes.
- Not an introduction or quick-start for working on the JVM. (TO DO: Put links here.)
- Not build instructions.
- Not a substitute for comments in the source code.
- Not a list of bugs or tasks.
- Not a blog, forum, or the comments section thereof.
Interesting tasks to do
- Extract links and info. from messages and blog postings, especially via hotspot-dev@openjdk.
- Extract links and info. from historical Sun mailing lists and wikis. (Sun engineers have to do this!)
- Write down understandings of major modules as they are (re-)acquired from trips through the code.
Who writes this wiki?
- We are using the Community Write pattern.
- There is no public write access, except for leaving page comments. You must be registered and logged in to leave comments.
- Please do add page comments when a page should answer your question but doesn't. (That means, potentially on any page.)
- The most effective page comments will include links to relevant email discussion threads, e.g., on the Hotspot compiler-dev list.
- Any member of the OpenJDK Hotspot Group or a related group should feel free to contribute.
- Actually, anybody with a (demonstrable) working knowledge of the Hotspot internals will be welcome to contribute content.
- Write permissions are not automatic until and unless the DBs get on speaking terms. If you think you should have write permission and don't contact the wiki administrator.