There are 3 types of interpreters in hotspot currently.
1. The "Template" interpreter, which uses platform specific code to set up frames, encode a dispatch table and encode actions for each bytecode.
2. The "Zero" interpreter, which uses no platforms specific code to set up frames and uses C++ dispatch to and execute each bytecode.
3. The "C++" interpreter, which uses platform specific code to set up frames and uses C++ code to dispatch to and execute each bytecode.
(cut/paste from Bertrand email)
Zero and the C++ interpreter use the same interpreter loop but the C++ interpreter relies on CPU dependent dynamically generated glue. It also depends on the stack walking code in our CPU directories, making that code even more complex than what it currently is (in addition to the fact that it has not been maintained for a long time). I tend to agree with Coleen when she said that the C++ interpreter is probably not worth resurrecting.
The third interpreter technology has been bit rotting in the code for a while and should be removed. There is glue code for each cpu platform.
% wc -l cpp*
38 cppInterpreterGenerator_x86.hpp
2314 cppInterpreter_x86.cpp
38 cppInterpreter_x86.hpp
2390 total
In addition to this code there is also #ifdef CC_INTERP conditionals in the platform specific code.
% grep -r CC_INTERP | wc -l
96
Be careful though because CC_INTERP is also used for the Zero interpreter.
Also, the C++ interpreter brought with it an odd class hierarchy that could be cleaner (maybe follow-up RFE).
- relates to
-
JDK-8074543 Missing symbol "objArrayOopDesc::obj_at" when buiding with CPP Interpreter
- Resolved
-
JDK-8273795 Zero SPARC64 debug builds fail due to missing interpreter fields
- Resolved
-
JDK-8144534 Refactor templateInterpreter and templateInterpreterGenerator functions
- Resolved
-
JDK-6829195 JSR 292 needs to support the C++ interpreter
- Closed
-
JDK-8146410 Interpreter functions are declared and defined in the wrong files
- Resolved
-
JDK-8036585 CPP interpreter crashes
- Closed
(1 relates to)