Read about the heap space[
^]
Read about Garbage Collector[
^]
If your app does not have "surviving pojos", then the heap's Survivor Space is not used.
Survivors are a typical problem when using JNI to connect to some C Coding and a reference to that system (e.g. a pointer there) is held.
You can request the GC to run, that is not considered to be that evil. Although it's best to not need to request the GC to run.