javaのコードの実行過程に対して理解があっているか教えてください

a.javaというソースがあったとして
javac a.java
とするとa.classという「バイトコード」にコンパイルされる
java a
とするとaがメモリに読み込まれて実行される
昔のjavaではバイトコードのまま、それをインタプリタが解釈することで
コードを実行していたが、最近のHotSpotと呼ばれる方式?では
メモリに読み込まれたバイトコードのうち、必要になった部分から
順次JITコンパイラによって「ネイティブコード」に変換されてOSにより実行される。
また、このとき変換されたネイティブコードはキャッシュされて次回からは
それが利用される。
しかし、たとえ全てのバイトコードがネイティブコードに変換されて
実行速度が向上しても、OSを再起動してしまえばそれらのキャッシュは
消去され、無効になる。

これでOKでしょうか?