堆溢出测试: @VM args:-verbose:gc -Xms20M -Xmx20M -XX:+PrintGCDetails
栈层级不足探究: @VM args:-Xss128k
常量池内存溢出: @VM args : -XX:PermSize=10M -XX:MaxPermSize=10M
方法区溢出测试,使用技术 CBlib: @VM args : -XX:PermSize=10M -XX:MaxPermSize=10M
直接内存溢出测试:@VM args: -Xmx20M -XX:MaxDirectMemorySize=10M
如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots 的引用链。于是就
能找到泄漏对象是通过怎样的路径与GC Roots 相关联并导致垃圾收集器无法自动回收
它们的。掌握了泄漏对象的类型信息,以及GC Roots 引用链的信息,就可以比较准确
地定位出泄漏代码的位置。
如果不存在泄漏,换句话说就是内存中的对象确实都还必须存活着,那就应当检查
虚拟机的堆参数(-Xmx 与-Xms),与机器物理内存对比看是否还可以调大,从代码上
检查是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期
的内存消耗。