首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jvm中是否有缓存,或者如何加速有时需要更长时间的方法?

jvm中是否有缓存,或者如何加速有时需要更长时间的方法?
EN

Stack Overflow用户
提问于 2010-02-16 15:38:41
回答 6查看 7.7K关注 0票数 3

您好,是否有任何缓存或jvm设置可以加速方法调用?

例如:我确实有一个web服务,当我每10分钟左右调用它一次时,处理速度相当慢,与每20秒调用一次相比,大约需要8-10秒-结果大约是5秒。

除了这个之外,没有其他东西在服务器上运行。有没有办法加快速度呢?(我不能缓存任何对象。)

我使用了JProfiler,我使用相同的参数调用它。它做的是完全相同的事情。区别在于我调用它的时间不同。服务器空闲的时间。1分钟或30分钟是不同的。

谢谢

编辑:平台是: AIX java: IBM J9 VM (build 2.3,J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64.服务器: tomcat

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-16 17:31:16

可以解释这种行为的因素:

  • Swapping -低活动OS进程被交换out
  • Priority - OS进程优先级有时可能有点神秘,特别是当一个进程主要是idle.
  • JIT的时候-你调用一个方法越多,它得到的optmized
  • GC就越多-垃圾收集器需要一段时间才能稳定下来,这可能会导致不同负载下的不同行为。线程选项基本上是JVM.
  • Pooling的预设配置- -server和其他资源被池化。在低活跃度下,池可能会缩小,对象将需要为re-allocated

调查这类问题可能很困难。我建议您尝试将OS级别的信息与JVM级别的信息关联起来。分析器可能不是最好的工具,可以尝试使用JConsolemem等。

还要尝试识别不同典型场景之间的偏差,例如,启动后的第一个请求,重负载下的请求,中等负载下的请求等。尝试确定响应时间何时发生变化。

票数 2
EN

Stack Overflow用户

发布于 2010-02-16 15:40:43

使用Profiler。

JProfiler将是一个很好的选择。

使用分析器,您可以识别代码中的热点。一旦你确定了这些热点,你就可以考虑从空间和时间上改进这些热点的各种方法。

票数 2
EN

Stack Overflow用户

发布于 2010-02-16 15:42:53

除了改进代码本身之外,还要确保运行服务器的JVM是服务器vm,而不是客户机vm。使用-server参数。

客户端虚拟机

代码语言:javascript
复制
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)

服务器虚拟机

代码语言:javascript
复制
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)

要了解您在生产环境中运行的内容,您可以通过编程方式执行以下操作:

代码语言:javascript
复制
System.getProperty("java.vm.name");

这应该会给出类似于: Java HotSpot(TM) 64位服务器VM的信息

否则(如果您不想接触代码),您可以执行thread dump并查看顶部的内容,例如: Full thread dump Java HotSpot(TM) Server (16.0-b13混合模式)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2271283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档