联系
我们
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

Java应用程序中的内存泄漏及内存管理

2014-08-17 11:47 出处:互联网 人气: 评论(
赖滢羽快播 899电影网 随便找快播 新版一代皇后大玉儿 泷泽萝拉种子qvod 波多结衣百度影音 赖滢羽qvod 杀人如麻百度影音 爱情公寓三百度影音 987dy电影 随便找影院 白蛇传刘涛版吻戏 龙泽罗拉第二部qvod 神仙老爸百度影音 小罗影视

不过,有一种简单的方法能够修复这种潜在的内存泄露——弱引用。我个人认为这是Java程序员都应该知道的特性。简单地说,弱引用在功能上和普通的引用一样,但它不会妨碍垃圾回收。因此JVM执行垃圾回收时,如果没有发现强引用,那么你就会发现弱引用会被置为null。要使用弱引用,我们可以将上面的代码改为:


本文由 ImportNew - 夏千林 翻译自 javacodegeeks。欢迎加入Java小组。转载请参见文章末尾的要求。
译文链接:
class ExampleWelcomePage extends WebPage { private final List<People> peopleList; public ExampleWelcomePage (PageParameters pageParameters) { peopleList = new Service().getWorldPhonebook(); } }

用户点击十次欢迎页面,就会在服务器硬盘上存储十份WorldPhoneBook拷贝。因此,在你使用Wicket开发应用时,务必要使用LoadableDetachableModels管理引用。


更多阅读:如果你想要了解由自定义类加载器所引起的另一种内存泄露,请参阅Zeroturnaround博客。

Java平台的一个突出的特性是自动内存管理。很多人把这种特性误读为Java没有内存泄露。然而,在我印象中,现代Java框架以及基于Java的平台并非如此。特别是Android平台,能举出很多反例。为了让大家对Java平台的内存泄露有一个初步的认识,我们先来看一个Java实现的栈:

不幸的是,应用程序核心类引用很容易被泄露到外部。你能看出下面的例子是如何泄露引用的吗?

幸运的是,这个内存泄露很容易修复:

[ 转载请保留原文出处、译者和译文链接。]
Web应用框架(特别是Wicket)

Web应用框架通常将半永久性的用户数据存放在Session中。你在Session中写入的任何数据都会在内存中滞留,而且滞留的时间无法确定。如果有一定数量的访问者在你的Session中“乱扔垃圾”,运行Servlet容器的JVM早晚会挂掉。因此,你谨慎管理引用的另一个极端案例就是Wicket框架:Wicket框架会将用户的所有访问序列化成历史版本。这种过分简单的设计意味着,如果某个访问者点击十次欢迎页面,Wicket框架会在硬盘默认路径下序列化十个对象。Wicket页面对象持有的所有对象引用都会和页面对象一起被序列化到硬盘上,所以在管理引用时必须格外小心。

出于这个原因,我建议Android开发者避免使用匿名类。

相关文章

分享给小伙伴们:
本文标签:

更多文章

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

Copyright © 2002-2014 版权所有