I always had a question about heap memory behaviour.
Profiling my app i get the above graph. Seems all fine. But what i don’t understand why,at GC time, the heap grows a litle bit, even there is enough memory (red circle).
That means for a long running app that it will run out of heap space at some time ?

Not necessarily. The garbage collector is free to use up to the maximum allocated heap in any way it sees fit. Extrapolating future GC behaviour based on current behaviour (but with different memory conditions) is in no way guaranteed to be accurate.
This does have the unfortunate side effect that it’s very difficult to determine whether an OutOfMemoryError is going to happen unless it does. A legal (yet probably quite inefficient) garbage collector could simply do nothing until the memory ceiling was hit, then do a stop-the-world mark and sweep of the entire heap. With this implementation, you’d see your memory constantly increasing, and might be tempted to say that an OOME was imminent, but you just can’t tell.
With such small heap sizes, the increase here is likely just due to bookkeeping/cache size alignment/etc. You’re talking about less than 50KB or so looking at the resolution on the scale, so I shouldn’t be worried.
If you do think there’s a legitimate risk of OutOfMemoryErrors, the only way to show this is to put a stress test together and show that the application really does run out of heap space.