我目前正在开发一个Java Web应用程序,它在服务器端进行大量计算。我正在尝试创建一个类似于Google地图的地图系统。
客户端通过Java Servlets向服务器发送查询。对于每个实例,都会创建一个巨大的多维地图数组变量。我认为这在服务器计算机上的速度和RAM使用方面可能效率低下。
所有实例是否可以共享对内存中相同变量的访问权限,以便不会一次又一次地创建相同的变量?
map数组变量是一个巨大的文本文件,目前为每个请求重新打开文本文件。
我正在考虑使用全局常量变量,但我也希望此共享变量在运行时可以修改,这样就不必重新启动/重新编译服务器以更改数组数据。这可能吗?
答案 0 :(得分:0)
使用静态变量来共享所有实例,但请确保您是否进行任何更新以同步这些更新。 要么 您可以将变量存储在所有客户端之间共享的servletcontext中
答案 1 :(得分:0)
1)创建 Singleton EJB 。使用javax.ejb.Startup
注释EJB,以便在服务器启动时,bean也会启动。在EJB init 方法中填充变量。任何Web组件都可以访问该单例EJB。 Singleton EJB确保无论如何只存在1个副本。除非出现错误,否则容器不会停止Singleton EJB。
2)如果您无法实现EJB,则创建一个实现ServletContextListener
的类。因此,当ServletContext
已启动时,ServletContextListener
类将收到回调,您可以在其中设置变量。