我有一个java程序,它每分钟检查一个数据库,看看某个网站是否需要监控。如果它满足条件,我使用ProcessBuilder将网站URL传递到我的另一个java程序(runnable jar)中……正如我所期望的那样,它会监控网站。
然而,这似乎导致了巨大的内存泄漏。我似乎得到了一个"Java内存不足异常“,即使只有几个网站被监控……我想知道是否有比从JAR中调用JAR更好的方法。
这是我目前启动一个网站监视器的方式:
if(URL.length() > 1) {
ProcessBuilder builder = new ProcessBuilder("java", "-jar", "/usr/opt/monitor/Monitor.jar", URL);
builder.redirectErrorStream(true);
builder.redirectOutput(new File("/usr/opt/logs/Monitor.log"));
Process p = builder.start();
有没有人能建议一个更好的方法来实现这一点呢?线程?直接从Monitor.jar调用这个类?
发布于 2017-07-17 18:08:03
每个进程都会产生大量的内存开销。摆脱进程的最简单方法是在单独线程中的调用进程中直接运行jar文件的主类的方法main(String[])
。为了限制同时运行的线程数,使用具有固定线程数的线程池是值得的,否则您可能会因为要处理的URL数量意外增加而耗尽内存。
如果这些措施不起作用,那么监控程序内部就会发生内存泄漏。
https://stackoverflow.com/questions/45150350
复制