论坛首页 Java企业应用论坛

关于java堆栈溢出的那些事

浏览 25849 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-03  
teasp 写道
jrockit免费的?太好了,这个工具在linux下能用不?

另外,楼主这句“用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的”是严重错误的。

这个概念我还真的是很模糊,因为在调试的时候我发现有些变量new了,然后没有让他置为null,确实是不给回收的,所以才写了那么句话。。。
希望你能给解释一下。。。我不太懂java的内存回收机制。
0 请登录后投票
   发表时间:2009-09-03   最后修改:2009-09-04
死活要安它的jvm怎么办,不安它的jvm好使不?









http://www.pricecome.com
0 请登录后投票
   发表时间:2009-09-03  
pricecome 写道
死活要安它的jvm怎么办,不安它的jvm好使不?









pricecome.com

主要是你安也要安不安还是要安啊,他的安装程序里面就已经集成了啊。。。
0 请登录后投票
   发表时间:2009-09-03  
jinyanhui2008 写道

在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。

用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。


不是很明白你这句话中的全局变量指的是什么。如果指的是对象范围内的全局变量,那么在这个对象没有被外部引用的时候,gc应该会处理好这些关系。没有被gc回收的原因肯定是你这个变量指向的对象还存在其他的引用,用static修饰的也一样,除非你用的是static final修饰。

 

0 请登录后投票
   发表时间:2009-09-03  
hsbljyy 写道
jinyanhui2008 写道

在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。

用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。


不是很明白你这句话中的全局变量指的是什么。如果指的是对象范围内的全局变量,那么在这个对象没有被外部引用的时候,gc应该会处理好这些关系。没有被gc回收的原因肯定是你这个变量指向的对象还存在其他的引用,用static修饰的也一样,除非你用的是static final修饰。

 

是啊,太具体的也没有深入研究,肯定是还有其他地方在引用,我也说不上来是为啥,做程序员坐久了有的时候就没时间去深究了,已解决问题为最终目标了。

我说的那段话,因为我开始是每次用用到那个变量或者类的时候都去new一下,而且那个东西可能会频繁的访问,所以造成了资源的很大浪费,所以才写了上面的那段话。

0 请登录后投票
   发表时间:2009-09-03   最后修改:2009-09-03
jinyanhui2008 写道
hsbljyy 写道
jinyanhui2008 写道

在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。

用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。


不是很明白你这句话中的全局变量指的是什么。如果指的是对象范围内的全局变量,那么在这个对象没有被外部引用的时候,gc应该会处理好这些关系。没有被gc回收的原因肯定是你这个变量指向的对象还存在其他的引用,用static修饰的也一样,除非你用的是static final修饰。

 

是啊,太具体的也没有深入研究,肯定是还有其他地方在引用,我也说不上来是为啥,做程序员坐久了有的时候就没时间去深究了,已解决问题为最终目标了。

我说的那段话,因为我开始是每次用用到那个变量或者类的时候都去new一下,而且那个东西可能会频繁的访问,所以造成了资源的很大浪费,所以才写了上面的那段话。

 

 

“用完的变量一定要记得让它等于null”,你写这句话的时候是否考虑过会给很多人造成误解?

 

依稀记得Thinking in Java里面是这样说的,让变量等于null(也就是让这个引用指向null,不在引用这个对象),如果这个对象没有被其他地方使用,JVM就会在适当的时候回收对象。等于null并不回收,执行gc()也并不是说一定进行回收,只是建议垃圾回收机制回收,在Java里是无法人为控制垃圾回收的。

 

并不是所有对象不再使用时,就把引用指向null。没有建议这样做,也没有必要这样做。什么时候让一个引用指向null,不是有出栈进栈这个例子吗。

0 请登录后投票
   发表时间:2009-09-04  
jrockit 看起来挺不错的工具,学习一下
0 请登录后投票
   发表时间:2009-09-04  
jrockit确实不错,听说性能比JDK要好65%,特别是在内存处理方面。
不过没敢用在生产环境,感觉不是特别的稳定。
用它来查查问题,运行一些测试程序还是不错的。
0 请登录后投票
   发表时间:2009-09-04  
teasp 写道
jrockit免费的?太好了,这个工具在linux下能用不?

另外,楼主这句“用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的”是严重错误的。


看楼主的截图, jrockit是基于eclipse平台开发的RCP程序,肯定可以在linux下使用。
去找找看。应该有linux的下载链接的
0 请登录后投票
   发表时间:2009-09-04  
jinyanhui2008 写道
hsbljyy 写道
jinyanhui2008 写道

在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。

用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。


不是很明白你这句话中的全局变量指的是什么。如果指的是对象范围内的全局变量,那么在这个对象没有被外部引用的时候,gc应该会处理好这些关系。没有被gc回收的原因肯定是你这个变量指向的对象还存在其他的引用,用static修饰的也一样,除非你用的是static final修饰。

 

是啊,太具体的也没有深入研究,肯定是还有其他地方在引用,我也说不上来是为啥,做程序员坐久了有的时候就没时间去深究了,已解决问题为最终目标了。

我说的那段话,因为我开始是每次用用到那个变量或者类的时候都去new一下,而且那个东西可能会频繁的访问,所以造成了资源的很大浪费,所以才写了上面的那段话。


可能会频繁访问?我想知道你说的这个变量是Java的8种基本类型还是类对象,为什么频繁访问,如果是类对象,那么该对象有没有状态?个人感觉你说的还是太泛了,没有说到点上。至于你说的每次使用就new一个对象这种问题,可以参考数据库连接池的设计理念来解决。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics