Crystal VS Java benchmarks

Current benchmark data was generated on Mon Jun 23 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2.java 460ms 10ms 573.4MB 563ms 83ms openjdk 21
java 2-m.java 468ms 7.1ms 643.1MB 657ms 120ms graal/jvm 17.0.8
java 2.java 476ms 4.7ms 636.3MB 577ms 107ms openjdk 23
java 2.java 1176ms 4.0ms 1040.7MB 573ms 763ms openjdk/zgc 21
crystal 1.cr 1282ms 30ms 64.2MB 1257ms 10ms crystal 1.16.3

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 109ms 0.7ms 11.0MB 97ms 0ms crystal 1.16.3
java 2-m.java 124ms 0.8ms 96.2MB 163ms 30ms openjdk 23
java 2.java 125ms 2.0ms 167.1MB 157ms 30ms openjdk 21
java 2-m.java 147ms 1.3ms 215.1MB 227ms 50ms graal/jvm 17.0.8
java 2.java 313ms 2.8ms 241.6MB 160ms 207ms openjdk/zgc 21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1505ms 22ms 19.9MB 1440ms 53ms crystal 1.16.3
java 1-m.java 2071ms 296ms 257.7MB 7843ms 130ms openjdk 21
java 1-m.java 2461ms 69ms 243.6MB 9343ms 137ms openjdk 23
java 1-m.java 3046ms 337ms 1240.3MB 9980ms 1080ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 85ms 1.6ms 7.1MB 63ms 10ms crystal 1.16.3
java 1-m.java 436ms 14ms 92.6MB 1433ms 47ms openjdk 23
java 1-m.java 470ms 21ms 119.1MB 1560ms 67ms openjdk 21
java 1-m.java 648ms 7.9ms 215.5MB 1700ms 267ms openjdk/zgc 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 58ms 1.4ms 6.4MB 43ms 0ms crystal 1.16.3
java 1-m.java 603ms 7.0ms 352.5MB 1167ms 110ms graal/jvm 17.0.8
java 1-m.java 640ms 63ms 267.1MB 1717ms 77ms openjdk 21
java 1-m.java 644ms 46ms 250.7MB 1723ms 73ms openjdk 23
java 1-m.java 975ms 34ms 536.4MB 1673ms 433ms openjdk/zgc 21

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 23ms 1.5ms 5.3MB 10ms 0ms crystal 1.16.3
java 1-m.java 295ms 6.5ms 226.0MB 583ms 70ms graal/jvm 17.0.8
java 1-m.java 347ms 33ms 178.0MB 950ms 47ms openjdk 21
java 1-m.java 377ms 31ms 111.4MB 1040ms 47ms openjdk 23
java 1-m.java 499ms 7.7ms 216.4MB 973ms 213ms openjdk/zgc 21

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 896ms 13ms 96.0MB 3307ms 33ms graal/jvm 17.0.8
java 1-m.java 961ms 49ms 50.1MB 3533ms 27ms openjdk 23
java 1-m.java 978ms 5.1ms 48.4MB 3640ms 23ms openjdk 21
java 1-m.java 1025ms 28ms 45.9MB 3340ms 137ms openjdk/zgc 21
crystal 1.cr 2481ms 9.0ms 2.9MB 2470ms 0ms crystal 1.16.3

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 176ms 6.3ms 48.5MB 477ms 23ms openjdk 21
java 1-m.java 188ms 2.9ms 95.8MB 510ms 43ms graal/jvm 17.0.8
java 1-m.java 193ms 4.2ms 50.0MB 503ms 23ms openjdk 23
crystal 1.cr 213ms 7.6ms 2.9MB 200ms 0ms crystal 1.16.3
java 1-m.java 302ms 9.2ms 45.7MB 497ms 140ms openjdk/zgc 21

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 4.java 440ms 0.8ms 101.3MB 613ms 40ms graal/jvm 17.0.8
java 4.java 455ms 1.2ms 47.4MB 540ms 20ms openjdk 21
java 4.java 464ms 8.6ms 49.5MB 557ms 23ms openjdk 23
crystal 2.cr 535ms 2.1ms 3.5MB 447ms 80ms crystal 1.16.3
java 4.java 570ms 2.0ms 45.1MB 537ms 140ms openjdk/zgc 21
crystal 1.cr 681ms 1.3ms 14.6MB 573ms 93ms crystal 1.16.3

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 57ms 0.7ms 3.6MB 40ms 0ms crystal 1.16.3
crystal 1.cr 73ms 0.9ms 4.9MB 57ms 3ms crystal 1.16.3
java 4-m.java 121ms 7.1ms 46.9MB 167ms 20ms openjdk 21
java 4.java 124ms 4.2ms 48.6MB 163ms 20ms openjdk 23
java 4-m.java 129ms 11ms 95.3MB 180ms 37ms graal/jvm 17.0.8
java 4.java 244ms 1.8ms 44.0MB 163ms 140ms openjdk/zgc 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1.9ms 0.2ms 2.9MB 0ms 0ms crystal 1.16.3
java 1.java 64ms 2.4ms 52.4MB 66ms 18ms graal/jvm 17.0.8
java 1.java 72ms 4.4ms 44.7MB 78ms 16ms openjdk 23
java 1.java 73ms 4.9ms 43.8MB 76ms 20ms openjdk 21
java 1.java 192ms 4.4ms 42.8MB 80ms 136ms openjdk/zgc 21

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 2297ms 153ms 300.0MB 313ms 450ms crystal 1.16.3

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1282ms 15ms 53.0MB 33ms 70ms crystal 1.16.3

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 36ms 0.9ms 3.0MB 30ms 0ms crystal 1.16.3
crystal 1.cr 65ms 1.9ms 3.0MB 60ms 0ms crystal 1.16.3

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 101ms 2.3ms 3.0MB 93ms 0ms crystal 1.16.3
crystal 1.cr 186ms 0.8ms 3.0MB 180ms 0ms crystal 1.16.3

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 0-unsafe.cr 19ms 1.1ms 3.0MB 10ms 0ms crystal 1.16.3
crystal 1.cr 30ms 0.6ms 3.0MB 20ms 0ms crystal 1.16.3

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 316ms 2.7ms 9.3MB 303ms 0ms crystal 1.16.3
java 1b.java 1149ms 2.5ms 54.2MB 1243ms 27ms openjdk 21
java 1b.java 1154ms 6.0ms 54.9MB 1253ms 20ms openjdk 23
java 1b.java 1185ms 18ms 109.7MB 1407ms 43ms graal/jvm 17.0.8
java 1.java 1254ms 6.4ms 136.5MB 1370ms 47ms graal/jvm 17.0.8
java 1b.java 1283ms 13ms 51.4MB 1273ms 147ms openjdk/zgc 21
java 1a.java 1656ms 0.6ms 55.1MB 1753ms 17ms openjdk 21
java 1a.java 1663ms 12ms 56.2MB 1757ms 23ms openjdk 23
java 1a.java 1690ms 12ms 102.1MB 1797ms 50ms graal/jvm 17.0.8
java 1.java 1703ms 2.8ms 202.6MB 1777ms 37ms openjdk 21
java 1.java 1717ms 7.6ms 323.7MB 1773ms 57ms openjdk 23
java 1a.java 1784ms 11ms 51.7MB 1763ms 143ms openjdk/zgc 21
java 1.java 2360ms 6.6ms 855.3MB 1810ms 657ms openjdk/zgc 21
java 2.java timeout 0.0ms 676.0MB 5323ms 107ms openjdk 21
java 2.java timeout 0.0ms 768.5MB 5283ms 123ms openjdk 23
java 2.java timeout 0.0ms 3329.3MB 3447ms 1910ms openjdk/zgc 21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 17ms 0.6ms 6.1MB 10ms 0ms crystal 1.16.3
java 1b-m.java 179ms 14ms 49.5MB 280ms 23ms openjdk 21
java 1b-m.java 183ms 9.7ms 51.2MB 290ms 20ms openjdk 23
java 1a-m.java 192ms 8.1ms 50.0MB 293ms 20ms openjdk 21
java 1a-m.java 192ms 3.0ms 52.4MB 300ms 20ms openjdk 23
java 1-m.java 192ms 3.2ms 81.7MB 263ms 27ms openjdk 21
java 1-m.java 197ms 1.2ms 112.1MB 303ms 43ms graal/jvm 17.0.8
java 1-m.java 198ms 7.3ms 87.1MB 270ms 30ms openjdk 23
java 1a-m.java 208ms 7.2ms 98.8MB 310ms 43ms graal/jvm 17.0.8
java 1b-m.java 226ms 20ms 102.0MB 373ms 43ms graal/jvm 17.0.8
java 1b.java 313ms 13ms 47.8MB 310ms 140ms openjdk/zgc 21
java 1a.java 317ms 6.4ms 49.5MB 293ms 143ms openjdk/zgc 21
java 1.java 331ms 4.5ms 114.6MB 260ms 167ms openjdk/zgc 21
java 2-m.java 563ms 7.9ms 647.7MB 857ms 97ms openjdk 21
java 2-m.java 569ms 9.9ms 723.6MB 850ms 103ms openjdk 23
java 2.java 1600ms 3.2ms 1341.4MB 867ms 1043ms openjdk/zgc 21

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1.java 399ms 2.4ms 541.9MB 497ms 87ms openjdk 23
java 1.java 408ms 5.6ms 680.1MB 483ms 90ms openjdk 21
java 1-m.java 440ms 67ms 657.5MB 653ms 120ms graal/jvm 17.0.8
crystal 1.cr 880ms 16ms 64.2MB 857ms 10ms crystal 1.16.3
java 1.java 1057ms 29ms 961.6MB 450ms 737ms openjdk/zgc 21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 1-m.java 162ms 3.2ms 158.1MB 240ms 33ms openjdk 23
java 1-m.java 165ms 0.9ms 206.3MB 233ms 43ms openjdk 21
crystal 1.cr 173ms 3.0ms 22.2MB 157ms 0ms crystal 1.16.3
java 1-m.java 213ms 5.0ms 253.5MB 343ms 70ms graal/jvm 17.0.8
java 1.java 415ms 9.6ms 341.9MB 217ms 273ms openjdk/zgc 21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 342ms 1.3ms 3.3MB 330ms 0ms crystal 1.16.3
crystal 1.cr 344ms 2.9ms 3.3MB 333ms 0ms crystal 1.16.3
java 1.java 441ms 5.0ms 45.2MB 473ms 17ms openjdk 21
java 1.java 449ms 1.1ms 47.9MB 480ms 20ms openjdk 23
java 1.java 450ms 4.6ms 81.4MB 480ms 23ms graal/jvm 17.0.8
java 1.java 573ms 3.6ms 44.8MB 497ms 140ms openjdk/zgc 21
java 2.java 1253ms 11ms 668.0MB 1373ms 93ms openjdk 21
java 2.java 1255ms 4.2ms 766.6MB 1373ms 100ms openjdk 23
java 2.java 3285ms 47ms 2400.8MB 1683ms 1837ms openjdk/zgc 21

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 38ms 0.4ms 3.3MB 30ms 0ms crystal 1.16.3
crystal 1.cr 38ms 1.4ms 3.3MB 30ms 0ms crystal 1.16.3
java 1.java 118ms 2.7ms 81.6MB 150ms 27ms graal/jvm 17.0.8
java 1.java 124ms 1.2ms 48.5MB 157ms 23ms openjdk 23
java 1.java 135ms 27ms 45.4MB 153ms 13ms openjdk 21
java 1.java 249ms 2.6ms 44.8MB 167ms 143ms openjdk/zgc 21
java 2-m.java 295ms 10ms 352.2MB 433ms 50ms openjdk 21
java 2-m.java 313ms 6.2ms 395.9MB 450ms 63ms openjdk 23
java 2.java 705ms 8.5ms 535.8MB 483ms 417ms openjdk/zgc 21

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 350ms 2.1ms 8.3MB 340ms 0ms crystal 1.16.3
java 1.java 414ms 0.9ms 118.0MB 460ms 23ms openjdk 23
java 1.java 423ms 11ms 115.3MB 473ms 20ms openjdk 21
crystal 1.cr 432ms 2.5ms 42.9MB 420ms 0ms crystal 1.16.3
java 1.java 597ms 9.6ms 112.7MB 500ms 163ms openjdk/zgc 21
java 1-m.java 607ms 8.4ms 214.2MB 883ms 67ms graal/jvm 17.0.8
java 2.java 783ms 3.4ms 57.1MB 847ms 17ms openjdk 21
java 2.java 790ms 3.7ms 60.7MB 843ms 17ms openjdk 23
java 2.java 854ms 2.8ms 53.3MB 787ms 147ms openjdk/zgc 21
java 2-m.java 1346ms 23ms 259.9MB 2400ms 117ms graal/jvm 17.0.8

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 2.cr 89ms 2.4ms 4.5MB 80ms 0ms crystal 1.16.3
crystal 1.cr 92ms 3.7ms 13.2MB 83ms 0ms crystal 1.16.3
java 1.java 153ms 0.8ms 68.2MB 200ms 20ms openjdk 23
java 1.java 158ms 2.0ms 64.8MB 213ms 13ms openjdk 21
java 1-m.java 211ms 22ms 124.9MB 297ms 47ms graal/jvm 17.0.8
java 2.java 265ms 7.5ms 50.3MB 313ms 20ms openjdk 23
java 2.java 271ms 12ms 50.0MB 337ms 20ms openjdk 21
java 1.java 291ms 0.1ms 61.5MB 213ms 150ms openjdk/zgc 21
java 2.java 377ms 6.4ms 47.6MB 310ms 147ms openjdk/zgc 21
java 2-m.java 475ms 9.9ms 145.5MB 853ms 57ms graal/jvm 17.0.8

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 1928ms 26ms 6.3MB 1897ms 17ms crystal 1.16.3
java 1.java 3227ms 47ms 445.3MB 3660ms 107ms graal/jvm 17.0.8
java 1.java 3739ms 47ms 425.9MB 4580ms 113ms openjdk 21
java 1.java 3759ms 36ms 413.3MB 4657ms 123ms openjdk 23
java 1.java timeout 0.0ms 1935.2MB 4677ms 1170ms openjdk/zgc 21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 447ms 9.3ms 4.9MB 433ms 0ms crystal 1.16.3
java 1.java 900ms 18ms 443.2MB 1240ms 93ms graal/jvm 17.0.8
java 1-m.java 983ms 6.0ms 389.1MB 1830ms 93ms openjdk 21
java 1-m.java 1002ms 11ms 420.7MB 1840ms 107ms openjdk 23
java 1.java 2053ms 7.5ms 1352.6MB 1690ms 1090ms openjdk/zgc 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 1986ms 16ms 47.3MB 7597ms 23ms openjdk 21
java 2-m.java 1998ms 10ms 48.7MB 7633ms 23ms openjdk 23
java 2-m.java 2113ms 11ms 45.6MB 7603ms 150ms openjdk/zgc 21
java 2-m.java 2529ms 6.7ms 95.2MB 9463ms 47ms graal/jvm 17.0.8
crystal 1.cr 3760ms 10ms 4.5MB 3747ms 0ms crystal 1.16.3

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
java 2-m.java 602ms 2.8ms 48.8MB 2140ms 20ms openjdk 23
java 2-m.java 605ms 4.7ms 47.7MB 2143ms 23ms openjdk 21
java 2-m.java 745ms 4.0ms 45.6MB 2200ms 147ms openjdk/zgc 21
java 2-m.java 772ms 10ms 94.7MB 2710ms 40ms graal/jvm 17.0.8
crystal 1.cr 949ms 7.6ms 4.4MB 940ms 0ms crystal 1.16.3

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
crystal 1.cr 241ms 5.4ms 3.8MB 233ms 0ms crystal 1.16.3
java 2-m.java 247ms 2.2ms 47.7MB 747ms 20ms openjdk 21
java 2-m.java 257ms 13ms 48.3MB 773ms 20ms openjdk 23
java 2-m.java 294ms 26ms 93.1MB 890ms 33ms graal/jvm 17.0.8
java 2-m.java 386ms 9.7ms 45.6MB 763ms 153ms openjdk/zgc 21