我有一个长期运行的服务器应用程序,旨在以最少的停机时间运行(例如,24/7 运行仅因维护而停止)。应用程序必须能够每秒处理数千个请求,因此性能是一个问题。
为每个请求提供服务。应用程序的一部分需要知道当前日期(虽然不是时间),并且由于第 3 方 API,它必须存储在 java.util.Date
对象中。
但是,Date
对象的构造成本很高,因此为每个请求创建一个新对象听起来并不明智。
在请求之间共享一个 Date
对象并每天更新一次意味着在启动时只需要创建一个对象(每个服务器工作线程),但是你如何在一种安全的方式?
例如,使用刚好在午夜之后运行的 ScheduledExecutorService
可以增加 Date
,但会在混合中引入线程同步:Date
对象现在在主线程和 ScheduledExecutorService
产生以运行更新任务的线程之间共享。
同步这 2 个线程会带来另一个性能问题,因为在服务的数千个请求之间可能会争用共享资源(每天执行一次更新线程不太重要,因为它只发生一次一天,不像我们每天要处理的数百万个请求)。
所以,我的问题是确保应用程序始终知道当前日期的最有效方法是什么,即使连续运行数周也是如此?
最佳答案
不要为这种优化而烦恼。它不会产生可衡量的影响。浪费时间。
关于java - 在长期服务器应用程序中有效地缓存和更新当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314828/