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];

 
9 7 3 1 2 3 4 8 :



本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203