易截截图软件、单文件、免安装、纯绿色、仅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


相关文档:

JNA实现Java调用Fortran

在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_, ......

Java通过Samba服务操作Linux共享文件


首先在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 ......

Thinking in java 之复用类 final关键字

      现在我就给大家介绍一下final关键字相关的一些东西~~~
     1,final数据
          在Java中,向编译器告知一块数据是恒定不变的,这类常量必须是基本数据类型,并且以关键字final表示,在对这个常量进行定义的时候, ......

Java 调用 .Net Web Service 问题解决方法分享

有很长一段时间没有写博客了。最近一年,收到不少交流邮件都是关于webservice,大部分都是素要webservice实例。
其实对webservice 了解不是很深,只是根据工作需要去接触,去学习。最近项目和其他一个.net项目需要做数据交互,交互方式就采用Webservice.
特将开发中遇到的问题总结并分享;
开发中遇到的问题有:
1)jav ......

Java日期格式化常用方法

Java中Date类中的一些日期格式话方法都已过期,所以不推荐使用。
一般格式化时,常用到这两个类:Calendar
和SimpleDateFormat
,使用方法如下:
1.Calendar类
Calendar类是abstract的,所以实例化方式得用静态方法:
Calendar c = Calendar.getInstance();,
此时的生成的实例依据的是当前系统时间;c.setTime(java ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号