Linux memory leak?

quizynox at gmail.com quizynox at gmail.com
Wed Aug 7 16:20:35 UTC 2024


Hello,

Through developing JavaFX apps on Linux (X11, KDE) I always see the 
pattern when process (native?) memory doesn't get released back to the OS.

1. when app starts, the Java process consumes a relatively small amount 
of RAM (I track this via top or DE system monitor), usually around 120Mb.
2. if you do any manipulation with Stage (like resize it several times, 
or open the context menu several times) the memory process usage goes up 
to 130Mb.
3. then comes GC, which collects some _heap_ memory and returns it back 
to the OS depending on JVM settings, let say -5Mb
4. I repeat step 2, and JVM process process usage goes up again, +10Mb
5. again GC collects some _heap_ memory and uncommits it back to OS, -5Mb

I have profiled the application with JDK 21 / JavaFX 21 and the 
following settings:
-Xms32m
-Xmx64m
-XX:+UseZGC
-XX:+ZUncommit
-XX:ZUncommitDelay=30

Heap is not a problem, it's always ~20-30MB.
Metaspace is not a problem either, it's always around 2-4MB.

It looks like native (stack, thread?) memory leaks, so never returned to 
the OS. I've never seen JavaFX app process memory usage return (not even 
close) to the same value it started with. RAM usage increases gradually 
and can be 1.5, 2, 3 times the initial value. Yet the heap usage never 
rises above the -Xms value.

I run the same application (it's basically an empty stage) on Windows 
and see no such behavior. Process memory usage returns back to initial 
value almost immediately. Also, on Windows the JVM is freeing memory 
even without using ZGC.

How should I profile this? Any hints?



More information about the openjfx-dev mailing list