java内存问题-java开发java经验技巧

java内存问题-java开发java经验技巧

ID:30777872

大小:48.50 KB

页数:6页

时间:2019-01-03

java内存问题-java开发java经验技巧_第1页
java内存问题-java开发java经验技巧_第2页
java内存问题-java开发java经验技巧_第3页
java内存问题-java开发java经验技巧_第4页
java内存问题-java开发java经验技巧_第5页
资源描述:

《java内存问题-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java内存问题-编程开发技术Java内存问题木文由ImportNew・Kevin_007翻译自apmblogo欢迎加入翻译小组。转载请见文末要求。在Java中,内存泄霜和其他内存相关问题在性能和口J扩展性方面表现的最为突出。我们有充分的理由去详细地讨论他们。Java内存模型——或者更确切的说垃圾回收器——已经解决了许多内存问题。然而同时,也带來了新的问题。特別是在有着大量并行用户的J2EE运行环境下,内存越来越成为一种至关重耍的资源。乍看之下,这似乎有些奇怪,因为当前内存已经足够廉价,并且我们也有了64位的JVM和更先进的垃圾冋收算法。接卜•來,我们将会仔细的讨论一下

2、关于匕阳内存的问题。这些问题可以分为四组:•在Java中,内存泄露-般都是山于引用对象不再被使用而造成的。当有多个引用的对彖,同时这些对彖又不再需耍,然而开发者又忘记清理它们,这时极容易导致内存泄露的发生。•执行消耗太多的内存而导致不必要的高内存占用。这在为了用户体验而管理大虽状态信息的?Web?应用中很常见。随着活跃用户数最的增加,内存很快到达了上限。未绑定或低效缓存配置是持续高内存占用的另一來源。•当用户负载增加时,低效的对象创建容易导致性能问题。从而垃圾回收器必须不断地清理堆内存。而这导致了垃圾回收器对CPU产生了不必要的高占用。随着CPU因垃圾回收而被阻塞,应用

3、程序响应时间频繁的增加,导致其一直处于中等负载Z下。这种行为也成为4tGC?trashingMo•低效的垃圾回收行为往往是山于垃圾回收器的缺失或者错误的配置。这些垃圾回收器将会时刻追踪对彖是否被清理。然而这种行为如何以及何时发生必须由配置或者程序员,或者系统架构师决定的。通常,人们只是简单地“忘记"了正确的配置和优化垃圾冋收器。我曾参加过一些关于“性能"的专题讨论会,发现一个简单的参数变化将会导致高达25%的性能提升。在大多数情况下,内存问题不仅影响性能,还会影响可扩展性。每次请求消耗的内存数量越高,用户或Session可以执行的并行事务就越少。在某些情况下内存问题也影

4、响可用性。当JVM耗尽了内存或者即将接近内存极限,这个时候它将退出并报OutOfMcmory错谋。这时经理会来到你的办公室,你就知道R己摊上大事了。内存问题很难被解决通常冇两个原因:?第一,某些情况下分析很复杂,也很困难,特别是如果你缺少正确的方法来解决他们;其次,他们通常是应用程序的架构基础。简单的代码更改不会帮助解决他们。为了使开发过程更容易,我会展示一些实际应用中常被使用的反模式。这些模式已经能够在开发过程中避免内存问题。HTTPSession作为缓存此反模式是指滥用HTTPSession对象作为数据缓存。session对象的存在是为了存储信息,这个信息里面存在着

5、一个HTTP请求。这也称为一个Session状态。这意味着,数据将被保存直至它们被处理。这些方法通常存在于一些重要的web应用程序小。web应用程序除了在服务器上存储这些信息外,没有别的方法。然而,一些信息是能够存储在cookie中,但是这将会带来一些其他的影响。在cookie中,尽可能地保持少而短的数据,这是非常重要的。有时候很容易发生这种现象,session里存储着成兆字节的数据对象。这将会立即导致堆栈高占用和内存短缺。同时并行用户的数量非常有限,JVM将应对越來越多出现OutOfMcmoryError错谋的用户。多数用户Session也有其他性能损失。集群场景的s

6、ession复制屮,这将会增加序列化和沟通工作将导致额外的性能和可伸缩性问题。在某些项口屮这些问题的解决方案是增加数量的内存和切换到64位jvmo他们无法抵抗住仅仅壇加几个G大小的堆栈内存的诱惑。然而,与其提供一个对真正问题的解决方案,不如隐藏这个现象。这个“解决方案”只是暂时的,同时还会引入了一个新的问题。越来越大的堆内存使它更难以找到“真正的”内存问题。对这种非常大的堆(大约6G)来说,大部分可用的分析工具是无法处理这些内存垃圾。我们在dynaTrace投入了大量的研发工作希望能够有效地分析大量的内存垃圾。随着这个问题变得越來越重要,一种新的JSR规范也提到了它。由

7、于应用程序架构尚未明确,导致Session缓存问题经常岀现,。在开发过程小,数据被轻松而乂简单的放入session当中。这是经常发生的,类似于一种"add?and?forget"方式,即没有人能够确保当这种数据不再需要时是被移除的。通常,当session超吋吋不需要的session数据应该被处理。在企业中,一些应用程序常常大量使用Session超时,这将会导致无法正常工作。此外经常使用非常高的Session超时-?24小时为用户提供额外的“体验”,使他们不必再次登录。举一个实际的例子,从session里的数据库列表中选择所需要的数据。其目

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。