或者正确的方法来加速弹簧响应?

时间:2015-08-31 09:03:46

标签: java spring

我在后端有弹簧。我的控制器:

    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;   
}

1 个答案:

答案 0 :(得分:3)

Java中的对象分配非常便宜,您不会通过重用“引用槽”来保存任何内容。

事实上,(一般情况下)你更有可能给自己造成问题,因为通过重用它,一开始你就让控制器不再是线程安全的(忽略已经破坏了这个的time2Update字段)你需要配置Spring为每个请求提供一个新的控制器实例,并确保以后没有人出现并更改该配置导致难以调试的问题。

每次帮助JVM进行正确的转义分析(http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis)时,通过重新分配对象,可以更好地优化和调整代码。

简而言之,不要担心这些微观优化。编写代码,准确说明您希望它做什么,让JVM计算出其余部分。 只有当出现性能问题时,您才能找到一个分析器并根据经过验证的数字开始调整到这种级别。