【问题标题】:joda time consume too much memoryjoda时间消耗太多内存
【发布时间】:2016-08-11 01:54:27
【问题描述】:

我在代码中使用 joda time。当我添加这行代码时,使用内存会增加30M!

LocalDateTime _currDate = new LocalDateTime();

我发现几乎所有的 java 程序员都推荐使用 joda time。所以我想也许我没有以正确的方式使用它。谁知道原因,请帮帮我。非常感谢!

【问题讨论】:

  • 您是查看 JVM 在操作系统中使用的内存,还是查看 JVM 中的内存使用情况?换句话说:你在看top 或任务管理器,还是在看 VisualVM?
  • @Barend 我使用任务管理器来监控内存使用情况。奇怪的是:当我添加这行代码时,我的应用程序崩溃了。我发现崩溃的原因是内存使用量达到了限制级别。当我评论这行代码时,我的应用程序运行良好。而且我在任务管理器中发现内存使用量减少了30M。

标签: java android jodatime


【解决方案1】:

JVM 非常复杂,仅仅因为您实例化了一个新对象并不意味着它会在该行代码处消耗内存。在某些情况下,即使您显式实例化它们,JVM 也永远不会为未使用的对象分配内存。 您需要使用内存分析器来查看到底发生了什么。 Joda 是一个构建良好的库,这个类实例化导致您的内存增加 30m 的可能性很小。 p>

一个好的分析器会向您显示该类消耗了多少内存、堆中发生了什么以及其他一些有用的见解。 可能只是 JVM 在堆上腾出更多空间来解决代码中发生的其他事情。

我相信其他人会加入一些好的分析器,但一些 IDE 会直接内置它们。从那里开始,祝你好运。

【讨论】:

  • 感谢您的回答。我使用任务管理器来监控内存使用情况。奇怪的是:当我添加这行代码时,我的应用程序崩溃了。我发现崩溃的原因是内存使用量达到了限制级别。当我评论这行代码时,我的应用程序运行良好。我在任务管理器中发现内存使用量减少了30M。你对此有什么想法吗?
  • 任务管理器不是一个好的指标。使用内存分析器。至于应用程序崩溃,您需要发布错误,因为它可能与内存问题无关。
【解决方案2】:

我找到了joda时间消耗内存的原因。这就是答案:Android Java - Joda Date is slow 根据plowman的解决方案,我解决了这个问题。

【讨论】:

    【解决方案3】:

    tl;博士

    java.timeback-port to Android 取代 Joda-Time

    java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date.Calendarjava.text.SimpleDateFormat

    现在在maintenance modeJoda-Time 项目也建议迁移到 java.time。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。

    大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7,并在 ThreeTenABP 中进一步适应 Android。

    你可能会看到这个库的不同内存使用情况,虽然我没有测试过。

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2016-06-29
      • 1970-01-01
      相关资源
      最近更新 更多