一、遇到的问题
Caused by: java.lang.OutOfMemoryError: PermGen space
at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:160)
at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:44)
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:123)
at org.apache.ibatis.builder.xml.dynamic.DynamicContext$ContextMap.get(DynamicContext.java:89)
at org.apache.ibatis.builder.xml.dynamic.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:107)
at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1657)
at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:92)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210)
at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:49)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210)
at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:56)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:333)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:413)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:395)
at org.apache.ibatis.builder.xml.dynamic.OgnlCache.getValue(OgnlCache.java:42)
二、解决办法
此错误为内存溢出错误,是方法区(永久代)内存溢出!由于 JDK 自带的虚拟机为 HotSpot,且其支持内存区域的动态扩展,因此可以通过设置虚拟机参数来扩展方法区的内存大小。
设置tomcat:
-Xms,表示程序启动时,JVM 堆的初始化最小尺寸参数;
-Xmx,表示程序启动时,JVM 堆的初始化最大尺寸参数;
-XX:PermSize,表示程序启动时,JVM 方法区的初始化最小尺寸参数;
-XX:MaxPermSize,表示程序启动时,JVM 方法区的初始化最大尺寸参数。
对于本例中的错误,实际上,只需要扩展方法区的虚拟机参数即可。