There really isn't much information conveyed in the telemetry graphs you've pasted in your question.
What is conveyed
- Your program was monitored for about 3 minutes
- Your heap utilization is slightly less than 200mb (nothing special)
- You've got about 90 threads (this must be an app server)
- You're spending less than 5% on average in GC (normal)
I bet the saw-tooth pattern conveyed in the memory visualizer is your program booting - otherwise why do things seem to smooth other in the last minute or so. Was your application under any load during the 3 minute period shown in your question?
As a starting point I'd look at how much time your program spends in GC (Relative Time in GC) when your program is doing some heavy lifting. If it's more than 5%, you may consider tuning your heap or digging further to find out where the allocations are occuring.
Next I would look for a bottleneck. Find out where your application is spending most of it's time, and see if you can somehow optimize that code.