我是一名编程语言研究员,我正在使用动态创建/加载的类来实现多阶段元编程。
我正在考虑使用 tomcat 服务器来公开我的作品,所以我将编写一个 Servlet 来创建 Java 类并加载它们(大量)。
为了正确地对这些创建的类进行垃圾收集,必须对相应的类加载器进行垃圾收集。这是我作为 Servlet 编写者的责任还是 tomcat 框架的责任?如果不是 tomcat 框架的责任,这是一个开放的安全问题吗?
谢谢!
我是一名编程语言研究员,我正在使用动态创建/加载的类来实现多阶段元编程。
我正在考虑使用 tomcat 服务器来公开我的作品,所以我将编写一个 Servlet 来创建 Java 类并加载它们(大量)。
为了正确地对这些创建的类进行垃圾收集,必须对相应的类加载器进行垃圾收集。这是我作为 Servlet 编写者的责任还是 tomcat 框架的责任?如果不是 tomcat 框架的责任,这是一个开放的安全问题吗?
谢谢!
Tomcat 在取消部署应用程序时取消引用 Web 应用程序类加载器及其从中创建的对象(servlet、过滤器、侦听器……)。这应该使 web 应用程序类加载器,它的所有类和对象都符合垃圾收集的条件(除非你有一个类加载器泄漏)。
我想到有两种可能性可以算作安全问题。首先,如果您有一个类加载器泄漏,一个 Web 应用程序可能会从另一个运行在同一 Tomcat 实例中的 Web 应用程序访问类。其次,如果您允许用户通过您的 Web 应用程序创建类,这显然会成为一个问题。
释放 ClassLoaders 由您决定。Tomcat 是一个 servlet 引擎,它不会干扰您的类加载或卸载。但仍不清楚这将如何成为安全问题。