当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [闲聊]突然之间一个jvm方面的疑问
帖子发表于 : 2008-04-28 14:41 

注册: 2007-10-28 11:35
帖子: 69
送出感谢: 0 次
接收感谢: 0 次
假定情况:
有一个Test类,main方法是无限循环的,比如while(true){},在终端A上 java Test
现在开一个终端B,killall java
那么终端A执行的java程序就会被kill掉。

疑问就是,这会Test类占用的堆空间被标识为空闲了吗?
我已经尽力的搭建一个没有任何活动程序的环境,减少对内存的读写,影响判断。
3个终端。
在终端A执行java Test
终端B执行tail -Fn100 /proc/meminfo(没用top,用top他老变)
在终端C执行killall java

但是终端B的数值一直没变。

希望各位兄弟给予解惑


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:07 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10116
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 128
kill 本身会完成进程的资源释放,这个是由操作系统完成的,基本上不可能出现内存泄露的现象,也就是进程关闭后,内存并未回收的现象基本不太可能。资源可以使用free查看。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:13 

注册: 2007-10-28 11:35
帖子: 69
送出感谢: 0 次
接收感谢: 0 次
oneleaf 写道:
kill 本身会完成进程的资源释放。可以使用free查看。


感谢回复 ^_^
刚才又测试了一下。

他没执行我覆盖的finalize(),free的数值还是没变(第2次测试空闲内容反而变小了,囧)

linux下面一个进程结束后,操作系统是不是立即标识进程占用的内存空间为空闲呢?

理论上来说类占用的堆空间都是jvm向操作系统申请的,jvm结束后,应该也会释放相应的堆空间才对

但是找不到什么证明的方法来证明这一点。

要不。。。我用jdbc建立一个Connection到数据库,再kill掉jvm,再上数据库看连接数?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:18 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
代码:
watch free


这样可以看到内存的实时变化


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:35 

注册: 2007-10-28 11:35
帖子: 69
送出感谢: 0 次
接收感谢: 0 次
谢谢楼上各位。
代码:
public static void main(String [] args) throws Exception{
                List list = new ArrayList();
                for(int i=0;i<10000;i++){
                        list.add(new Date());
                }
                Thread.sleep(1000000*10000);
        }


代码:
public static void main(String [] args) throws Exception{
                Thread.sleep(1000000*10000);
        }

来比较了一下,排除了jvm自身的内存占用。从而得出kill的时候会释放类对象占用的内存空间,嘿嘿


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:50 
头像

注册: 2006-10-25 18:10
帖子: 2677
地址: 长沙
送出感谢: 0 次
接收感谢: 0 次
Java 程序的运行,内存也是由操作系统来分配的。Linux 下面不会有进程结束但内存不释放的情况。


_________________
你是自由的。别人也是。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-04-28 15:53 

注册: 2007-10-28 11:35
帖子: 69
送出感谢: 0 次
接收感谢: 0 次
yiding_he 写道:
Java 程序的运行,内存也是由操作系统来分配的。Linux 下面不会有进程结束但内存不释放的情况。


僵死的算运行结束么- -||


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译