Intellij或者Eclipse导出可运行jar包运行比IDE里慢的一种原因

Intellij或者Eclipse导出可运行jar包运行比IDE里慢的一种原因

现象

最近在写一个百亿级数据库导出程序的时候,发现代码在IED(Eclipse或者Intellij)中导出一个测试的百万级数据库只要36秒,然而当打成jar包单独运行的时候,发现同样的数据量却需要240秒。
大致代码如下:

 				String p = path + "/" + exportFileName;
                logger.info("开始写入文件:" + p);
                File file = new File(p);
                fos = new FileOutputStream(file);
                writer = new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8));
                while (!work.isStop) {
                    String data = queue.take();
                    if (data.length() == 0) {
                        break;
                    } else {
                        writer.write(data);
                    }
                    work.writedCount++;
                    System.out.printf("\r%4s", "当前写入:" + work.writedCount);
                }

查找原因

一开始怀疑是IED里的java运行环境做了做了特别的优化,然后在启动单独jar包时加入jvm优化参数,加大内存,依然无法解决,后来怀疑是打出的jar包的问题,然后更换打包方式更换IDE,结果还是一样。这个时候开始怀疑是代码原因导致回头看代码,直接看for循环里的代码,发现也只有System.out.printf("\r%4s", “当前写入:” + work.writedCount);这一句和环境有关。在IED中运行输出在内建的控制台,而单独运行是用DOS的控制台输出。

解决方法

删除这句输出语句就好了,运行速度也达到了预期,另外当前的状态可以另起一个线程做处理这种情况下对性能毫无影响,具体原因没有办去验证,猜测不同平台实现的输出方法不一致,DOS的输出比较耗时,避免类似问题记录下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值