- 同事有一个带有少量业务逻辑然后更新数据库某字段的需求(大约900万数据)
- 执行了几千条后,发现日志停住了。
- 使用jvisualvm查看GC,发现Old区和Eden区都已经满了
- 第一反应是可能存在内存泄漏,但是看到系统初始化参数里面最大堆内存大小只有512M,就觉得调大堆内存就应该可以了。
- 所以把堆内存大小调整为4G,Eden区2G,重启,正常运行了
- 第二天早上看日志,发现又停了,日志报内存溢出。查看GC,Old和Eden又满了
- 一定是有内存泄漏
- show me the code:
public class UpdateUtil {
private static final Logger logger = LoggerFactory.getLogger(UpdateUtil.class);
static String sql = null;
static Connection con = DBHelper.getDBHelper();
static ResultSet ret = null;
static PreparedStatement pst = null;
public static void