我目前有四个不同的 java 应用程序,它们由 .bat 文件启动的 jar 运行,这些文件位于 Windows XP Embedded 开始菜单的启动文件夹中。我也启动了 Firefox。现在,Firefox 或其中一个 Java 应用程序刚刚关闭。猜测我的内存不足(Win XP Embedded with 512 MB RAM)。
这四个 Java 应用程序是,
- HMI 后端(使用 Spark“微”框架构建)
- 一个记录器应用程序,可将来自 PLC 的数据记录到 H2 数据库中。这通过使用 Timer/Timertask
- h2 数据库服务器
- 执行定期作业的调度程序。这是通过使用石英。
因此,这些 Java 应用程序中的每一个都是在它们自己的 JVM 中启动的(据我所知)。第一个问题是:我能否通过在一个 JVM 而不是四个 JVM 中运行这四个应用程序来降低它们的内存使用量。如果是这样,我应该使用线程来启动这些应用程序中的每一个吗?
除此之外,我应该做的第一件基本事情是降低内存占用,这对于我这样的“真正的”Java 编程来说是全新的。H2连接池,重用对象还有什么?Jconsole 和 Xmx 的东西?
可能很天真,但我真的认为,嘿,GC 会为我处理“一切”。可能不会?=)
编辑: HMI 后端使用 Jetty Web 服务器。此外,所有代码要么是开源的,要么是由我构建的。
编辑 2: Web 框架:http ://www.sparkjava.com/ 。我通过框架而不是通过 Jetty (jetty-webapp-7.3) 提供静态媒体。这可能是为了提高内存使用率而需要考虑的事情?HMI Web 应用程序的其他组件是 freemarker 模板引擎、gson、servlet-api-3、slf4j 和 log4j。
也许在启动 webapp 时尝试在线程中启动记录器和调度程序是可能的。然后只运行两个 JVM。一个用于 webapp,一个用于数据库服务器。
我正在使用 Java 7,它是一个 32 位系统。它有望用于生产用途(或者我遇到了麻烦)。