`
benbenming
  • 浏览: 109531 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

StringWriter使用的困惑

阅读更多

使用Velocity的模版构建显示层或响应信息时,常常用到StringWriter这个类,或者是流。不过这个流比较特别,和ByteArrayInputStream和ByteArrayOutputStream相似,它们都可以在流对象执行了close方法后继续通过toString或toByteArray方法获取流中的数据,各种原因是在这些流中使用了缓存对象,关闭了流依然可以从缓存对象中获取数据;网上的一篇Java开发规范中也明确说明,上述这些流在使用时,可以不用像其他流那样一定要在finally方法中关闭流,以防资源泄露。可是我的问题出来了,那这个流对象的资源什么时候释放呢?最近的一次项目中,发现内存占用持续在高位运行,使用jprofile进行监控时,如果使用jprofile的垃圾回收功能进行强制的回收,内存居然能够回落到一个相当低的位置,但是如果不强制执行垃圾回收那么内存一直处于高位。后来,在关闭StringWriter对象之前,我调用了flush方法,再次进行测试时发现内存不再一直处于高位了!感觉很是奇怪。调用close方法时,会刷新流且释放资源,那么我显示调用一下flush方法真的会有那么大的作用吗?还在困惑中。

分享到:
评论
3 楼 543089122 2011-11-19  
543089122 写道
刚才看了下StringWriter的源码的flush和close2个方法如下,这2个方法根本什么都没做你还说你flush就有效果了 ,可笑
   public void flush() {

    }

 

    /***

     * Closing a <tt>StringWriter</tt> has no effect. The methods in this

     * class can be called after the stream has been closed without generating

     * an <tt>IOException</tt>.

     */

    public void close() throws IOException {

    }

2 楼 543089122 2011-11-19  
刚才看了下StringWriter的源码的flush和close2个方法如下,这2个方法根本什么都没做你还说你flush就有效果了 ,可笑
   public void flush() {
209
    }
210
 
211
    /***
212
     * Closing a <tt>StringWriter</tt> has no effect. The methods in this
213
     * class can be called after the stream has been closed without generating
214
     * an <tt>IOException</tt>.
215
     */
216
    public void close() throws IOException {
217
    }
1 楼 543089122 2011-11-19  
2B看源码不就都懂了。。。还一个劲的在那猜测

相关推荐

Global site tag (gtag.js) - Google Analytics