最大应用程序内存_我的应用程序浪费了多少内存?

最大应用程序内存

在1970年代初期,1 MB的内存成本为100万美元。 现在,没有比较; 1 MB是该成本的一小部分。 这是工程师和企业不再担心内存的原因之一。 1970年代的100万美元相当于今天的几百万美元。 这就是为什么记忆在过去是如此珍贵。 保罗·艾伦(Paul Allen)的自传详细介绍了这一挑战。 Paul Allen谈到了他和Bill Gates在编写4 KB以下的BASIC程序时遇到的困难。

有4种主要的计算资源:

  1. 中央处理器
  2. 记忆
  3. 网络
  4. 存储

您的应用程序可能在数十甚至数千个应用程序服务器实例上运行。 您的应用程序实例首先使用哪个资源?

对于大多数应用程序,它是内存 。 CPU始终为30 – 60%。 总有充足的存储空间。 很难使网络饱和(除非您的应用程序正在流式传输视频内容)。 因此,对于大多数应用程序来说,首先是内存饱和。 即使CPU,存储和网络未充分利用,您最终也会由于内存变得饱和而置备越来越多的应用服务器实例。 这会使组织的计算成本增加到数百万美元。

还请参见:

另一方面,由于效率低下的编程实践,现代应用程序毫无例外地浪费了30%至90%的内存。 以下是业界遵循的九种不同做法,它们会导致内存浪费:

  1. 字符串重复
  2. 收款效率低下
  3. 复制物件
  4. 复制数组
  5. 低效的数组
  6. 等待完成的对象
  7. 盒装数字
  8. 对象标头引起的开销
  9. 内存大小设置错误

如果您可以消除30%至90%的内存浪费,它将为您的企业带来两个主要优势:

  1. 降低计算成本:由于内存是第一个达到饱和的资源,因此,如果可以减少内存消耗,则可以在较少数量的服务器实例上运行应用程序。 您也许可以减少30 – 40%的服务器。 因此,您的管理层可以减少其数据中心(或云托管提供商)成本,维护和支持成本的30 – 40%。 仅此一项就可以节省数百万或数十亿美元。
  2. 更好的客户体验:如果减少为服务传入请求而创建的对象数量,则响应时间将大大缩短。 由于创建的对象较少,因此在创建和垃圾回收上花费的CPU周期更少。 减少响应时间将改善客户体验。
还请参见:

我的应用程序浪费了多少内存?

因此,现在让我们回到本文的原始问题:“我的应用程序浪费了多少内存?”。 这很可悲,但确实如此:行业中没有多少工具可以为您提供答案。 有一些工具可以回答以下问题:“我的应用程序使用了多少内存?” 例如TOP,应用程序性能监视(APM)工具,Nagios等。 使用不同于浪费。 但是我们将通过两个简单的步骤来帮助您回答这个问题。

第1步:捕获堆转储

为了分析内存的浪费方式,首先需要捕获堆转储。 堆转储基本上是应用程序内存的快照。 它具有内存中存在的所有对象,正在引用它的对象等信息。

几个选项可从Java应用程序捕获堆转储 。 还有一些选项可以从Android应用程序捕获堆转储。

您应该使用最适合您和您的应用程序的选项。

建议在应用程序传输流量时捕获堆转储。 当应用程序空闲时,将不会创建新对象,因此您将无法看到实际上浪费了多少内存。

步骤2:使用HeapHero工具进行分析

捕获堆转储后,可以将捕获的堆转储上载到免费的在线堆转储分析工具HeapHero

根据您的应用程序,堆转储可以包含PII数据和其他敏感数据。 在这种情况下,您可以在此处注册以在计算机中本地下载并安装HeapHero工具。

该工具将提供浪费的内存总量,导致内存浪费的实际数据以及触发此内存浪费的代码行的高级摘要。 它甚至建议解决问题的解决方案。

记忆

图1:摘要显示总共浪费了多少内存

还请参见:

HeapHero创建一个饼图,该饼图总结了由于每种低效率的编程实践而浪费了多少内存。 显然,此应用程序浪费了35%的内存。 造成这种浪费的最主要的两个原因是:

  1. 收集效率低下(即数据结构)导致11.5%的内存浪费。
  2. 字符串重复导致10.4%的内存浪费。

记忆

图2:由于重复的字符串而浪费了内存

在此应用程序中,有343,661个字符串对象实例。 其中只有144,520个是唯一的。 显然,有6147个“ webservices.sabre.com”字符串对象实例。 为什么会有这么多重复项? 为什么还没有清除它以释放更多的内存?

记忆

图3:由于收集效率低下而浪费的内存

在此应用程序中,HashMap的34%不包含任何元素。 这就引出了一个问题,即为什么创建了这么多没有任何元素的HashMap。 创建HashMap时,默认情况下会创建16个元素。 当您没有在其中插入任何元素时,会浪费为这16个元素分配的空间。 有趣的是,Hashtable的97%也不包含任何元素。

记忆

图4:源于重复字符串的代码行

还请参见:

结论

HeapHero的此工具不仅显示浪费内存的对象,还显示触发内存浪费的代码路径。 这些知识将使工程师更容易在应用程序的正确部分进行正确的修复。

祝您编程愉快,编码愉快!

翻译自: https://jaxenter.com/much-memory-application-wasting-151801.html

最大应用程序内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值