我在后端有弹簧。我的控制器:
private boolean time2Update = true;
private Algo14web al;
@RequestMapping(value = "/lab/getAlgo", method = RequestMethod.POST)
public @ResponseBody Algo14web getPicksByLeague(@RequestBody String[] request) {
if(this.time2Update){
Algo1DAO ad = new Algo1DAO();
// Long task
al = new Algo14web(ad.getAlgo(Integer.parseInt(request[0])), "under", Double.parseDouble(request[1]));
this.time2Update = false;
}
return al;
}
如果我正确理解al
对象存储在RAM中。
我的问题或正确的方法来存储像顶部的对象,以加快控制器响应? (或者每次初始化新的时候,最好保持ram或更好?)
示例:
@RequestMapping(value = "/lab/getAlgo", method = RequestMethod.POST)
public @ResponseBody Algo14web getPicksByLeague(@RequestBody String[] request) {
Algo1DAO ad = new Algo1DAO();
// Long task
Algo14web al = new Algo14web(ad.getAlgo(Integer.parseInt(request[0])), "under", Double.parseDouble(request[1]));
return al;
}
答案 0 :(得分:3)
Java中的对象分配非常便宜,您不会通过重用“引用槽”来保存任何内容。
事实上,(一般情况下)你更有可能给自己造成问题,因为通过重用它,一开始你就让控制器不再是线程安全的(忽略已经破坏了这个的time2Update字段)你需要配置Spring为每个请求提供一个新的控制器实例,并确保以后没有人出现并更改该配置导致难以调试的问题。
每次帮助JVM进行正确的转义分析(http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis)时,通过重新分配对象,可以更好地优化和调整代码。
简而言之,不要担心这些微观优化。编写代码,准确说明您希望它做什么,让JVM计算出其余部分。 只有当出现性能问题时,您才能找到一个分析器并根据经过验证的数字开始调整到这种级别。