为了账号安全,请及时绑定邮箱和手机立即绑定

为什么设置了heap最大内存为4096之后,只用了2048就内存溢出

为什么设置了heap最大内存为4096之后,只用了2048就内存溢出

梦里花落0921 2019-04-10 13:15:38
数据库有六十万数据,要进行批量更新执行程序报错java.lang.OutOfMemoryError: Java heap spaceidea内存已改-Xms1024m-Xmx4096m-XX:ReservedCodeCacheSize=1024m设置了heap最大内存为4096之后使用visualVM查看内存发现只用了2048就溢出了,,为啥没到4096呢。代码如下@Testpublic void testDBUpdateBatch() throws SQLException {     //三十万数据     //OK,查询数据用时:235  OK,查询数据用时:348  OK,查询数据用时:214     //OK,用时:6389         OK,用时:5179        OK,用时:5737     //OK,查询数据用时:165     //OK,用时:47915   大量时间消耗在for语句里面随机赋值     Connection conn = DBUtil.getConnection();     PreparedStatement psmt = null;     Long startTime1 = System.currentTimeMillis();     Statement stmt = DBUtil.getConnection().createStatement();     ResultSet rs = stmt.executeQuery("select id from Table1 where id > 7");     List<Integer> list = new ArrayList<>();     while(rs.next()){//如果对象中有数据,就会循环打印出来    //     System.out.println(rs.getInt("id")+","+rs.getString("column2"));         list.add(rs.getInt("id"));     }     Long endTime1 = System.currentTimeMillis();     System.out.println("OK,查询数据用时:" + (endTime1 - startTime1));     Long startTime = System.currentTimeMillis();     Random random =new Random();     float min = 1f;     float max = 100000000f;     try {         conn.setAutoCommit(false);         String sql = "update Table1 " +                 "set idn = ? ,column2 = ? ,column2n = ? ,column3 = ?,column3n = ?,column4 = ?,column4n=?,column5=?,column5n=?,                 column6=?,column6n=?,column7=?,column7n=?,column8=?,column8n=?,column9=?,column9n=?,column10=?,column10n=?,                 column11=?,column11n=? " +                 "where id = ?";         psmt= conn.prepareStatement(sql);
查看完整描述

4 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

4096是你这个脚本的最大内存。
怎么说呢,举例子吧,比如你有个一个中等的锅做菜。然后你看了下实际的食材,你说这些食材一个大锅是可以装得下的,于是你就做菜了。但是菜做完你懵逼了,我这个菜给配置的大锅,是完全可以装下的啊,但是为什么还漏出来了呢?原因很明显,因为实际上你只有一个中等的锅,没有大锅。但是你只看到了你计划里用到的大锅,你没看到你实际上只有个中等锅。就是这样,如果实际上你也有个大锅的话,按理来说应该是不会漏出来的。

查看完整回答
反对 回复 2019-05-14
?
Qyouu

TA贡献1786条经验 获得超11个赞

额,眼瞎,没看到Max值。最好获取内存溢出时的日志分析具体原因。


查看完整回答
反对 回复 2019-05-14
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

最好获取内存溢出时的内存日志进行分析,这样更好确定原因

查看完整回答
反对 回复 2019-05-14
  • 4 回答
  • 0 关注
  • 1384 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信