Excel中有500W数据,使用poi的sax模式逐行读取,然后批量插入到数据库。
测试代码未改动,仅设置JVM内存参数。
第一次不改动JVM,导入500W数据到数据库
耗时1分51秒
内存占用如下
第二次JVM内存最大、最小参数都设置为500M,此时耗时1分43秒,内存占用更是平均只有140MB!!
我已经凌乱了,到底是为什么呢?JVM内存设置的小了,占用的内存也跟着小了,而且时间上还相差无几,导入到数据库的效果也是一样成功。。
Excel中有500W数据,使用poi的sax模式逐行读取,然后批量插入到数据库。
测试代码未改动,仅设置JVM内存参数。
第一次不改动JVM,导入500W数据到数据库
耗时1分51秒
内存占用如下
第二次JVM内存最大、最小参数都设置为500M,此时耗时1分43秒,内存占用更是平均只有140MB!!
我已经凌乱了,到底是为什么呢?JVM内存设置的小了,占用的内存也跟着小了,而且时间上还相差无几,导入到数据库的效果也是一样成功。。
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
纯猜测:对于楼主的场景,大堆扩容消耗的时间,比小堆频繁 gc 的时间长。没了
其实还有一种可能:jvm 上执行代码耗时接近,但是第二次数据库那边状态更好于是就更快乐
结合楼主之前的两个问题 问题一 问题二,提一些事情: