Closed whojes-toss closed 3 months ago
3.5.14
It's not a bug, but memory resources can be reduced by fixing it i guess
https://github.com/mybatis/mybatis-3/blob/b044200be1895a390727c2b2565bae862b4aac6f/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java#L783-L795
In this code block, constructor.getParameterTypes() method is called so much, which clones objects causing memory waste.
constructor.getParameterTypes()
private boolean applyColumnOrderBasedConstructorAutomapping(ResultSetWrapper rsw, List<Class<?>> constructorArgTypes, List<Object> constructorArgs, Constructor<?> constructor, boolean foundValues) throws SQLException { for (int i = 0; i < constructor.getParameterTypes().length; i++) { Class<?> parameterType = constructor.getParameterTypes()[i]; String columnName = rsw.getColumnNames().get(i); TypeHandler<?> typeHandler = rsw.getTypeHandler(parameterType, columnName); Object value = typeHandler.getResult(rsw.getResultSet(), columnName); constructorArgTypes.add(parameterType); constructorArgs.add(value); foundValues = value != null || foundValues; } return foundValues; }
so i suggest this:
private boolean applyColumnOrderBasedConstructorAutomapping(ResultSetWrapper rsw, List<Class<?>> constructorArgTypes, List<Object> constructorArgs, Constructor<?> constructor, boolean foundValues) throws SQLException { Class<?>[] parameterTypes = constructor.getParameterTypes(); // called once at the beginning for (int i = 0; i < parameterTypes.length; i++) { Class<?> parameterType = parameterTypes[i]; String columnName = rsw.getColumnNames().get(i); TypeHandler<?> typeHandler = rsw.getTypeHandler(parameterType, columnName); Object value = typeHandler.getResult(rsw.getResultSet(), columnName); constructorArgTypes.add(parameterType); constructorArgs.add(value); foundValues = value != null || foundValues; } return foundValues; }
Hello @whojes-toss ,
Looks reasonable. For a proper review, could you submit a pull request?
MyBatis version
3.5.14
DefaultResultSetHandler
It's not a bug, but memory resources can be reduced by fixing it i guess
https://github.com/mybatis/mybatis-3/blob/b044200be1895a390727c2b2565bae862b4aac6f/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java#L783-L795
In this code block,
constructor.getParameterTypes()
method is called so much, which clones objects causing memory waste.so i suggest this: