易截截图软件、单文件、免安装、纯绿色、仅160KB

发现Java虚拟机内存泄露问题

【IT168 文档
】内存
泄露问题对于程序来说,是一个很难发现,并且容易引起严重灾害的事情。
Java一直以其垃圾回收机制为自豪,那是否这种机制就是完美的呢。
  常规理解上,Java的内存
管理机制是将局部变量保存在堆中,当变量的作用域结束之后,该变量所占用的
内容会被自动回收。不需要做任何特殊的处理。比如下面的代码:
#div_code img{border:0px;}
public

class
JavaMemory{
      
private

final

int
dataSize
=
(
int
) (Runtime.getRuntime().maxMemory()
*

0.6
);      
public

void
f(){
          {
              
byte
[] data1
=

new

byte
[dataSize];
         }
          
byte
[] data2
=

new

byte
[dataSize];
      }

      
public

static

void
main(String[] args) {
          JavaMemoryPuzzle jmp
=

new
JavaMemoryPuzzle();
          jmp.f();
      }
  }

  在这个例子中,方法f()里定义了两个局部变量,变量data1和data2的作用域不同。按照正常
理解,虽然两各个数组所需要的内存
之和已经超过了可用内存
,但是因为data1会被及时回收,不会出现内存
溢出错误。
  如果我们实际执行这个例子,会发现出现了
java.lang.OutOfMemoryError错误。这是为什么?如果在BEA或者IBM的虚拟机上测试过这个例子,并不会出现错误。也就是
说,SUN的JVM在内存
回收机制上存在漏洞或者BUG。
 
 这个问题该如何修正呢,方法其实很简单。只需要在变量作用域结束之前,将变量置为空就可以了。修改之后的结果如下:
#div_code img{border:0px;}
public

class
JavaMemory{
      
private

final

int
dataSize
=
(
int
) (Runtime.getRuntim


相关文档:

java中如何使用amcharts


最近公司碰到需要用图表的形式显示一些数据,我就开始到网上查询,查到了jfreechart和amcharts,这两者我都实现过了,jfreechart最后生成图片,但是图片效果不是我想要的,然后又研究amcharts 它的效果确实很好,而且官方网站上还有好些例子可供下载,网址是:www.amcharts.com
(想要完成一个amcharts图形需要swfobjects. ......

【JAVA学习笔记】02 运算符、表达式

一、运算符
 
算术运算符:+,-,*,/,%,++,--
关系运算符:>,<,>=,<=,==,!=
布尔逻辑运算符:!,&,^,|,&&,||
位运算符:&,|,^,>>,<<,>>>
赋值运算符:=
扩展赋值运算符:+=,-=,*=,/=
字符串链接运算符:+
 
两数相除,那么如果 ......

【随笔】java 虚拟按键

import java.awt.Robot;
import java.io.IOException;
import java.lang.reflect.Field;
public class TestServer {
Class<?> key;
Robot ro;
{//非静态块用于初始化类类的非静态成员
try {
key = Class.forName("java.awt.event.KeyEvent");
ro = new Robot();
}
catch (Excep ......

java继承问题 经常遇到保存下来

import java.util.ArrayList;
import java.util.HashMap;

public class Client {

/**
* @param args
*/
public static void main(String[] args) {
test1();
System.out.println("==================================");
test2(); ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号