poi利用sax解析百万数据Excel的JVM内存占用问题?-灵析社区

庆广大

Excel中有500W数据,使用poi的sax模式逐行读取,然后批量插入到数据库。 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241123/048811fade46dadbbbfcfb0599da4b32.png) 测试代码未改动,仅设置JVM内存参数。 **第一次不改动JVM,导入500W数据到数据库** 耗时1分51秒 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241123/d52c20f1cf28175c78dd749eefec4f1c.png) 内存占用如下 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241123/3ce30985c5a56f962771da1c59b0eee5.png) **第二次JVM内存最大、最小参数都设置为500M,此时耗时1分43秒,内存占用更是平均只有140MB!!** ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241123/3ff491e528116462f3e2ae9c42faf56b.png) ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241123/908e209745dd3840c5044026a918524f.png) 我已经凌乱了,到底是为什么呢?JVM内存设置的小了,占用的内存也跟着小了,而且时间上还相差无几,导入到数据库的效果也是一样成功。。

阅读量:20

点赞量:0

问AI
纯猜测:对于楼主的场景,大堆扩容消耗的时间,比小堆频繁 gc 的时间长。没了 其实还有一种可能:jvm 上执行代码耗时接近,但是第二次数据库那边状态更好于是就更快乐 结合楼主之前的两个问题 "问题一" (https://segmentfault.com/q/1010000044367428) "问题二" (https://segmentfault.com/q/1010000044367604),提一些事情: 1. 还是老问题,测试次数太少了,就一次的数据不能说明问题,起码重复个十次再说。测试方式也不严谨,插数据库这个动作对测试结果的影响最大同时很不稳定且基本无法控制 2. 建议楼主学习一下 jvm 内存管理的相关知识,了解一下 吞吐量响应时间的取舍,大堆小堆的性能特性还有其他的一堆巴拉巴拉