java - 或者加速 Spring 响应的正确方法?

标签 java spring

我的后端有 Spring 。我的 Controller :

    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中。

我的问题或存储对象(如顶部)以加快 Controller 响应的正确方法? (或者每次初始化新的内存时都将其保留在内存中或更好是个好主意?)

示例:

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

最佳答案

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

事实上,(一般来说)您更有可能给自己带来问题,因为通过重用它,首先您会使 Controller 不再是线程安全的(忽略已经破坏了这一点的 time2Update 字段),并且您需要配置 Spring 为每个请求提供一个新的 Controller 实例,并确保以后没有人会更改该配置,从而导致难以调试的问题。

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

简而言之,不必担心这些微观优化。编写代码,准确说明您希望它执行的操作,让 JVM 计算出其余部分。 只有您遇到性能问题,您才会拿出分析器并根据经过验证的数字开始调整到这种级别。

关于java - 或者加速 Spring 响应的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307548/

相关文章:

java - 从 java 运行交互式 Dos 程序

java - 覆盖 TalkBack 公告

java - 使用 Spring 与 Java DSL 配置集成连接到 Weblogic JMS 队列

java - Hibernate Ehcache 不适用于 SQL Native 查询缓存

java - 如何在 Mac 中从 Java 程序编译 LaTex 文件

java - Spring MVC 中的过滤器映射不适用于某些 URL

java - 如何检索 JSP 页面中 POJO 字段的注释(JPA 和 Hibernate)

java - 如何通过@Cacheable 注解记录缓存命中?

java - spring threadpooltaskexecutor导致tomcat内存泄漏

spring - @enabler2dbcrepositories 无法找到我的存储库