# benchmark **Repository Path**: codealy/benchmark ## Basic Information - **Project Name**: benchmark - **Description**: 性能调研与演示 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-02 - **Last Updated**: 2023-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: benchmark, sorting-algorithms ## README # jmh ## 介绍 性能调研与演示 ![BenchmarkTest_result_String_Conact](images/BenchmarkTest_result_String_Conact.png) ## Module ### jmh-sample 一个可以运行 JMH 的 benchmark demo, run 方式运行(不要以 debug 形式) * [com.whosly.demo.jmh.benchmark.string#StringConactForJmhBenchmarkTest](jmh-sample/src/test/java/com/whosly/demo/jmh/benchmark/string/StringConactBenchmarkTest.java) + 字符串拼接方式: + 和 StringBuilder.append() 的 benchmark * [com.whosly.demo.jmh.benchmark.intadd#IntegerSumTests](jmh-sample/src/test/java/com/whosly/demo/jmh/benchmark/intadd/IntegerSumBenchmarkTest.java) + 数值列表求的两种方式: for循环实现求和与 Stream API 实现求和的 benchmark * [com.whosly.demo.jmh.benchmark.newclazz#NewClazzBenchmarkTest](jmh-sample/src/test/java/com/whosly/demo/jmh/benchmark/newclazz/NewClazzBenchmarkTest.java) + 创建一个实例化开销基本很小的对象,比较每次new和new一次然后缓存取的方式的 benchmark * [com.whosly.demo.jmh.benchmark.local#RocksDBPutBenchmarkTest](jmh-sample/src/test/java/com/whosly/demo/jmh/benchmark/lock/RocksDBPutBenchmarkTest.java) + RocksDB做put操作时, 加同步锁对性能的影响 + 性能报告 ![BenchmarkTest_result_RocksDBPut](images/BenchmarkTest_result_RocksDBPut.png) ### sorting-algorithms [十一种排序算法](sorting-algorithms/README.md) 的 benchmark * 冒泡排序([Bubble Sort](sorting-algorithms/bubble.md)) * 桶排序(Bucket Sort) * 计数排序(Counting Sort) * 堆排序(Heap Sort) * 插入排序(Insertion Sort) * 二分法插入排序(Dichotomy Insertion Sort) * 归并排序(Merge Sort) * 快速排序(Quick Sort) * 基数排序(Radix Sort) * 选择排序([Selection Sort](sorting-algorithms/selection.md)) * 希尔排序(Shell Sort) * #### sorting-algorithms benchmark 算法的 benchmark * [ShellSortBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/ShellSortBenchmarkTest.java) + 希尔排序算法的两种实现在数据量 10000, 100000, 1000000, 10000000 下的 benchmark + ![BenchmarkTest_result_Shell_Sort](images/BenchmarkTest_result_Shell_Sort.png) * [QuickSortSmallDataBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/QuickSortSmallDataBenchmarkTest.java) + 快速排序在小数据量下的性能报告 + ![BenchmarkTest_result_Quick_Sort_smalldata](images/BenchmarkTest_result_Quick_Sort_smalldata.png) * [QuickSortBigDataBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/QuickSortBigDataBenchmarkTest.java) + 快速排序在海量数据量下的性能报告 + ![BenchmarkTest_result_Quick_Sort_bigdata](images/BenchmarkTest_result_Quick_Sort_bigdata.png) * [InsertionSortBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/InsertionSortBenchmarkTest.java) + 插入排序和二分法插入排序在数据量 10000, 100000, 1000000, 10000000 下的 benchmark + 刷新认知的是,插入排序 居然比二分法插入排序快很多。 + ![BenchmarkTest_result_Insertion_Sort.png](images/BenchmarkTest_result_Insertion_Sort.png) * [BucketSortBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/BucketSortBenchmarkTest.java) + 在不同 bucketSize 下 的 BucketSort 的 benchmark + ![BenchmarkTest_result_Bucket_Sort.png.png](images/BenchmarkTest_result_Bucket_Sort.png) * [SortingAlgorithmsTest](sorting-algorithms/src/test/java/com/whosly/demo/sort/SortingAlgorithmsTest.java) + 所有算法的测试用例。验证算法正确性 * [AllSortBenchmarkTest](sorting-algorithms/src/test/java/com/whosly/demo/benchmark/sort/AllSortBenchmarkTest.java) + 所有算法在数据量 3000, 20000 下的 benchmark 性能对比(由于数据量越大执行时间越长,此处只跑了 3000, 20000 的数据量) #### 十一种排序算法在数据量 3000, 20000 下的性能报告 ![BenchmarkTest_result_ALL.png](images/BenchmarkTest_result_ALL.png) ![BenchmarkTest_result_ALL.png](images/BenchmarkTest_result_ALL_bigdata.png) ![BenchmarkTest_result_ALL.png](images/BenchmarkTest_result_ALL_bigdata_without_SelectionSort.png) 可以看到,`桶排序(Bucket Sort)`的性能最高; 其次为 `冒泡排序(Bubble Sort)`, `插入排序(Insertion Sort)`; 第三梯队的为 `计数排序(Counting Sort)`, `堆排序(Heap Sort)`, `希尔排序(Shell Sort)`; 最后性能较差的为 `二分法插入排序(Dichotomy Insertion Sort)`, `快速排序(Quick Sort)`, `归并排序(Merge Sort)`, `基数排序(Radix Sort)`, `选择排序(Selection Sort)` ### bytes bytes 数组拷贝的 benchmark * [com.whosly.demo.jmh.bytes.benchmark#ByteCopyBenchmarkTest](bytes/src/test/java/com/whosly/demo/jmh/bytes/benchmark/ByteCopyBenchmarkTest.java) + bytes 数组拷贝的 benchmark + 性能报告 ![BenchmarkTest_result_ByteCopy](images/BenchmarkTest_result_ByteCopy.png) ### util 工具类的 benchmark * [com.whosly.demo.jmh.util.benchmark#BytesUtilBenchmarkTest](util/src/test/java/com/whosly/demo/jmh/util/benchmark/BytesUtilBenchmarkTest.java) + 数值类型 转 KB,MB,GB的 benchmark + 性能报告 ![BenchmarkTest_result_BytesUtil_byteToM](images/BenchmarkTest_result_BytesUtil_byteToM.png) BenchmarkTest_result_BytesUtil_byteToM.png ## 其他文档 * [JMH格式分析](JMH.md) * [JMH_API](JMH_API.md) * [注意事项](虚拟机的优化.md) * 官方的 [Code Sample](https://hg.openjdk.org/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/) 写得浅显易懂,推荐在需要详细了解 JMH 的用法时可以通读一遍。