JAVA内存溢出异常解决方案2008-09-10 15:06:46 来源:不详 作者:佚名
一 调整 虚拟机参数 二 立即 释放无用的对象 三 利用序列化和反序列化技术 下面是具体的代码实现 package com.free; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; /** * @author free * springcomingagain@gmail.com */ public class OutMemorySolution { /*** * Change JVM Arguments * 调整 虚拟机参数 * * * * First Try * * -Xloggc:gc.log * -Xms256M * -Xmx256M * * throw java.lang.OutOfMemoryError: Java heap space * * * Second Try * * -Xloggc:gc.log * -Xms512M * -Xmx512M * * */ public static void changeJVMArguments() { long startTime = System.currentTimeMillis(); System.out.println("Start : " + startTime); List list = new ArrayList(0); for (int i = 0; i < 5000000; i++) { list.add(new BigInteger("1000000")); } long endTime = System.currentTimeMillis(); System.out.println("End.. : " + endTime + " Cost : " + (endTime - startTime)); } /** * Release Object Immediate * 立即 释放无用的对象 * * * Release Object * * * //First Release Object * BigInteger temp1 = null; * for (int i = 0; i < 1200000; i++) { * temp1 = array1[i]; * temp1 = null; * array1[i] = null; * } * array1 = null; * ... * //Second Release Object * temp1 = null; * for (int i = 0; i < 1200000; i++) { * temp1 = array2[i]; * temp1 = null; * array2[i] = null; * } * array2 = null; * * */ public static void releaseObjectImmediate() { long startTime = System.currentTimeMillis(); System.out.println("First Start : " + startTime); BigInteger[] array1 = new BigInteger[1200000]; for (int i = 0; i < 1200000; i++) { array1[i] = new BigInteger("10000000"); } // First Release Object BigInteger temp1 = null; for (int i = 0; i < 1200000; i++) { temp1 = array1[i]; temp1 = null; array1[i] = null; } array1 = null; long endTime = System.currentTimeMillis(); System.out.println("First End.. : " + endTime + " Cost : " + (endTime - startTime)); // do something start // do something end.. startTime = System.currentTimeMillis(); System.out.println("Second Start : " + startTime); BigInteger[] array2 = new BigInteger[1200000];
|
|
||||
|
|
||||
|
|
|
||||
|
|
||||
|
|
|
||||
|
|
||||
|
|