发现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
相关文档:
最近公司碰到需要用图表的形式显示一些数据,我就开始到网上查询,查到了jfreechart和amcharts,这两者我都实现过了,jfreechart最后生成图片,但是图片效果不是我想要的,然后又研究amcharts 它的效果确实很好,而且官方网站上还有好些例子可供下载,网址是:www.amcharts.com
(想要完成一个amcharts图形需要swfobjects. ......
首先在Linux上创建一个共享文件夹
mkdir /home/user/share
用root用户启动samba服务
service smb start
修改smb.conf文件
sudo gedit /etc/samba/smb.conf 或者 vi /etc/samba/smb.conf
[share]
path = /home/user/share
...
writable = yes
创建共享用户并设置密码
sudo useradd smbusr
sudo smbpasswd -a s ......
// 合并 List 中的相同数据行
// Source : tmpOrderEntryListBeanList
// Target : resultOrderEntryListBeanList
// ------------------------------------------------------------------
// (1)将结果赋给 Result Livon 2010-5-18 三
// 整理列表,以便查询库存。
private List<OrderEntryListBe ......
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。
这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。
在当前 ......
Java中Date类中的一些日期格式话方法都已过期,所以不推荐使用。
一般格式化时,常用到这两个类:Calendar
和SimpleDateFormat
,使用方法如下:
1.Calendar类
Calendar类是abstract的,所以实例化方式得用静态方法:
Calendar c = Calendar.getInstance();,
此时的生成的实例依据的是当前系统时间;c.setTime(java ......