IT博文
MySQL 事务隔离级别详解
使用 docker compose 安装 tidb
架构师日记-如何写的一手好代码
生产事故-记一次特殊的OOM排查
Docker安装RabbitMQ——基于docker-compose工具
使用 docker-compose 部署单机 RabbitMQ
只需3步,即刻体验Oracle Database 23c
长达 1.7 万字的 explain 关键字指南!
Redis为什么能抗住10万并发?揭秘性能优越的背后原因
深度剖析Redis九种数据结构实现原理
【绩效季】遇到一个好领导有多重要,从被打差绩效到收获成长
为什么Redis不直接使用C语言的字符串?
Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析
如何调整和优化 Go 程序的内存管理方式?
应用部署引起上游服务抖动问题分析及优化实践方案
Java 并发工具合集 JUC 大爆发!!!
卷起来!!这才是 MySQL 事务 & MVCC 的真相。
JDK8 到 JDK17 有哪些吸引人的新特性?
告别StringUtil:使用Java 11的全新String API优化你的代码
从JDK8飞升到JDK17,再到未来的JDK21
Java JMH Benchmark Tutorial
linux和macOS下top命令区别
Windows10关闭Hyper-V的三种方法
为什么应该选择 POSTGRES?
阿里云对象存储 OSS 限流超过阈值自动关闭【防破产,保平安】
Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)
“请不要在虚拟机中运行此程序”的解决方案
Spring中的循环依赖及解决
浅谈复杂业务系统的架构设计 | 京东云技术团队
面试题:聊聊TCP的粘包、拆包以及解决方案
操作日志记录实现方式
字节跳动技术团队-慢 SQL 分析与优化
Spring Boot 使用 AOP 防止重复提交
Controller层代码就该这么写,简洁又优雅!
SpringBoot 项目 + JWT 完成用户登录、注册、鉴权
重复提交不再是问题!SpringBoot自定义注解+AOP巧妙解决
SpringBoot 整合 ES 实现 CRUD 操作
SpringBoot 整合 ES 进行各种高级查询搜索
SpringBoot操作ES进行各种高级查询
SpringBoot整合ES查询
如何做架构设计? | 京东云技术团队
最值得推荐的五个VPN软件(便宜+好用+稳定),靠谱的V2ray梯子工具
我说MySQL每张表最好不超过2000万数据,面试官让我回去等通知?
vivo 自研鲁班分布式 ID 服务实践
使用自带zookeeper超简单安装kafka
推荐 6 个很牛的 IDEA 插件
喜马拉雅 Redis 与 Pika 缓存使用军规
「程序员转型技术管理」必修的 10 个能力提升方向
jdk17 下 netty 导致堆内存疯涨原因排查 | 京东云技术团队
如何优雅做好项目管理?
MySQL 到 TiDB:Hive Metastore 横向扩展之路
聊聊即将到来的 MySQL5.7 停服事件
Linux终端环境配置
微软 Edge 浏览器隐藏功能一览:多线程下载、IE 模式、阻止视频自动播放等
Hutool 中那些常用的工具类和实用方法
clash 内核删库?汇总目前常用的内核仓库和客户端
JDK11 升级 JDK17 最全实践干货来了 | 京东云技术团队
我是如何写一篇技术文的?
虚拟线程原理及性能分析
Java线程池实现原理及其在美团业务中的实践
Editplus和EmEditor配置一键编译java运行环境
用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?
SpringBoot中使用LocalDateTime踩坑记录 - 程序员偏安 - 博客园
程序员必备!10款实用便捷的Git可视化管理工具 - 追逐时光者 - 博客园
基于Netty开发轻量级RPC框架
开发Java应用时如何用好Log
复杂SQL治理实践 | 京东物流技术团队
火山引擎ByteHouse:分析型数据库如何设计并发控制?
多次崩了之后,阿里云终于改了
推荐程序员必知的四大神级学习网站
初探分布式链路追踪
新项目为什么决定用 JDK 17了
Java上进了,JDK21 要来了,并发编程再也不是噩梦了
mapstruct这么用,同事也开始模仿
再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!
【MySQL】MySQL表设计的经验(建议收藏)
如何正确地理解应用架构并开发
解读工行专利CN112905176B
工商银行取得「基于 Spring Boot 的 web 系统后端实现方法及装置」专利
IDEA 2024.1:Spring支持增强、GitHub Action支持增强、更新HTTP Client等
TIOBE 2 月:Go 首次进入前十、“上古语言” COBOL 和 Fortran 排名飙升
Java 21 虚拟线程如何限流控制吞吐量
🎉 通用、灵活、高性能分布式 ID 生成器 | CosId 2.6.6 发布
20年编程,AI编程6个月,关于Copliot辅助编码工具,你想知道的都在这里
Java 8 内存管理原理解析及内存故障排查实践
消息队列选型之 Kafka vs RabbitMQ
从 MongoDB 到 PostgreSQL 的大迁移
腾讯云4月8日故障复盘及情况说明
PHP 在 2024 年还值得学习吗?
AMD集显安装显卡驱动之后出现黑屏,建议这样解决
使用 Docker 部署 moments 微信朋友圈 - 谱次· - 博客园
Java 17 是最常用的 Java LTS 版本
盘点Lombok的几个骚操作
Llama 3 + Ollama + Open WebUI打造本机强大GPT
如何优雅地编写缓存代码
Gmeek快速上手
笔记软件思源远程和本地接入大语言模型服务Ollama实现AI辅助写作(Windows篇)
Git Subtree:简单粗暴的多项目管理神器
这款轻量级规则引擎,真香!!
Ollama教程:本地LLM管理、WebUI对话、Python/Java客户端API应用
GLM-4-9B支持 Ollama 部署
智谱AI开源代码生成大模型第四代版本:CodeGeeX4-ALL-9B
美团二面:如何保证Redis与Mysql双写一致性?连续两个面试问到了!
免费开源好用,Obsidian和Omnivore真正实现一键联动剪藏文章,手把手教程!
得物 Redis 设计与实践
架构图怎么画?手把手教您,以生鲜电商为例剖析业务/应用/数据/技术架构图
使用Hutool要注意了!升级到6.0后你调用的所有方法都将报错 - 掘金
别再用雪花算法生成ID了!试试这个吧
无敌的Arthas!
Navicat Premium v16、v17 破解激活
🎉 分布式接口文档聚合,Solon 是怎么做的?
深入体验全新 Cursor AI IDE 后,说杀疯了真不为过!
Nacos 3.0 架构全景解读,AI 时代服务注册中心的演进
本文档使用 MrDoc 发布
-
+
Java JMH Benchmark Tutorial
```bash Benchmark (N) Mode Cnt Score Error Units BenchmarkLoop.loopFor 10000000 avgt 10 61.673 ± 1.251 ms/op BenchmarkLoop.loopForEach 10000000 avgt 10 67.582 ± 1.034 ms/op BenchmarkLoop.loopIterator 10000000 avgt 10 66.087 ± 1.534 ms/op BenchmarkLoop.loopWhile 10000000 avgt 10 60.660 ± 0.279 ms/op ``` In Java, we can use [JMH (Java Microbenchmark Harness)](https://openjdk.java.net/projects/code-tools/jmh/) framework to measure the performance of a function. Tested with - JMH 1.21 - Java 10 - Maven 3.6 - CPU i7-7700 In this tutorial, we will show you how to use JMH to measure the performance of different looping methods – `for, while, iterator and foreach`. ## 1\. JMH To use JHM, we need to declare `jmh-core` and `jmh-generator-annprocess` (JMH annotations) pom.xml ```markup <properties> <jmh.version>1.21</jmh.version> </properties> <dependencies> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>${jmh.version}</version> </dependency> <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>${jmh.version}</version> </dependency> </dependencies> ``` ## 2\. JMH – Mode.AverageTime 2.1 JMH `Mode.AverageTime` example to measure the performance of different looping methods to loop a `List` containing 10 millions Strings. BenchmarkLoop.java ```java package com.mkyong.benchmark; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) @Fork(value = 2, jvmArgs = {"-Xms2G", "-Xmx2G"}) //@Warmup(iterations = 3) //@Measurement(iterations = 8) public class BenchmarkLoop { @Param({"10000000"}) private int N; private List<String> DATA_FOR_TESTING; public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(BenchmarkLoop.class.getSimpleName()) .forks(1) .build(); new Runner(opt).run(); } @Setup public void setup() { DATA_FOR_TESTING = createData(); } @Benchmark public void loopFor(Blackhole bh) { for (int i = 0; i < DATA_FOR_TESTING.size(); i++) { String s = DATA_FOR_TESTING.get(i); //take out n consume, fair with foreach bh.consume(s); } } @Benchmark public void loopWhile(Blackhole bh) { int i = 0; while (i < DATA_FOR_TESTING.size()) { String s = DATA_FOR_TESTING.get(i); bh.consume(s); i++; } } @Benchmark public void loopForEach(Blackhole bh) { for (String s : DATA_FOR_TESTING) { bh.consume(s); } } @Benchmark public void loopIterator(Blackhole bh) { Iterator<String> iterator = DATA_FOR_TESTING.iterator(); while (iterator.hasNext()) { String s = iterator.next(); bh.consume(s); } } private List<String> createData() { List<String> data = new ArrayList<>(); for (int i = 0; i < N; i++) { data.add("Number : " + i); } return data; } } ``` 2.2 In the above code, JMH will create 2 forks, each fork containing 5 warmup iterations (JVM warmup, result is ignored) and 5 measuring iterations (for calculation), for example : ```bash # Run progress: 0.00% complete, ETA 00:13:20 # Fork: 1 of 2 # Warmup Iteration 1: 60.920 ms/op # Warmup Iteration 2: 60.745 ms/op # Warmup Iteration 3: 60.818 ms/op # Warmup Iteration 4: 60.659 ms/op # Warmup Iteration 5: 60.765 ms/op Iteration 1: 63.579 ms/op Iteration 2: 61.622 ms/op Iteration 3: 61.869 ms/op Iteration 4: 61.730 ms/op Iteration 5: 62.207 ms/op # Run progress: 12.50% complete, ETA 00:11:50 # Fork: 2 of 2 # Warmup Iteration 1: 60.915 ms/op # Warmup Iteration 2: 61.527 ms/op # Warmup Iteration 3: 62.329 ms/op # Warmup Iteration 4: 62.729 ms/op # Warmup Iteration 5: 61.693 ms/op Iteration 1: 60.822 ms/op Iteration 2: 61.220 ms/op Iteration 3: 61.216 ms/op Iteration 4: 60.652 ms/op Iteration 5: 61.818 ms/op Result "com.mkyong.benchmark.BenchmarkLoop.loopFor": 61.673 ±(99.9%) 1.251 ms/op [Average] (min, avg, max) = (60.652, 61.673, 63.579), stdev = 0.828 CI (99.9%): [60.422, 62.925] (assumes normal distribution) ``` 2.3 Warmup iteration and measuring iteration are configurable : ```java @Warmup(iterations = 3) // Warmup Iteration = 3 @Measurement(iterations = 8) // Iteration = 8 ``` 2.4 We even can warm up the entire fork, before started the real fork for measuring. ```java @Fork(value = 2, jvmArgs = {"-Xms2G", "-Xmx2G"}, warmups = 2) ``` ## 3\. How to run JMH – #1 Maven There are two ways to run the JMH benchmark, uses Maven or run it via a JMH Runner class directly. 3.1 Maven, package it as a JAR and run it via `org.openjdk.jmh.Main` class. pom.xml ```markup <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>benchmarks</finalName> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.openjdk.jmh.Main</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 3.2 `mvn package`, it will generate a `benchmarks.jar`, just start the JAR normally. Terminal ```bash $ mvn package $ java -jar target\benchmarks.jar BenchmarkLoop ``` ## 4\. How to run JMH – #2 JMH Runner You can run the benchmark via a JMH Runner class directly. BenchmarkLoop.java ```java package com.mkyong.benchmark; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @Fork(value = 2, jvmArgs = {"-Xms2G", "-Xmx2G"}) public class BenchmarkLoop { private static final int N = 10_000_000; private static List<String> DATA_FOR_TESTING = createData(); public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(BenchmarkLoop.class.getSimpleName()) .forks(1) .build(); new Runner(opt).run(); } // Benchmark code } ``` ## 5\. Result 5.1 Review the result, to loop a `List` containing 10 million String objects, the classic `while loop` is the fastest loop. However, the difference isn’t that significant. ```bash Benchmark (N) Mode Cnt Score Error Units BenchmarkLoop.loopFor 10000000 avgt 10 61.673 ± 1.251 ms/op BenchmarkLoop.loopForEach 10000000 avgt 10 67.582 ± 1.034 ms/op BenchmarkLoop.loopIterator 10000000 avgt 10 66.087 ± 1.534 ms/op BenchmarkLoop.loopWhile 10000000 avgt 10 60.660 ± 0.279 ms/op ``` 5.2 Full detail, good for reference. ```bash $ java -jar target\benchmarks.jar BenchmarkLoop # JMH version: 1.21 # VM version: JDK 10.0.1, Java HotSpot(TM) 64-Bit Server VM, 10.0.1+10 # VM invoker: C:\Program Files\Java\jre-10.0.1\bin\java.exe # VM options: -Xms2G -Xmx2G # Warmup: 5 iterations, 10 s each # Measurement: 5 iterations, 10 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: com.mkyong.benchmark.BenchmarkLoop.loopFor # Parameters: (N = 10000000) # Run progress: 0.00% complete, ETA 00:13:20 # Fork: 1 of 2 # Warmup Iteration 1: 60.920 ms/op # Warmup Iteration 2: 60.745 ms/op # Warmup Iteration 3: 60.818 ms/op # Warmup Iteration 4: 60.659 ms/op # Warmup Iteration 5: 60.765 ms/op Iteration 1: 63.579 ms/op Iteration 2: 61.622 ms/op Iteration 3: 61.869 ms/op Iteration 4: 61.730 ms/op Iteration 5: 62.207 ms/op # Run progress: 12.50% complete, ETA 00:11:50 # Fork: 2 of 2 # Warmup Iteration 1: 60.915 ms/op # Warmup Iteration 2: 61.527 ms/op # Warmup Iteration 3: 62.329 ms/op # Warmup Iteration 4: 62.729 ms/op # Warmup Iteration 5: 61.693 ms/op Iteration 1: 60.822 ms/op Iteration 2: 61.220 ms/op Iteration 3: 61.216 ms/op Iteration 4: 60.652 ms/op Iteration 5: 61.818 ms/op Result "com.mkyong.benchmark.BenchmarkLoop.loopFor": 61.673 ±(99.9%) 1.251 ms/op [Average] (min, avg, max) = (60.652, 61.673, 63.579), stdev = 0.828 CI (99.9%): [60.422, 62.925] (assumes normal distribution) # JMH version: 1.21 # VM version: JDK 10.0.1, Java HotSpot(TM) 64-Bit Server VM, 10.0.1+10 # VM invoker: C:\Program Files\Java\jre-10.0.1\bin\java.exe # VM options: -Xms2G -Xmx2G # Warmup: 5 iterations, 10 s each # Measurement: 5 iterations, 10 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: com.mkyong.benchmark.BenchmarkLoop.loopForEach # Parameters: (N = 10000000) # Run progress: 25.00% complete, ETA 00:10:08 # Fork: 1 of 2 # Warmup Iteration 1: 67.938 ms/op # Warmup Iteration 2: 67.921 ms/op # Warmup Iteration 3: 68.064 ms/op # Warmup Iteration 4: 68.172 ms/op # Warmup Iteration 5: 68.181 ms/op Iteration 1: 68.378 ms/op Iteration 2: 68.069 ms/op Iteration 3: 68.487 ms/op Iteration 4: 68.300 ms/op Iteration 5: 67.635 ms/op # Run progress: 37.50% complete, ETA 00:08:27 # Fork: 2 of 2 # Warmup Iteration 1: 67.303 ms/op # Warmup Iteration 2: 67.062 ms/op # Warmup Iteration 3: 66.516 ms/op # Warmup Iteration 4: 66.973 ms/op # Warmup Iteration 5: 66.843 ms/op Iteration 1: 67.157 ms/op Iteration 2: 66.763 ms/op Iteration 3: 67.237 ms/op Iteration 4: 67.116 ms/op Iteration 5: 66.679 ms/op Result "com.mkyong.benchmark.BenchmarkLoop.loopForEach": 67.582 ±(99.9%) 1.034 ms/op [Average] (min, avg, max) = (66.679, 67.582, 68.487), stdev = 0.684 CI (99.9%): [66.548, 68.616] (assumes normal distribution) # JMH version: 1.21 # VM version: JDK 10.0.1, Java HotSpot(TM) 64-Bit Server VM, 10.0.1+10 # VM invoker: C:\Program Files\Java\jre-10.0.1\bin\java.exe # VM options: -Xms2G -Xmx2G # Warmup: 5 iterations, 10 s each # Measurement: 5 iterations, 10 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: com.mkyong.benchmark.BenchmarkLoop.loopIterator # Parameters: (N = 10000000) # Run progress: 50.00% complete, ETA 00:06:46 # Fork: 1 of 2 # Warmup Iteration 1: 67.336 ms/op # Warmup Iteration 2: 73.008 ms/op # Warmup Iteration 3: 66.646 ms/op # Warmup Iteration 4: 70.157 ms/op # Warmup Iteration 5: 68.373 ms/op Iteration 1: 66.385 ms/op Iteration 2: 66.309 ms/op Iteration 3: 66.474 ms/op Iteration 4: 68.529 ms/op Iteration 5: 66.447 ms/op # Run progress: 62.50% complete, ETA 00:05:04 # Fork: 2 of 2 # Warmup Iteration 1: 65.499 ms/op # Warmup Iteration 2: 65.540 ms/op # Warmup Iteration 3: 67.328 ms/op # Warmup Iteration 4: 65.926 ms/op # Warmup Iteration 5: 65.790 ms/op Iteration 1: 65.350 ms/op Iteration 2: 65.634 ms/op Iteration 3: 65.353 ms/op Iteration 4: 65.164 ms/op Iteration 5: 65.225 ms/op Result "com.mkyong.benchmark.BenchmarkLoop.loopIterator": 66.087 ±(99.9%) 1.534 ms/op [Average] (min, avg, max) = (65.164, 66.087, 68.529), stdev = 1.015 CI (99.9%): [64.553, 67.621] (assumes normal distribution) # JMH version: 1.21 # VM version: JDK 10.0.1, Java HotSpot(TM) 64-Bit Server VM, 10.0.1+10 # VM invoker: C:\Program Files\Java\jre-10.0.1\bin\java.exe # VM options: -Xms2G -Xmx2G # Warmup: 5 iterations, 10 s each # Measurement: 5 iterations, 10 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: com.mkyong.benchmark.BenchmarkLoop.loopWhile # Parameters: (N = 10000000) # Run progress: 75.00% complete, ETA 00:03:22 # Fork: 1 of 2 # Warmup Iteration 1: 60.290 ms/op # Warmup Iteration 2: 60.161 ms/op # Warmup Iteration 3: 60.245 ms/op # Warmup Iteration 4: 60.613 ms/op # Warmup Iteration 5: 60.697 ms/op Iteration 1: 60.842 ms/op Iteration 2: 61.062 ms/op Iteration 3: 60.417 ms/op Iteration 4: 60.650 ms/op Iteration 5: 60.514 ms/op # Run progress: 87.50% complete, ETA 00:01:41 # Fork: 2 of 2 # Warmup Iteration 1: 60.845 ms/op # Warmup Iteration 2: 60.927 ms/op # Warmup Iteration 3: 60.832 ms/op # Warmup Iteration 4: 60.817 ms/op # Warmup Iteration 5: 61.078 ms/op Iteration 1: 60.612 ms/op Iteration 2: 60.516 ms/op Iteration 3: 60.647 ms/op Iteration 4: 60.607 ms/op Iteration 5: 60.733 ms/op Result "com.mkyong.benchmark.BenchmarkLoop.loopWhile": 60.660 ±(99.9%) 0.279 ms/op [Average] (min, avg, max) = (60.417, 60.660, 61.062), stdev = 0.184 CI (99.9%): [60.381, 60.939] (assumes normal distribution) # Run complete. Total time: 00:13:31 REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial experiments, perform baseline and negative tests that provide experimental control, make sure the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts. Do not assume the numbers tell you what you want them to tell. Benchmark (N) Mode Cnt Score Error Units BenchmarkLoop.loopFor 10000000 avgt 10 61.673 ± 1.251 ms/op BenchmarkLoop.loopForEach 10000000 avgt 10 67.582 ± 1.034 ms/op BenchmarkLoop.loopIterator 10000000 avgt 10 66.087 ± 1.534 ms/op BenchmarkLoop.loopWhile 10000000 avgt 10 60.660 ± 0.279 ms/op ``` **Note** Hope this tutorial give you a quick started guide to use JMH benchmark, for more advance JMH examples, please visit this [official JMH sample link](http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/) **Note** How about Forward loop vs Reverse loop? Which one is faster? Visit [this JMH test](http://www.mkyong.com/java/jmh-java-forward-loop-vs-reverse-loop/) ## Download Source Code $ git clone [https://github.com/mkyong/jmh-benchmark](https://github.com/mkyong/jmh-benchmark) $ mvn package $ java -jar target\\benchmarks.jar BenchmarkLoop ## References 1. [OpenJDK: jmh](https://openjdk.java.net/projects/code-tools/jmh/) 2. [JHM examples](http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/) 3. [Maven – How to create a Java project](https://www.mkyong.com/maven/how-to-create-a-java-project-with-maven/) 4. [Java – While vs For vs Iterator Performance Test](https://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/) #### Related Articles - [Java - While vs For vs Iterator Performance Test](https://mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/) - [Java - Reverse loop versus Forward loop in Perform...](https://mkyong.com/java/reverse-loop-versus-forward-loop-in-performance-java/) - [JMH - Java Forward loop vs Reverse loop](https://mkyong.com/java/jmh-java-forward-loop-vs-reverse-loop/) - [How to loop / iterate a List in Java](https://mkyong.com/java/how-do-loop-iterate-a-list-in-java/) - [How to loop ArrayList in Java](https://mkyong.com/java/how-to-loop-arraylist-in-java/) - [Java - How to Iterate a HashMap](https://mkyong.com/java/java-how-to-iterate-a-hashmap/) - [How to loop an enum in Java](https://mkyong.com/java/how-to-loop-an-enum-in-java/) - [Java - How to print a name 10 times?](https://mkyong.com/java/java-how-to-print-a-name-10-times/) - [Java - How to print name 1000 times without loopin...](https://mkyong.com/java/java-how-to-print-name-1000-times-without-looping/) - [Java Iterator examples](https://mkyong.com/java/java-iterator-examples/)  ##### [mkyong](https://mkyong.com/author/mkyong/ "mkyong") Founder of [Mkyong.com](https://mkyong.com/), love Java and open source stuff. Follow him on [Twitter](https://twitter.com/mkyong). If you like my tutorials, consider make a donation to [these charities](https://mkyong.com/blog/donate-to-charity/).
admin
2023年4月20日 14:54
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码