动态装载,别称动态加载(英语:Dynamic Loading)是一种程序运行机制,能让计算机程序在运行时(而不是编译时)装载库(或者其他二进制对象)到内存中,然后检索库中函数和变量的地址,并运行这些函数或访问这些变量,且能在不需要时将库从内存中卸载。动态装载、静态链接(static linking)与动态链接(dynamic linking)(注意区分动态装载与动态链接的微妙差别)是复用其他软件代码的三种机制,不同于静态链接和动态链接,这种机制允许计算机程序在没有某些库的情况下引导,然后在运行的过程中发现可用的库从而获得额外的功能。
动态装载早在1960年代的IBM/360操作系统中就已经广泛使用,尤其是在输入/输出子模块,以及COBOL和PL/I的运行时库中。装载的过程对于应用程序开发者是透明的,主要由操作系统或者输入输出子系统自动处理。这样做的好处有:
IBM于1970年代开发的战略性事务处理操作系统CICS中,不仅在普通应用程序级别上使用了动态加载,甚至在内核级别都广泛采取这种机制,这使得用户可以在不用重启CICS操作系统的前提下,就可以对应用程序做任何级别的漏洞修复。
动态装载经常用于插件。
热部署(英:Hot deployment)是,服务器不需要重启的情况下,修改软件或者软件。
并非所有操作系统都支持动态装载。类UNIX操作系统通过C编程语言实现而成的dl库提供该类功能。在微软的视窗操作系统采用Windows应用程序接口。
对于Java语言而言,类的动态装载是通过类加载器(ClassLoader
)该对象进行实现的。示例如下:
Class type = ClassLoader.getSystemClassLoader().loadClass(name);Object obj = type.newInstance();