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*
In addition to this code there is also #ifdef CC_INTERP conditionals in the platform specific code.
% grep -r CC_INTERP | wc -l
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).