| Java | C# / .NET |
|---|---|
| byte code | IL (Intermediate Language) |
| jvm.dll | mscorlib.dll, mscorjit.dll |
| JRE | CLR (Common Language Runtime) |
| JDK | .NET Framework |
| package | assembly (組件/程序集) |
rt.jar,由 ClassLoader 依 CLASSPATH 載入,先找先用-Djava.endorsed.dirs 參數覆蓋核心類庫C:\Winnt\Microsoft.NET\Framework\v版本號,同機器同一時間僅能安裝單一版本(升級需移除舊版)C:\Winnt\assembly\GAC,依命名空間/版本分目錄存放NameSpace\1.0\xxx.dll、NameSpace\1.1\xxx.dll).config)宣告繫結版本Java 版本管理簡單有效;.NET 功能強大但過度複雜,未來可能面臨 GAC 維護惡夢。
server 或 client 版 jvm.dllmain() 入口點開始執行JRE\bin 尋找對應 DLL 實現 JNImscorlib.dll(IL 碼)mscorlib.dll 參考 mscoree.dll → 載入 mscorwks.dll、mscorjit.dllC:\Winnt\assembly\NativeImages_版本\)mscorlib.dll 共存:IL 版(1.88MB)與 Native 版(3.07MB)Main() 入口執行,動態載入私有/共享組件.NET 核心類庫(System 命名空間)擁有預編譯的 Native Image,繞過 JIT 編譯,這是 CLR 執行速度(特別是 GUI)較快的主因。Java 採純位元碼統一載入機制,設計簡潔健壯;.NET 採混合模式,換取效能但增加底層複雜度。