Are you monitoring garbage collection?
This would normally mean that an application is not correctly cleaning up the storage it is using and the JVM is cleaning it up during GC.
However, you need to look at how much memory you application needs/is using. For instances, it is doing a DB query and keeping the results in memory. Does it pull in all of the results of the query, or does it table the results with "X" number per query (say like 100 results at a time).
Typically the amount of free memory will vary based on how many users are logged in, what they are doing, and what the application does.