我必须编写一个被认为是"永远"运行的程序,这意味着它不会定期终止.到目前为止,我总是编写将在一天结束时运行并终止的程序.程序必须进行一些同步,暂停n分钟而不是再次同步.
AFAIK我的当前实现应该没有问题,理论上它应该运行得很好,但我缺乏任何实际经验.
那么有没有"模式"或最佳实践来编写具有很长运行时间的非常强大且资源有效的Java程序?例如一个月/一年的运行时间之后会出现什么问题?
一些背景:
提前致谢
只是在编写这种应用程序时我必须记住的所有事情的大脑转储.
避免内存泄漏
我有一个应用程序,每天中午运行一次,而且我有一个FileWriter.我没有正确地关闭它,然后我们开始想知道为什么我们的虚拟机在几周之后就会融化.内存泄漏确实可以以任何形式出现,其中一个最常见的例子是您没有de-reference适当的对象.例如,使用类的字段作为临时存储的方法.课程通常会持续存在,参考也是如此.这会让你留下物品,坐在记忆中,什么都不做.
使用正确的Scheduler
我Timer在那个应用程序中使用了java ,后来我了解到当另一个应用程序正在更改系统时钟时,最好使用ScheduledThreadPoolExecutor.因此,如果您计划将其完全保留在Java中,我强烈建议您使用Timer来解决此问题中详述的所有原因.
注意内存使用和您的环境
如果您的应用每天都在加载大量数据,而您在同一台服务器上运行其他应用,则可能需要注意时间安排.例如,比如在中午,有三个应用程序运行他们的预定操作,我想说在任何其他时间运行它可能是一个聪明的举动.请注意执行代码的环境.
错误处理
您可能希望配置您的应用程序,以便在出现问题时让您知道是否出现问题,而不会破坏应用程序.如果它每隔几个小时运行一次,这意味着人们可能依赖它,所以我会在你的Java代码中有一个向你发送电子邮件的函数,详细说明异常的性质.
使其可配置
同样,如果它需要在当天的不同时间点运行,您不希望将该事情拖延几个小时来对代码进行一些细微的更改.而是将其移植到java Properties文件中,或者移植到XML Config中(或者真的,无论如何).这样做的好处是,您可以更新您的程序,并在任何人真正注意到差异之前启动并运行它.
害怕static关键字
这个坏男孩会使对象持续存在,即使你破坏他们的父引用.如果你不小心它,它是所有内存泄漏的母亲.对于常量来说这很好,你知道的东西不需要改变并且需要在项目中存在以便运行良好,但是如果你在项目中使用它作为随机值,你会很快想知道为什么你的应用程序每隔几个小时就会崩溃而不是syncing.
转到@ X86提醒我那个.
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |