Java内存从简单上讲,应该分为三个区域,Level 1缓存,Level 2缓存以及perm区域。Level 1缓存满了,则触发partial gc;Level 2缓存满了,则触发full gc;perm区域则是class定义的常驻区域。
-Xms和-Xmx限定的应该是Level 1 cache + Level 2 cache + perm size的大小。
Sun的java虚拟机有专门的参数,你可以看到虚拟机的垃圾收集信息,你可以看一下。
至于是5%,还是10%,个人感觉不太重要。理解了两层的垃圾收集机制才是问题的关键,性能调优时也基本上足够了。
GC在网上有很多英文文章进行讨论,你可以看看。