How you ask? I followed
this guide to increase performance and find memory leaks.
That guide actually has a few problems/incorrect things.
Notably:
1. The "SpawnPoint Leak" is not a leak (java doesn't work that way)
2. "Storing too much information" is inconsequential. Consider loading string data of 30,000 objects from the wz file. Then you will be using 30000 * 100 extra bytes (and that's VERY generous!), which is 2.86mb more. You should not care about 2.86mb of lost memory over the lifetime of your server, and if you do, then you are looking at the wrong places and prioritizing the wrong things.
3. In the "Other things that can improve performance", 3 isn't always true, 5 isn't always true, and 6 doesn't affect performance.
The other things are good, especially the things about Map saving leak and Timers issue (both of those are pretty bad problems). I can't speak for the scripting thing.
If you don't know how to find memory leaks even after that guide, use Netbeans profiler to run your server and it will show where your java code is using a lot of memory, and it will be highlighted red if it's a memory leak.
You can also use their in-built clean up button to remove all the unnecessarily used memory. However, using this will not prevent it from happening again.
I am doubtful of this. I haven't profiled something in a long time and don't remember anything about red highlighting, but if it's new then it probably has something to do with surviving generations, and not everything that survives several generations is a memory leak. You should be very cautious with this.
You should be looking at the profiler as a reference, and heap dumps are very useful too.