当前的HotSpot JVM默认是并行运行的吗?

时间:2012-08-31 16:42:14

标签: java jvm openjdk jvm-hotspot

我正在使用这个Java版本:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.3) (suse-9.1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

当我启动java程序时,例如

java TestApp

默认情况下,JVM会并行运行吗?

如果是,哪些部分并行运行?

我对此感兴趣,因为我发现如果我使用taskset -c 0 java TestApp绑定在TestApp上运行的processor 0,则第一次运行时间比java TestApp慢得多。这意味着什么吗?

3 个答案:

答案 0 :(得分:2)

有许多单线程任务都有自己的线程。

  • 运行程序的主线程
  • 背景字节代码到本机编译器
  • 终结器线程(在对象上调用finalize())
  • GC线程池

您的代码将仅使用您创建的线程数(加上为您创建的“main”)

答案 1 :(得分:1)

JVM具有本机线程,没有全局锁定,如果这就是您所要求的。

答案 2 :(得分:0)

第一个运行时间可能主要是将字节码JIT到机器代码。我非常强烈地怀疑该过程是针对并行场景进行优化的。