動態裝載

動態裝載，别称动态加载（）是一種程序運行機制，能讓計算機程序在運行時（而不是編譯時）裝載庫（或者其他二進制對象）到內存中，然後檢索庫中函數和變量的地址，并執行這些函數或訪問這些變量，且能在不需要時將庫從內存中卸載。動態裝載、靜態鏈接（static linking）與動態鏈接（dynamic linking）（注意區分動態裝載與動態鏈接的微妙差別）是複用其他軟件代碼的三種機制，不同於靜態鏈接和動態鏈接，這種機制允許計算機程序在沒有某些庫的情況下啟動，然後在運行的過程中發現可用的庫從而獲得額外的功能。

 歷史沿革 
動態裝載早在1960年代的IBM/360操作系統中就已經廣泛使用，尤其是在輸入/輸出子模塊，以及COBOL和PL/I的運行時庫中。裝載的過程對於應用程序開發者是透明的，主要由操作系統或者輸入輸出子系統自動處理。這樣做的好處有：
 修復子系統漏洞時只需要打一次補丁即可，而不需要重新鏈接
 程序庫可以免於被胡亂修改而造成嚴重影響
IBM于1970年代開發的戰略性事務處理操作系統CICS中，不僅在普通應用程序級別上使用了動態加載，甚至在內核級別都廣泛採取這種機制，這使得用戶可以在不用重啟CICS操作系統的前提下，就可以對應用程序做任何級別的漏洞修復。

 应用 
动态装载经常用于插件。[Apache http服务器的例子待补充翻译]

 热部署 
热部署（英：Hot deployment）是，服务器不需要重启的情况下，修改软件或者软件。

 编程语言 

 C/C++ 
並非所有作業系統都支持動態裝載。類UNIX作業系統通過C編程語言實作而成的dl庫提供該類功能。在微軟的視窗作業系統採用Windows應用程序接口。

  類UNIX系統 視窗系統 申明dlfcn.hwindows.h 定義libdlkernel32.dll 裝載庫dlopenLoadLibraryLoadLibraryEx 解析庫dlsymGetProcAddress 卸載庫dlcloseFreeLibrary

 Java 

对于Java语言而言，类的动态装载是通过类加载器（ClassLoader ）该对象进行实现的。示例如下：Class type = ClassLoader.getSystemClassLoader().loadClass(name);
Object obj = type.newInstance();通过反射机制的方式，我们可以加载仍旧未被载入类。并通过下面例子，进行操作加载成功的类。Class type = Class.forName(name);
Object obj = type.newInstance();当我们想要卸载一个类，很遗憾，至今没有一种简单的并且程序可控制的的方法（不存在原生方法）。打个比方，当开发者有这样的需求时——正在使用的类加载器（ClassLoader ）不是系统类加载器，同时该加载器又无法被卸载，而你又想要卸载掉类。 此时，开发者就不得不了解机制细节，否则就无法确认类是否真的被卸载。这样的操作十分麻烦。

 參考資料 

Category:计算机程序库
Category:操作系统技术