如何掌握Java内存(并保存程序)

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用!

您花了无数小时来研究Java应用程序中的错误并在需要的地方获得其性能。 在测试期间,您注意到应用程序随着时间的推移逐渐变慢,完全崩溃或表现不佳。 您遍历代码,并确保您没有错过任何可能导致这些问题的内容。 最终,您承认自己正在处理内存泄漏。 Java的垃圾收集器会尽力帮助解决这些泄漏,但是当您遇到重大问题时,它只能做很多事情。 您需要一种方法来确定导致内存泄漏的原因,解决该问题的方法以及理解Java垃圾回收在整个应用程序性能中所扮演的角色。

Java内存泄漏的主要症状

您遇到几种症状,表明该应用程序存在内存泄漏问题。 与突然失败相反,总体应用程序性能的缓慢下降强烈表明内存泄漏。 每次您运行该应用程序时,或者仅当您开始使用更多数据或开始扩展它时,才可能出现此问题。 由于内存泄漏耗尽了所有可用资源,您的应用程序可能会显示内存不足错误。 您可以重新启动该应用程序并希望获得最好的效果,但是在解决漏洞之前,您将遇到多次崩溃。 通常,当对象引用累积而不是释放时,您将处理内存泄漏。 它们占用了您的可用内存,使您的应用程序无法访问所需的资源。

看起来像内存泄漏的配置错误

在研究Java内存问题和分析之前,请确保您没有处理完全不同的问题。 一些内存不足错误是由各种原因引起的,例如配置错误。 您的应用程序可能缺少正确的堆大小或与系统上的其他应用程序冲突。 如果您开始解决内存不足的问题,但无法找出导致内存泄漏的原因,请重新看一下您的应用程序。 您可能会发现需要更改终结器线程或增加永久生成空间。

内存监视工具的好处

内存监视工具使您可以更好地了解Java应用程序如何使用可用资源。 您可以采取此步骤来缩小导致内存泄漏和其他性能问题的根本原因。 该软件分为几类,您可能需要使用多个应用程序才能找出问题所在,是否正在处理内存泄漏以及如何开始解决该问题。

堆转储文件为您的Java内存分析提供了必要的输出。 您可能需要使用两种工具:一种用于生成转储文件,另一种用于有意义的分析。 该解决方案为您提供了有关应用程序运行情况的详细视图。 一旦工具突出显示了潜在的问题区域,就可以精确地缩小问题发生的范围。 现在,是时候进行冗长而令人沮丧的部分了:反复试验。 您的内存分析工具可能表明您的代码存在多个问题,但您不确定它们是否会导致性能影响。 如果您一次更改所有内容,那么您将无法确切知道应用程序会遇到什么问题。 更糟糕的是,您可能会引入全新的错误,并且必须重新开始该过程。

一次进行一次更改,然后尝试重复该错误。 您可能需要让应用程序运行一段时间才能复制原始错误条件。 如果您的内存泄漏在第一次测试中消失了,请不要忘记在负载下对其进行测试。 您的应用程序在处理少量数据时可能会正常工作,但在处理大型数据集时会遇到相同的问题。 如果仍然遇到相同的错误,请从头开始,并攻击另一个可能的原因。

在使应用程序完美运行之后,内存监视工具被证明很有用。 您可以远程监视JVM性能,并在遇到问题之前主动解决问题,收集历史性能数据以帮助您将来改善编程工作,并观察Java在重负载下的运行方式。 一些解决方案包括警报和其他警报,因此您可以立即知道出现问题的瞬间。 您不希望关键任务应用程序崩溃并由于停机而造成数万美元的损失,因此这些工具会增加响应时间。 您的内存监视软件还使您可以立即开始诊断过程,而无需在没人告诉您确切的错误代码或办公室发生的问题时就去现场。

如果您经常遇到Java应用程序的内存和性能问题,请仔细检查测试过程。 找出过程中的任何薄弱环节并更改测试策略。 与其他Java程序员接触,并比较质量检查最佳做法。 有时,您可能会忽略代码的一小部分,并对整个应用程序产生长期影响。

垃圾回收在Java内存和内存泄漏中的作用

Java的垃圾回收在您的应用程序性能和内存使用中起着关键作用。 该程序搜索不再使用的对象并将其删除。 这些无效对象不再占用内存,因此您的应用程序继续拥有可用资源。 有时,您的应用程序没有给GC足够的时间或资源来清除死对象,这些死对象会堆积。 您还可能遇到这样的情况,即您对假定为无效的对象有有效的引用。 垃圾收集器对此无能为力,因为它的自动内存管理会跳过活动对象。 通常,GC会自动运行,但是您可能需要调整其行为以适应具有挑战性的内存问题。 但是,GC可能会独自导致性能问题。

GC世代

GC将对象分为不同的世代以优化收集。 年轻的一代代表着很快消失的物体。 GC通常在这一代上运行,因为它通常必须清理对象。 存活超过一定阈值的物体会逐渐进入老一代。 这些对象停留的时间更长,因此GC不会频繁运行。 但是,当GC确实在这些对象上运行时,您的应用程序将经历一项主要操作,在该操作中,收集器将查看您的活动对象以删除垃圾。 您的应用程序有最后一代:永久一代。 通常,这些对象包括必要的JVM元数据。 在这一代中,您不会产生很多垃圾,但是在程序不再需要类之后,您的应用程序可能需要GC删除它们。

GC与响应时间之间的联系

垃圾收集,无论是次要的还是主要的,都将停止应用程序线程,直到它们完成该过程。 这称为“停止世界”事件。 单个新一代GC不会显着影响性能,但是如果您的客户流失率很高,则会遇到问题。 您最终会遇到次要GC持续运行或您的旧一代以不可持续的速度增长的情况。 您需要平衡年轻一代GC的频率和性能,这可能需要增加年轻一代的规模。

老一代和永久一代的GC会对您的应用程序性能和内存使用产生重大影响。 这个主要的GC操作遍历整个堆,以取出死对象。 该过程比次要GC持续时间更长,因此对性能的影响持续时间更长。 当您的客户流失率较高且老一代较大时,您的整个应用程序就会被Stop the World事件所困扰。

GC优化需要监视程序运行的频率,总体性能影响以及如何调整应用程序以减少此频率。 您可能需要确定同一对象被分配多次,远离应用程序不必要的分配,或者找到阻碍整个系统的阻塞点。 要获得正确的平衡,就必须密切注意从CPU负载到GC周期的各个方面,尤其是在年轻一代和老一代频率不平衡的情况下。

解决内存泄漏和优化垃圾回收可以帮助您提高Java应用程序的性能。 您需要处理很多活动部件,但是通过使用正确的故障排除方法和分析工具来提供强大的可见性,您可以深入解决问题,而不必再遇到频繁的性能问题。

适当的内存分配和监视在Java应用程序中起着至关重要的作用。 您需要完全掌握GC,对象删除,内存泄漏和性能之间的相互作用,以优化您的应用程序并避免遇到内存不足错误。 内存监视工具可让您始终关注潜在问题并确定使用趋势,因此您可以采用主动方式而不是被动方式进行故障排除。 内存泄漏通常难以解决,特别是如果您因配置错误而误报,但是尽早处理内存问题可以避免以后出现更大的问题。 掌握Java内存和GC,使您的整个编程生活变得更加轻松。

AppDynamics通过跟踪内存结构来支持自动JVM泄漏检测–在代码级深度监视生产应用程序。 开始免费试用!

翻译自: https://www.javacodegeeks.com/2016/06/master-java-memory-save-programming.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序集版本号

程序集版本号分为4段,例如1.0.4.23。 第一段为主版本号,项目一但启动则不会更改。 第二段为次版本号,在项目功能做较大调整时增加,增量为1。 第三段为修订版本号,通常在解决缺陷或者细微功能变化时增加,增量…

py-kms使用方法

搭建py-kms服务器,先下载py-kms https://github.com/myanaloglife/py-kms 启动py-kms服务(需要服务器安装有python): python server.py 这样py-kms服务就启动好了,如果需要后台运行可以制作deamon脚本。 py-kms可以激活企业/专业版vl windows系统和vol版本的office软件: window…

JAVA泛型--待续

原做法&#xff1a; Map m new HashMap();m.put("key", "blarg");String s (String) m.get("key"); 泛型做法&#xff1a; Map<K,V> m new HashMap()<K,V>;m.put("key", "blarg");//非<K,V>类型无法操…

Tortoise SVN 版本控制常用操作知识

Tortoise SVN 版本控制常用操作知识 Posted on 2010-11-26 23:07 szh114 阅读(5897) 评论(0) 编辑 收藏 今天老大跑过来问我如何把SVN服务器上的当前版本回退到某一个版本上去&#xff0c;我没回答上来&#xff0c;很失败&#xff0c;所以现在整理一下Tortoise SVN的操作知识&…

如何导入任何JBoss BRMS示例项目

在过去几周内&#xff0c;JBoss BRMS演示的用户反复询问我以下内容时&#xff0c;会给您这些提示和技巧&#xff1a; “如何将与各种JBoss BRMS演示项目相关的项目导入到我自己的现有安装中&#xff1f;” 这意味着用户希望在产品的个人安装中有一个示例项目&#xff0c;而无…

2110: 扫雷

http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id2110 2110: 扫雷 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 88 Solved: 36[Submit][Status][Web Board]Description 扫雷游戏你一定玩过吧&#xff01;现在给你若干个nm的地雷阵&#xff0c;请你计算出每个矩阵中每…

使用eclipse生成文档(javadoc)

使用eclipse生成文档&#xff08;javadoc&#xff09;主要有三种方法&#xff1a; 1&#xff0c;在项目列表中按右键&#xff0c;选择Export&#xff08;导出&#xff09;&#xff0c;然后在Export(导出)对话框中选择java下的javadoc&#xff0c;提交到下一步。 在Javadoc Gene…

青椒苗

转载于:https://www.cnblogs.com/wainiwann/p/8793418.html

更改日志级别_如何在运行时更改日志记录级别

更改日志级别在运行时中更改日志记录级别非常重要&#xff0c;这主要在生产环境中非常重要&#xff0c;在生产环境中&#xff0c;您可能希望在有限的时间内进行调试日志记录。 好了&#xff0c;更改根记录器非常简单–假设您有一个具有所需记录级别的输入参数&#xff0c;只需…

JDBC和Ibatis中的Date,Time,Timestamp处理

JDBC和Ibatis中的Date,Time,Timestamp处理 November 25th, 2010西坪 Leave a commentGo to comments在此前&#xff0c;遇到过使用Ibatis操作Oracle时时间精度丢失的问题&#xff0c;昨天又遇到JDBC操作MySQL时间字段的问题&#xff0c;从网上看到各种式样的解释这些问题的博文…

每日算法之抽签

X星球要派出一个5人组成的观察团前往W星。其中&#xff1a;A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。....那么最终派往W星的观察团会有多少种国别的不同组合呢&#xff1f;下面的程序解决了这个问题。数组a[] 中既是每个国家可以派出的最多的名额。程序执…

如何开始Java机器学习

什么是开始使用Java机器学习的最佳工具&#xff1f; 他们已经存在了一段时间&#xff0c;但如今看来&#xff0c;每个人都在谈论人工智能和机器学习。 对于科学家和研究人员而言&#xff0c;它已不再是秘密&#xff0c;几乎可以在任何新兴技术中实现。 在下面的文章中&#x…

keil中关于使用_at_绝对地址定位问题

keil中关于使用_at_绝对地址定位问题 2008-01-07 13:46:26| 分类&#xff1a; MCU51 | 标签&#xff1a; |字号大中小 订阅 在网上看到有人提到在keil中使用_at_进行绝对地址定位问题&#xff0c;我简单介绍一下它的用法。 使用_at_关键字对存储器进行绝对地址定位程序…

ztree树

常规的ztree树 后台数据封装成list对象 public PageModel getTreeBuildingRegData(Map<String, String> params) {PageModel pageModelnew PageModel();String statusparams.get("status");String orgIdparams.get("org_id");List<OmsBuildingReg…

如何提高效率

如何提高效率 时间管理 April 28th, 2011 本文来自读者 桃雨 翻译投稿。 Aaron Swartz写过一篇很有名的文章&#xff0c;叫做《HOWTO: Be more productive》&#xff08;如何提高效率&#xff09;。这篇文章写的实在是太好了&#xff0c;我看了好多遍&#xff0c;很赞同作者的…

Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 1. 机器学习的实用层面)...

第1周 机器学习的实用层面 1.1 训练/开发/测试 早期机器学习时代&#xff08;数据规模较小&#xff09;&#xff0c;如果不需要dev set&#xff0c;常见的划分有 70%/30% 的训练/测试 划分&#xff0c;如果需要验证集&#xff0c;常见的是 60%/20%/20%划分 在big data era&…

jms 如何测试_使用JMSTester对JMS层进行基准测试

jms 如何测试对于我去过的大多数客户端&#xff0c;使用ActiveMQ扩展JMS消息传递层是一个优先事项。 有多种方法可以实现这一目标&#xff0c;但毫无疑问&#xff0c;创建基准并分析实际硬件上的体系结构&#xff08;或者正如我的同事Gary Tully所说的“询问机器”&#xff09;…

为什么待办事项清单不管用

为什么待办事项清单不管用 时间管理 November 22nd, 2012 本文原文来自 Harvard Business Review&#xff0c;由 换装迷宫tayy 翻译。 停止制作你的待办事项清单吧。它们只会让你感觉失败和受挫。想想你正在管理的那些待办清单&#xff1a;有多少事项从年初起就已经在那儿了&…

charts 画饼图

统计某一天某类物体的百分比 新知识点&#xff1a;aggregate https://blog.csdn.net/congcong68/article/details/51619882 主要的 $group $match $sort $limit pipeline [{$group:{_id:$area,count:{$sum:1}}}, # count 是聚合之后新增的一个字段。{$sort:{count:1}}, # …

Apache Camel 2.18 –即将推出的功能的亮点

骆驼骑士正在忙于即将发布的Apache Camel 2.18版本。 当我们动态更新发行说明时 &#xff0c;这是一种快速查看即将发生的情况的方法。 我只是想在夏天在这里进行快速更新&#xff0c;到目前为止&#xff0c;我们已经完成了简短的重点介绍。 随着发行版的临近和文档的完善&…