Nucleus cross-runtime benchmark — results

Apple M4, 10 cores, AC power · GraalVM 25.1.3 (Java 25.0.3) · OpenJDK 26.0.1 · Gradle daemon JBR 21 · 2026-07-16

Each app self-runs the suite (3 discarded warmups + best-of-5 over 13 CPU kernels, geometric render ramps, a list bench). Strictly sequential, one app at a time; peak RSS sampled during each run. CPU/GFX higher is better; list, RAM and app size lower is better.

JVM (HotSpot / GraalVM JIT)GraalVM native imageNative-UI port

Headline comparison

Composite CPU scorebest-of-5 geo-mean of 13 kernels · higher is better
jvm-graal146.7
tauri142.2
jvm-c2-pg140.4
swiftui138.7
jvm-c2138.5
aot-o3-pgo132.7
aot-o3100.8
aot-o286.9
aot-os80.1
flutter57.3
Peak RAMMB · lower is better · longer = more memory
flutter196 MB
swiftui268 MB
aot-o3-pgo269 MB
aot-o2278 MB
aot-o3297 MB
aot-os326 MB
jvm-c2-pg616 MB
jvm-c2620 MB
jvm-graal695 MB
tauri794 MB

Tauri counts the full WebKit process tree (794 MB); its main process alone is 177 MB.

App size.app bundle / binary · MB · lower is better
swiftui0.34 MB
tauri6 MB
flutter37 MB
jvm-c2-pg119 MB
aot-os129 MB
aot-o3-pgo129 MB
jvm-c2136 MB
aot-o2150 MB
jvm-graal160 MB
aot-o3174 MB

swiftui/tauri (‡) rely on the OS runtime (SwiftUI/WebKit), so their tiny binaries are not comparable to self-contained bundles.

Summary (sorted by CPU)

variantruntimeCPUGFXlist mspeak RAMapp size
jvm-graalJVM JIT · Java HotSpot(TM) 64-Bit Server VM 25.0.3146.71304121.0695 MB160 MB
tauriRust · rustc release (LLVM -O3) + WebView142.215013233.0794 MB †6 MB‡
jvm-c2-pgJVM JIT · OpenJDK 64-Bit Server VM 26.0.1140.41304120.9616 MB119 MB
swiftuiSwift · LLVM (release) + SwiftUI138.71525414.4268 MB0.34 MB‡
jvm-c2JVM JIT · OpenJDK 64-Bit Server VM 26.0.1138.51304121.6620 MB136 MB
aot-o3-pgoGraalVM Native Image (AOT · -O3)132.71385917.1269 MB129 MB
aot-o3GraalVM Native Image (AOT · -O3)100.81385917.1297 MB174 MB
aot-o2GraalVM Native Image (AOT · -O3)86.91123917.2278 MB150 MB
aot-osGraalVM Native Image (AOT · -O3)80.11043317.3326 MB129 MB
flutterDart AOT (Flutter release)57.31513317.2196 MB37 MB

† Tauri RAM = main process + WebKit tree (WebContent/GPU/Networking). ‡ system-runtime port (size not comparable to self-contained bundles).

Per-kernel CPU throughput

Higher is better. Best per row in green. Units per kernel are in the appendix.

kerneljvm-graaltaurijvm-c2-pgswiftuijvm-c2aot-o3-pgoaot-o3aot-o2aot-osflutter
mandelbrotMpix/s4.094.134.333.923.991.983.321.973.273.61
nbodyM-inter/s701693640659691695683655678609
raytracerMrays/s17.1519.7718.9419.7919.0417.4515.8214.027.044.22
matmulMFLOP/s1421716224166901621516724122253877324431053054
blurMpix/s93.3544.4859.6980.7049.1591.4749.5246.6236.4630.01
sha256MB/s333442361360362327297295268192
sieveMn/s708642566604600726467463484269
fftMbf/s408453441437441364370376357367
piMdig/s0.090.110.110.110.100.100.090.090.090.08
mandelbrot_mtMpix/s15.4716.5215.5616.1216.0814.4714.067.4912.2210.55
raytracer_mtMrays/s74.4881.2068.5574.9567.2071.4360.1649.8825.5113.67
matmul_mtMFLOP/s6208869442640383301363925601131998817255159569731
blur_mtMpix/s34518824426223828620319415539.98

Render ramps (max sustained ≥ 55 fps, higher is better)

variantparticlesstarstexts
swiftui125000181753906
aot-o375000145406102
aot-o3-pgo75000145406102
aot-o250000116326102
flutter50000181759533
jvm-graal50000181756102
jvm-c250000181756102
jvm-c2-pg50000181756102
aot-os5000093066102
tauri250001817518618

Key takeaways

Notes

Tauri RAM — the WebView pitfall. WKWebView is multi-process on macOS: the canvas/JS run in com.apple.WebKit.WebContent/.GPU/.Networking, not the app binary. Main-process RSS alone is 177 MB; the real footprint summing the WebKit tree is 794 MB — making Tauri the heaviest in RAM, not the lightest. (Summing RSS slightly overcounts shared framework pages, so it is an upper bound.)
App size — self-contained vs system runtime. JVM (jlink), GraalVM native and Flutter ship their own runtime, so the .app is the honest weight. swiftui/tauri use the OS's SwiftUI/WebKit, so their binaries (0.3 / 5.6 MB) exclude the engine macOS provides — not comparable. Unlike Electron (~150 MB bundled Chromium), Tauri ships nothing but pays in RAM at runtime.
Flutter. Built after fixing an Xcode ↔ Command Line Tools mismatch (xcodebuild -runFirstLaunch). Port compliant: app-sandbox=false entitlements, top-level isolates.

Appendix — full precise results per benchmark

Exact figures from each variant's result JSON. throughputM = work units / best-of-5 seconds; best (s) = fastest of 5 timed runs after 3 discarded warmups.

jvm-graal — JVM JIT · Java HotSpot(TM) 64-Bit Server VM 25.0.3

composite CPU 146.655379 · graphics 13041.439755 · peak RAM 694.6 MB · app size 160.0 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1563154.0943
nbody1M-inter/s2698200000.385103700.6440
raytracer1Mrays/s3600000.02098517.1549
matmul1MFLOP/s2684354560.01888114216.9126
blur1Mpix/s23592960.02527593.3454
sha2561MB/s83886080.025196332.9325
sieve1Mn/s200000000.028229708.4934
fft1Mbf/s104857600.025716407.7530
pi1Mdig/s100000.1067630.0937
mandelbrot_mt10Mpix/s6400000.04137615.4679
raytracer_mt10Mrays/s3600000.00483374.4828
matmul_mt10MFLOP/s2684354560.00432462087.5346
blur_mt10Mpix/s23592960.006840344.9473
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps18175stars
max_texts_55fps6102texts
list_load20.9833ms
tauri — Rust · rustc release (LLVM -O3) + WebView

composite CPU 142.163865 · graphics 15013.057519 · peak RAM 177.4 MB main · 794.2 MB incl. WebKit tree · app size 5.6 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1551174.1259
nbody1M-inter/s2698200000.389261693.1603
raytracer1Mrays/s3600000.01820919.7706
matmul1MFLOP/s2684354560.01654616223.7901
blur1Mpix/s23592960.05304744.4755
sha2561MB/s83886080.018975442.0757
sieve1Mn/s200000000.031138642.3003
fft1Mbf/s104857600.023162452.7107
pi1Mdig/s100000.0949820.1053
mandelbrot_mt10Mpix/s6400000.03874216.5195
raytracer_mt10Mrays/s3600000.00443381.2038
matmul_mt10MFLOP/s2684354560.00386669441.6701
blur_mt10Mpix/s23592960.012525188.3688
render / list metricvalueunit
max_particles_55fps25000particles
max_stars_55fps18175stars
max_texts_55fps18618texts
list_load233.0000ms
jvm-c2-pg — JVM JIT · OpenJDK 64-Bit Server VM 26.0.1

composite CPU 140.430827 · graphics 13041.439755 · peak RAM 616.0 MB · app size 118.7 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1478164.3297
nbody1M-inter/s2698200000.421856639.6022
raytracer1Mrays/s3600000.01900718.9404
matmul1MFLOP/s2684354560.01608316690.3739
blur1Mpix/s23592960.03952759.6887
sha2561MB/s83886080.023226361.1667
sieve1Mn/s200000000.035340565.9323
fft1Mbf/s104857600.023753441.4491
pi1Mdig/s100000.0951540.1051
mandelbrot_mt10Mpix/s6400000.04112915.5609
raytracer_mt10Mrays/s3600000.00525268.5518
matmul_mt10MFLOP/s2684354560.00419264038.3530
blur_mt10Mpix/s23592960.009667244.0504
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps18175stars
max_texts_55fps6102texts
list_load20.9453ms
swiftui — Swift · LLVM (release) + SwiftUI

composite CPU 138.702862 · graphics 15254.297812 · peak RAM 268.0 MB · app size 0.34 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1633943.9169
nbody1M-inter/s2698200000.409196659.3904
raytracer1Mrays/s3600000.01818819.7936
matmul1MFLOP/s2684354560.01655516214.6027
blur1Mpix/s23592960.02923680.6996
sha2561MB/s83886080.023286360.2464
sieve1Mn/s200000000.033135603.5990
fft1Mbf/s104857600.024002436.8695
pi1Mdig/s100000.0943120.1060
mandelbrot_mt10Mpix/s6400000.03970416.1191
raytracer_mt10Mrays/s3600000.00480374.9532
matmul_mt10MFLOP/s2684354560.00813133012.6490
blur_mt10Mpix/s23592960.009016261.6824
render / list metricvalueunit
max_particles_55fps125000particles
max_stars_55fps18175stars
max_texts_55fps3906texts
list_load14.3990ms
jvm-c2 — JVM JIT · OpenJDK 64-Bit Server VM 26.0.1

composite CPU 138.478073 · graphics 13041.439755 · peak RAM 620.5 MB · app size 136.0 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1604563.9886
nbody1M-inter/s2698200000.390313691.2916
raytracer1Mrays/s3600000.01890419.0432
matmul1MFLOP/s2684354560.01605016724.4733
blur1Mpix/s23592960.04800749.1453
sha2561MB/s83886080.023191361.7202
sieve1Mn/s200000000.033337599.9415
fft1Mbf/s104857600.023770441.1280
pi1Mdig/s100000.0987840.1012
mandelbrot_mt10Mpix/s6400000.03979216.0837
raytracer_mt10Mrays/s3600000.00535767.2028
matmul_mt10MFLOP/s2684354560.00419963924.6189
blur_mt10Mpix/s23592960.009901238.2817
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps18175stars
max_texts_55fps6102texts
list_load21.5753ms
aot-o3-pgo — GraalVM Native Image (AOT · -O3)

composite CPU 132.689085 · graphics 13858.597710 · peak RAM 269.1 MB · app size 128.8 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.3225841.9840
nbody1M-inter/s2698200000.388390694.7147
raytracer1Mrays/s3600000.02063017.4499
matmul1MFLOP/s2684354560.02195812224.7648
blur1Mpix/s23592960.02579391.4702
sha2561MB/s83886080.025664326.8687
sieve1Mn/s200000000.027551725.9308
fft1Mbf/s104857600.028814363.9125
pi1Mdig/s100000.1043560.0958
mandelbrot_mt10Mpix/s6400000.04423014.4699
raytracer_mt10Mrays/s3600000.00504071.4286
matmul_mt10MFLOP/s2684354560.00446560113.1914
blur_mt10Mpix/s23592960.008253285.8555
render / list metricvalueunit
max_particles_55fps75000particles
max_stars_55fps14540stars
max_texts_55fps6102texts
list_load17.0770ms
aot-o3 — GraalVM Native Image (AOT · -O3)

composite CPU 100.834766 · graphics 13858.597710 · peak RAM 297.4 MB · app size 174.1 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1928313.3190
nbody1M-inter/s2698200000.395042683.0152
raytracer1Mrays/s3600000.02276015.8175
matmul1MFLOP/s2684354560.0692403876.8585
blur1Mpix/s23592960.04764149.5220
sha2561MB/s83886080.028266296.7694
sieve1Mn/s200000000.042812467.1560
fft1Mbf/s104857600.028371369.5889
pi1Mdig/s100000.1088950.0918
mandelbrot_mt10Mpix/s6400000.04552814.0574
raytracer_mt10Mrays/s3600000.00598460.1587
matmul_mt10MFLOP/s2684354560.01343019988.3672
blur_mt10Mpix/s23592960.011595203.4760
render / list metricvalueunit
max_particles_55fps75000particles
max_stars_55fps14540stars
max_texts_55fps6102texts
list_load17.1333ms
aot-o2 — GraalVM Native Image (AOT · -O3)

composite CPU 86.900577 · graphics 11238.772087 · peak RAM 277.8 MB · app size 150.4 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.3240751.9748
nbody1M-inter/s2698200000.412086654.7660
raytracer1Mrays/s3600000.02567414.0217
matmul1MFLOP/s2684354560.0827503243.9346
blur1Mpix/s23592960.05060346.6239
sha2561MB/s83886080.028442294.9395
sieve1Mn/s200000000.043174463.2409
fft1Mbf/s104857600.027863376.3390
pi1Mdig/s100000.1096290.0912
mandelbrot_mt10Mpix/s6400000.0854407.4907
raytracer_mt10Mrays/s3600000.00721849.8762
matmul_mt10MFLOP/s2684354560.01555717255.0094
blur_mt10Mpix/s23592960.012137194.3887
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps11632stars
max_texts_55fps6102texts
list_load17.1505ms
aot-os — GraalVM Native Image (AOT · -O3)

composite CPU 80.142345 · graphics 10433.301291 · peak RAM 326.3 MB · app size 128.6 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1959583.2660
nbody1M-inter/s2698200000.397765678.3397
raytracer1Mrays/s3600000.0511517.0380
matmul1MFLOP/s2684354560.0864593104.7687
blur1Mpix/s23592960.06470336.4635
sha2561MB/s83886080.031281268.1676
sieve1Mn/s200000000.041287484.4150
fft1Mbf/s104857600.029392356.7515
pi1Mdig/s100000.1121930.0891
mandelbrot_mt10Mpix/s6400000.05237212.2204
raytracer_mt10Mrays/s3600000.01411125.5113
matmul_mt10MFLOP/s2684354560.01682315956.4169
blur_mt10Mpix/s23592960.015211155.1076
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps9306stars
max_texts_55fps6102texts
list_load17.2805ms
flutter — Dart AOT (Flutter release)

composite CPU 57.272817 · graphics 15132.522770 · peak RAM 196.4 MB · app size 37.2 MB

kernelthreadsunitwork unitsbest (s)throughput
mandelbrot1Mpix/s6400000.1775313.6050
nbody1M-inter/s2698200000.443292608.6733
raytracer1Mrays/s3600000.0853564.2176
matmul1MFLOP/s2684354560.0879023053.8037
blur1Mpix/s23592960.07860530.0146
sha2561MB/s83886080.043607192.3684
sieve1Mn/s200000000.074473268.5537
fft1Mbf/s104857600.028581366.8787
pi1Mdig/s100000.1264470.0791
mandelbrot_mt10Mpix/s6400000.06064710.5529
raytracer_mt10Mrays/s3600000.02634413.6654
matmul_mt10MFLOP/s2684354560.0275879730.5055
blur_mt10Mpix/s23592960.05900539.9847
render / list metricvalueunit
max_particles_55fps50000particles
max_stars_55fps18175stars
max_texts_55fps9533texts
list_load17.2290ms