Und hier kommen 'Just-in-time-Kompilier' zum Zuge.
Wikipedia
Interessanter Satz: "Hochentwickelte JIT-Compiler können speziell für dynamische Sprachen schnelleren Code als herkömmliche Compiler generieren, da sie Closed-World-Annahmen treffen können und Dynamische Optimierungen durchführen."
Was willst du eigentlich erreichen?
Kannst ja auch gleich Assembler programmieren, um ganz sicher zu gehen, daß alles optimal abläuft. Will man das wirklich?
Und wer würde dann wirklich 'optimal' programmieren? Soll doch der Compiler den Unsinn machen. Den haben Leute entwicklet, die sich besser damit auskennen und alle profitieren davon.
Wenn es wirklich um jedes Bit und um jede Millisekunde geht, kann man ja sowas machen, aber man entwickelt auf dieser Ebene keine Anwendungsprogramme. Interessant dabei ist aber das Java auch für den Einsatz in Küchengeräten (Wasch-, Geschirspülmaschienen usw.) entwickelt wurde.
Der Grund warum in der Lehre Java eingesetzt wird, ist ja, daß man lernt ordentlich OO zu programmieren, da man weniger Unsinn machen kann, weil man weniger (unnötige?) Freiheiten hat als in C++. Und das automatische Speichermanagment ist sicher auch ein Grund dafür.
Meines Wissens nach, kann man ein Java-Programm auch für eine Plattform compilieren, insofern würde dein Hauptargument wegfallen.
Bleibt also kein Grund warum ich einen Programmier-Einsteiger raten sollte mit C++ anzufangen. Wer ordentlich mit Java programmieren kann, kann das Wissen dann leicht auf C++ übertragen und hoffentlich dort der Versuchung widerstehen 'dirty hacks' zu benutzen, weil es mal schnell gehen soll.