JVM memory usage is more than just the heap size. See this post:
http://www.coderanch.com/t/111262/Linux-UNIX/read-memory-usage-process-running#560894
You have to determine which area is consuming that memory
Here's a discussion on thread memory usage:
http://community.jboss.org/message/568878#568878