Java 在运行的JVM中重新加载部分类

Java 在运行的JVM中重新加载部分类,java,tomcat,jvm,classloader,Java,Tomcat,Jvm,Classloader,我有一个CRM Web应用程序在一个Tomcat-SingleServlet中运行 重新加载整个对象图大约需要30秒。这对于整个应用程序来说太长了,无法在生产时间内停止 有时我不得不在几分钟内对生产进行多次更新。变化非常小。这些不能很容易地抽象到前端 我不使用测试环境的原因是,决定更改是否正确的人员需要处理生产数据 堆2GB,在8年前的硬件上运行。活动对象约占1.2GB,从SQL DB构造的对象约为500k 我只想重新加载前端类,并将对象图保留在JVM中。 我提出了可能的解决办法: 分成两个s

我有一个CRM Web应用程序在一个Tomcat-SingleServlet中运行

重新加载整个对象图大约需要30秒。这对于整个应用程序来说太长了,无法在生产时间内停止

有时我不得不在几分钟内对生产进行多次更新。变化非常小。这些不能很容易地抽象到前端

我不使用测试环境的原因是,决定更改是否正确的人员需要处理生产数据

堆2GB,在8年前的硬件上运行。活动对象约占1.2GB,从SQL DB构造的对象约为500k

我只想重新加载前端类,并将对象图保留在JVM中。

我提出了可能的解决办法:

  • 分成两个servlet,并共享上下文,让Tomcat管理前端的重新加载
  • 使用自定义类加载器管理我自己对前端类的重新加载
  • 用Javascript而不是Java实现前端
  • 还有其他/更好的解决方案吗

谢谢。

使用单独且可能持久的缓存将对象图保留在应用程序之外是否有意义?因此,您还可以保留它以防应用程序崩溃。不,我希望将对象图放在JVM中,因为它简化了业务逻辑和其他事情。我担心如果在JVM之外有对象图,速度会太慢。许多查询涉及数万个对象,需要在几秒钟内运行。我不知道您实际上在做什么,但很可能一个合适的(图形)数据库会比您自己做的更快。看看OrientDB,这可能是您需要的。在任何情况下,将部署拆分为后端和前端通常是一个好主意,以便将它们解耦(例如,这样您就能够独立地更新或扩展它们)。图形数据库不是必需的,没有递归关系。