1 Star 0 Fork 0

WTFPL/java-syscall-perf

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

优化原理

在可以接受的精度范围内,尽量减少系统调用系统调用。因为系统调用访问的是内核资源(内核地址空间),需要做一次内核态<->用户态的切换。currentTimeMillis在linux下调用的是gettimeofday这是一个系统调用。

如果想要深入研究,可以看看这些:

测试结果(windows)

# JMH 1.14.1 (released 1058 days ago, please consider updating!)
# VM version: JDK 1.8.0_191, VM 25.191-b12
# VM invoker: C:\app64\Java\jdk1.8.0_191\jre\bin\java.exe
# VM options: -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=11012:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\bin -Dfile.encoding=UTF-8 -server -Xms4g -Xmx4g -Xmn1536m -XX:CMSInitiatingOccupancyFraction=82 -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
# Warmup: 3 iterations, 1 s each
# Measurement: 3 iterations, 5 s each
# Timeout: 10 min per iteration
# Threads: 16 threads, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.example.GettimeofdayBench.testCurrentTimeMillis

# Run progress: 0.00% complete, ETA 00:00:36
# Fork: 1 of 1
# Warmup Iteration   1: 1308.357 ops/ms
# Warmup Iteration   2: 1684.478 ops/ms
# Warmup Iteration   3: 1764.310 ops/ms
Iteration   1: 1626.686 ops/ms
Iteration   2: 1741.474 ops/ms
Iteration   3: 1697.363 ops/ms


Result "testCurrentTimeMillis":
  1688.508 ±(99.9%) 1056.391 ops/ms [Average]
  (min, avg, max) = (1626.686, 1688.508, 1741.474), stdev = 57.904
  CI (99.9%): [632.117, 2744.899] (assumes normal distribution)


# JMH 1.14.1 (released 1058 days ago, please consider updating!)
# VM version: JDK 1.8.0_191, VM 25.191-b12
# VM invoker: C:\app64\Java\jdk1.8.0_191\jre\bin\java.exe
# VM options: -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=11012:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\bin -Dfile.encoding=UTF-8 -server -Xms4g -Xmx4g -Xmn1536m -XX:CMSInitiatingOccupancyFraction=82 -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
# Warmup: 3 iterations, 1 s each
# Measurement: 3 iterations, 5 s each
# Timeout: 10 min per iteration
# Threads: 16 threads, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.example.GettimeofdayBench.testSystemClock

# Run progress: 50.00% complete, ETA 00:00:19
# Fork: 1 of 1
# Warmup Iteration   1: 99581.606 ops/ms
# Warmup Iteration   2: 106646.255 ops/ms
# Warmup Iteration   3: 105786.247 ops/ms
Iteration   1: 107219.420 ops/ms
Iteration   2: 102029.400 ops/ms
Iteration   3: 106492.293 ops/ms


Result "testSystemClock":
  105247.038 ±(99.9%) 51268.019 ops/ms [Average]
  (min, avg, max) = (102029.400, 105247.038, 107219.420), stdev = 2810.173
  CI (99.9%): [53979.019, 156515.056] (assumes normal distribution)


# Run complete. Total time: 00:00:39

Benchmark                                 Mode  Cnt       Score       Error   Units
GettimeofdayBench.testCurrentTimeMillis  thrpt    3    1688.508 ±  1056.391  ops/ms
GettimeofdayBench.testSystemClock        thrpt    3  105247.038 ± 51268.019  ops/ms

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/WTFPL/java-syscall-perf.git
git@gitee.com:WTFPL/java-syscall-perf.git
WTFPL
java-syscall-perf
java-syscall-perf
master

搜索帮助