I think you meant the machine code. The Java compiler produces bytecode from Java source. The C1 and C2 bytecode compilers in the JVM convert bytecode to machine code.
Yes, I agree if C2 recompiles something C1 already compiled, the C1-compiled machine code should be freed from the codecache.