报错1:mybatis拼接过多
java
java.lang.OutOfMemoryError: GC overhead limit exceeded
具体报错:
java
nested exception is org.apache.ibatis.builder.BuilderException:
Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'.
Cause: org.apache.ibatis.ognl.OgnlException:
sqlSegment [java.lang.OutOfMemoryError: GC overhead limit exceeded
一看报错内容,有builder,expression,sqlSegment,ognl,就可以推测出,应该是mybatis拼接条件太多,导致内存超了。例如条件in里,code太多,或者id太多。
oracle官方对 java.lang.OutOfMemoryError: GC overhead limit exceeded 解释如下:
java
Exception in thread thread_name:
java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause:
The detail message "GC overhead limit exceeded" indicates that
the garbage collector is running all the time
and Java program is making very slow progress.
After a garbage collection,
if the Java process is spending more than approximately 98% of its time doing garbage collection
and if it is recovering less than 2% of the heap
and has been doing so far the last 5 (compile time constant) consecutive garbage collections,
then a java.lang.OutOfMemoryError is thrown.
This exception is typically thrown
because the amount of live data barely fits into the Java heap having little free space for new allocations.
Action: Increase the heap size.
The java.lang.OutOfMemoryError exception for GC Overhead limit exceeded can be turned off with the command line flag -XX:-UseGCOverheadLimit.
大致意思是说:
频繁的进行内存回收(最起码已经进行了5次连续的垃圾回收),JVM就会曝出java.lang.OutOfMemoryError: GC overhead limit exceeded错误。
解决的办法是:
增加堆大小,启动脚本添加参数-Xmx1024m。
或者 关闭GC Overhead limit:-XX:-UseGCOverheadLimit
但由于这是代码本身引起,而非内存不够的问题。所以不建议去改动堆参数或者关闭GC上限。
具体参考
报错2:
占位符
===================分割线=======================
文章到此已经结束,以下是紫薯补丁
java.lang.OutOfMemoryError: GC overhead limit exceeded
nested exception is org.apache.ibatis.builder.BuilderException:
Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'.
Cause: org.apache.ibatis.ognl.OgnlException:
sqlSegment [java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread thread_name:
java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause:
The detail message "GC overhead limit exceeded" indicates that
the garbage collector is running all the time
and Java program is making very slow progress.
After a garbage collection,
if the Java process is spending more than approximately 98% of its time doing garbage collection
and if it is recovering less than 2% of the heap
and has been doing so far the last 5 (compile time constant) consecutive garbage collections,
then a java.lang.OutOfMemoryError is thrown.
This exception is typically thrown
because the amount of live data barely fits into the Java heap having little free space for new allocations.
Action: Increase the heap size.
The java.lang.OutOfMemoryError exception for GC Overhead limit exceeded can be turned off with the command line flag -XX:-UseGCOverheadLimit.