Javaって深く知れば知るほど、糞アーキテクチャに思えるね。

・強力なセキュリティ
ユーザーはセキュリティなんてものより動作速度を求めてるんだよ。
バイトコードベリファイなんて不要だろ。コンパイラが検証済みのコードを再検証する必要なんてないだろ。
え?危険なコードを実行しても安全?VMがOSまで巻き込んで落ちてくれるのですが?
つうかVMのセキュリティホールをなんとかしろよ。
その無駄なセキュリティ仕様のせいで、まともなアプリすら書けんしよ。

・ダイナミックリンク
JARで固めるぐらいなら最初からスタティックリンクにしろよ。
フルダイナミックリンクせいでどれだけ起動に時間がかかると思っているんだ。
さらに逆アセンブルして下さいとばかりに、シンボル情報全部含めるなよ。

・スタックマシン
今時スタックマシン?ハードウェア化しにくいし、しても速度が絶望的だろうが。
コードサイズが小さい?そのまえに余計なクラス情報を省けよ。
JITコンパイラにレジスタの割り当てみたいな高度な最適化までやらせるなよ。
コンパイル時間と、最適化精度のトレードオフになるだろうが。
例えばRISCライクなインストラクションなら
JITコンパイルの時間も実行性能も各段に上がるし、さらにハードウェア実行も簡単になる。
HotSpotとか結局、駄目駄目だったし、まともなJITを提供したのは後にも先にもMicroSoftだけだろうが。