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

Java jvm中是否有缓存,或者如何加速有时需要更长时间的方法?,java,Java,嗨,jvm是否有任何缓存或设置来加速方法调用 e、 g:我确实有一个web服务,当我每10分钟左右调用一次时,处理速度相当慢,大约需要8-10秒,而每20秒调用一次,结果大约是5秒左右 除此之外,服务器上没有其他运行。有没有办法加快速度?(我无法缓存任何对象左右。) 我使用了JProfiler,我用相同的参数来调用它。它也在做同样的事情。不同的是我叫它的时间不同。服务器空闲的时间。1或30分钟是不同的 谢谢 编辑:平台是:AIX java:IBMJ9VM(构建2.3,J2RE1.5.0IBMJ9

嗨,jvm是否有任何缓存或设置来加速方法调用

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

除此之外,服务器上没有其他运行。有没有办法加快速度?(我无法缓存任何对象左右。)

我使用了JProfiler,我用相同的参数来调用它。它也在做同样的事情。不同的是我叫它的时间不同。服务器空闲的时间。1或30分钟是不同的

谢谢

编辑:平台是:AIX java:IBMJ9VM(构建2.3,J2RE1.5.0IBMJ922.3AIXPC64-64。。 服务器:tomcat使用探查器

这是个不错的选择

使用探查器可以识别代码中的热点。
一旦确定了这些热点,您就可以考虑各种方法来在空间和时间方面改进这些热点。

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

客户端虚拟机

Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
服务器虚拟机

Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
要了解在生产环境中运行的内容,可以通过编程方式执行以下操作:

System.getProperty("java.vm.name");
这应该会给你一些类似的东西:Java热点(TM)64位服务器虚拟机


否则(如果你不想接触代码),你可以做一个测试,看看上面的内容,比如:全线程转储Java热点(TM)服务器VM(16.0-b13混合模式)

空闲时间后的缓慢通常是由进程交换到磁盘引起的。现代系统从不空闲,像Windows这样的系统积极地交换后台进程(非焦点操作系统就足够了),这经常发生在Eclipse用户身上


请用您的平台信息编辑您的问题。

服务器的负载有多大?10分钟后,负载沉重的服务器可能已将您的服务交换到磁盘或(取决于服务器软件)关闭服务于上一个请求的服务实例。这意味着为新请求后台处理服务的速度非常慢

有几种方法可以解决此问题:

  • 将服务移动到负载较轻的服务器
  • 调查更好或更合适的软件来运行您的服务-您没有提到您正在使用什么(例如Tomcat?JBoss?)

您是否在机器上启用了交换功能?如果是,您是否尝试过将其关闭?很明显,您的内存被交换掉了。

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

  • 交换-处理的低活动操作系统被交换出去
  • 优先级操作系统进程优先级有时可能有点神秘,尤其是当进程大部分空闲时
  • JIT-调用方法越多,它得到的优化越多
  • GC-垃圾收集器需要一些时间来稳定,这可能导致在不同负载下的不同行为。
    -server
    选项基本上是JVM的预设配置
  • 池化-线程和其他资源被池化。在低活动状态下,池可能会缩小,需要重新分配对象
调查此类问题可能很困难。我建议您尝试将操作系统级别的信息与JVM级别的信息关联起来。探查器可能不是最好的工具,请尝试使用
JConsole
mem
,等等


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

正如一些人指出的,分析应用程序是一个良好的开端。您是否使用基于SOAP的web服务?最好检查您的端点实现调用与前端SOAP处理的比较。以前的经验表明,有时SOAP消息处理可能会由于所有字符串解析的内存流失而导致性能问题。是的,它是基于SOAP的。Axis 1.4如何确定它当前是否在服务器下运行?谢谢我在answ中添加了更多信息呃。我认为这也可能是个问题,但是java.vm.name是IBM J9 vm。而且似乎没有我可以传递的服务器客户端参数。tomcat的哪个版本?这可能是您正在使用的版本中的一个错误。或者,看看调整垃圾收集器以确保您的服务不会被清理。下面是一些IBM特定的文章: