Something to understand about JVM memory characteristics: They are very greedy. It is pretty standard to include in the JVM startup the starting memory the process should take and the maximum memory that the process can take. However, what Java then tends to do (and this behavior will vary between version of the JVM) is consume the available memory until it is full, and then garbage collect. It may garbage collect earlier, but it won't be as aggressive, because it has more memory available. When it does the "stop the world" garbage collection once it has hit max memory it can typically free up a lot of memory (50% is not unusual) however, the jvm doesn't give that memory back to the operating system. It just holds on to it until it needs it.
There are some who claim that this isn't an issue because the operating system will simply put that memory in swap space on disk and it will not get in the way if the java process doesn't need it. That has not been my observation. First, until the big garbage collection, the memory isn't really free, and can be quite fractured, making it impossible to effectively swap it away. And second, even after the garbage collection, I have seen at least on windows real OS memory starvation because of the JVM.
See this question for some advice on how to reclaim memory for the OS in such a scenario. I don't know much about pmap, but it is likely extra memory that the JVM either used and freed, or requested from the OS because it was running low but hasn't used yet. (The comment suggests I really don't know anything about pmap, which is entirely true, but I stand by the rest of the answer in regard to the underlying problem of "where my memory has gone for a java process running in linux.")