day2: 程序依然崩溃,现在只能是怀疑内存溢出的问题。
因此先修改最大内存大小,并添加 -XX:+HeapDumpOnOutOfMemoryError ,以便在发生outofmemoryError异常的时候,能够记录dump文件。
新修改的start.bat文件如下: java -Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump -jar -jar ./data-migration-2.jar
自测:
新增测试程序,不停的new对象
public void test() throws InterruptedException { List<SkuInfo> skuInfoList=new ArrayList<>(); while (true) { skuInfoList.add(new SkuInfo("test","2018-09-10")); Thread.sleep(1); System.out.println("创建一条"); } }
然后,把启动程序设置成最大15M内存,使用java VisualVM监视查看内存情况
java -Xmx15m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump -jar .man-yao-client-1.0-SNAPSHOT.jar
加载dump文件进行分析,可以看到skuinfo有86067个实例。