标签: jvm-hotspot

Java System.nanoTime经过的平均时间越来越小

这不是我第一次遇到编程语言中的时钟时间问题.基本上我通过在while循环中调用函数来测量函数的运行速度.问题是,由于某种原因,while循环运行的时间越长,经过的时间越来越短.谁能解释一下?代码如下.

DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
    long startTime = System.nanoTime();
    executeSaxonXsltTransformation();
    long stopTime = System.nanoTime();
    long elapsedTime = stopTime-startTime;
    stats.addValue((double)elapsedTime);
    System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
Run Code Online (Sandbox Code Playgroud)

因此,经过大约1,000次运行后,经过的时间为750k至850k.但经过大约100,000次运行后,经过的时间降至580k至750k.通过观察平均值(stats.getMeans())可以最好地注意到持续减少,其中108k循环后平均值为〜632k,而3k循环平均值为~100万.切换到currentTimeMillis而不是nanoTime不会改变任何东西.

java jit jvm-hotspot nanotime

0
推荐指数
1
解决办法
509
查看次数

如何为具有 22G 堆的服务器正确设置 G1GC 选项

我\xe2\x80\x99m设置了一个新的JAVA服务器,堆大小设置为22G,并且将使用G1GC算法。我已经阅读了所有的oracle文档,并且相信这就是我们需要的,但仍然有几个问题:

\n

1> -XX:G1HeapRegionSize 应该是什么?该数字必须是 2 的幂吗?如果是这样,我应该设置 8M 以获得 2816 个区域,还是设置 16M 以获得 1408 个区域?

\n

2> 您认为我们应该显式设置 -XX:ParallelGCThreads 和 -XX:ConcGCThreads 吗?如果省略,是否会根据服务器逻辑处理器将它们设置为默认编号?或者只是设置为固定数字?

\n

3> 下面的选项怎么样,有什么我错过的吗?由于这是我们第一次使用G1GC,所以我不知道是否需要设置其他G1相关选项,因为它们都有推荐的默认值。(在https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html中进行了描述中进行了描述)

\n

// 常用选项

\n
\n

-Xms22G -Xmx22G -Xss1024K

\n
\n

// G1 选项

\n
\n

-XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:G1HeapRegionSize=16

\n
\n

// 日志

\n
\n

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps

\n

-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:-PrintCommandLineFlags

\n
\n

4> 你认为第一次有可能把事情做得大致正确吗?我的意思是没有内存溢出或耗尽。或者您认为我们总是需要更仔细地调整参数才能使事情正确几次?

\n

5> 还有其他建议吗?

\n

有点长,感谢您的阅读。任何帮助将不胜感激。谢谢你!

\n

java garbage-collection jvm jvm-hotspot

0
推荐指数
1
解决办法
6094
查看次数

如何使用Hotspot动态附加机制访问JVM内部数据结构?

根据OpenJDK 的网站,可以将线程附加到 Hotspot(动态附加 API),该线程可以收集有关它的信息。我在互联网上找不到任何关于如何获取有关 Hotspot 内部数据结构的信息,例如操作数堆栈或字节码解释器的状态(以了解当前正在执行哪个字节码)或检索当前堆栈帧等的材料。

另外,如果动态连接 API 无法实现这一点,那么如何使用可服务性代理来完成此操作?我在互联网上找到的唯一示例是来自 Github 的要点,它展示了如何附加到正在运行的 JVM 并获取某些字段的值。那么如何访问JVM中的上述内部数据结构呢?

java debugging jvm jvm-hotspot jvmti

0
推荐指数
1
解决办法
1554
查看次数

java方法:java.lang.Integer.numberOfLeadingZeros(int)可以进行优化

原始代码是:

public static int numberOfLeadingZeros(int i) {
    // HD, Figure 5-6
    if (i == 0)
        return 32;
    int n = 1;
    if (i >>> 16 == 0) { n += 16; i <<= 16; }
    if (i >>> 24 == 0) { n +=  8; i <<=  8; }
    if (i >>> 28 == 0) { n +=  4; i <<=  4; }
    if (i >>> 30 == 0) { n +=  2; i <<=  2; }
    n -= i …
Run Code Online (Sandbox Code Playgroud)

java openjdk jvm jvm-hotspot

-3
推荐指数
1
解决办法
303
查看次数