gpt4 book ai didi

java - 这个应该优化吗?

转载 作者:行者123 更新时间:2023-12-02 04:47:24 25 4
gpt4 key购买 nike

这是一个将在 Tomcat 7.0 上运行的 servlet。该应用程序非常繁忙。

我们所做的如下:

public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get the path {/api/login}
String requestPath = request.getRequestURI().substring(request.getRequestURI().indexOf(getServletConfig().getServletContext().getContextPath()) + getServletConfig().getServletContext().getContextPath().length());
//get the responder class {mobi.foo.base.api.login}
Class<? extends Responder> responderClass = Class.forName("mobi.foo.base"+requestPath.replaceAll("/", ".")).asSubclass(Responder.class);
//initialize a responder using reflection
Responder responder = responderClass.newInstance();

//print the response
PrintWriter out = response.getWriter();
out.write(responder.respond());
out.close();
}

所以第一次,我倾向于接受这一点,因为它不算瓶颈。换句话说,即使这相对较慢,它的便利性也超过了它引入的相当微不足道的开销:我们正在讨论可能会访问数据库的 http 请求!

我说得对吗?我只是想知道其他人对此的看法。

最佳答案

问:是否应该优化?

答:使用分析器来测量相关代码所花费的时间百分比。如果时间百分比很重要,则对其进行优化。否则就不要这样做。

当然,我们无法给你一个“显着”的明确量化。这实际上取决于实际成本是多少。例如,如果您有一个 Web 应用程序实例,并且大多数时候负载很轻,那么 1% 的性能提升很可能不值得。另一方面,如果您有数千个该程序的副本在数千台服务器上运行,那么性能提高 1% 可能是值得的……只是为了减少您的电费。

<小时/>

可以优化吗?

我认为你不太可能加速。将 class.forNamenewInstance() 替换为工厂对象的 HashMap 查找等可能会节省几分之一微秒的时间调用1。这可能会带来显着的加速......但我对此表示怀疑。

但是我认为@JBNizet 提出了一个重要的观点。这里存在潜在的安全问题。解决这个问题将是彻底修改此代码的合理理由。

<小时/>

1 - 加载类的成本随着请求类型的重复而摊销。当您为先前加载的类调用class.forName时,类加载器只需查找并返回现有的Class对象。

关于java - 这个应该优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29555963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com