post = getPost();
jdbcTemplate.query(query, ps -> {
ps.setInt(1, post.getEventId());
ps.setInt(2, post.getUserId());
})
Будет ли при каждом вызове этого куска создаваться и аллоцироваться новый объект?
Если бы не было захватывания скоупа от post, могло ли это быть соптимизировано как-нибудь?
Почему ты волуешься о микро оптимизации? Возможно это будет как-то соптимизированно, без гарантий, причём использование post в лямбде вряд-ли сильно повлияет. В идеале - зайти в исходники JdbcTemplate#query и посмотреть что и как там происходит. PreparedStatement-ы создаются на каждый connection заново. JdbcTemplate, если я правильно помню, connection у DataSource каждый раз заново просит, и значит надо заново делать Connection#prepareStatement. Другое дело, что некоторые умные пулы соединений (например как в ЖБоссе) умеют в рамках одного соединения кешировать preparedstatement-ы, и де-факто новый создан не будет. Но это может вызвать неприятные "утечки" памяти.
Обсуждают сегодня