【问题标题】:BlackBerry memory usage黑莓内存使用情况
【发布时间】:2012-04-08 08:31:48
【问题描述】:

我正在寻找有关移动设备(尤其是黑莓)内存使用的建议。使用一些分析工具,我们计算出 RAM 中的工作集大小为 525kb。问题是我们真的不知道这是可以接受的还是太高了?

任何人都可以深入了解他们自己在 BlackBerry 上使用内存的经验吗?我们应该瞄准什么样的数字?

我也想知道我们应该特别注意哪些事情来减少内存使用。

【问题讨论】:

    标签: memory blackberry java-me


    【解决方案1】:

    512KB 在当前的黑莓设备上是完全可以接受的。您可以查看JBenchmark 以查看您可以为每个模型所期望的确切 JVM 堆,但目前没有任何设备低于 20MB 的堆。大多数都比这大得多。

    在 JBenchmark 上,您可以从页面右侧的下拉列表中选择您感兴趣的设备。然后,导航到设备的 JVM 选项卡。

    在减少内存使用量方面,如果您真正内联 525K,我不会担心此应用程序使用的总字节数,只关心需要分配/重新分配的频率。尽量池化/重用对象,避免任何不必要的分配。例如,使用 StringBuffer 类而不是运算符来连接字符串,因为将使用运算符为每个连接创建多个 String 对象,其中 StringBuffer 只会将字符放入数组中,并且仅在需要时扩展。 Google 是查找更多提示的好方法。

    最后,依靠 BlackBerry JDE 拥有的分析工具是准确了解如何优化堆内存使用的非常重要的部分。

    【讨论】:

    • 感谢一些有用的 cmets Fostah。我想指出的一件事是,在许多情况下,编译器会将字符串连接转换为 StringBuffer,我经常发现调试器进入 StringBuffer 方法,而我自己的代码中没有类似的东西。
    • 这很有趣。我对黑莓平台还是比较陌生。我花费了大量时间进行通用 J2ME 编程,但您并不总是能从每个制造商那里看到这些有用的优化。
    • 我不确定是哪个编译器进行优化,我们有一个三步构建过程,首先使用 WTK javac,然后使用 ProGuard 进行混淆和优化,然后使用 rapc 编译器。可能是其中任何一个,但我的赌注是 ProGuard 或 rapc。
    • 哦,是的,这是有道理的,因为新版本的 ProGuard 在底层做了很多优化。
    • 所有 Java 编译器都会将单个 表达式 中的一系列字符串连接转换为 StringBuffer 连接(如果目标是 Java 5+,则为 StringBuilder)。 RIM 的 rapc 依赖于您的 java SDK 的 javac,因此这是在代码到达 BlackBerry 编译器之前自动完成的。仅当您通过多个语句不断添加到字符串时,字符串连接才会成为问题。例如,在循环中总是如此,这就是为什么您应该小心循环中的字符串操作。
    【解决方案2】:

    如果我没记错的话,Blackberry 应用程序是用 Java 编写的……这是一个托管环境,这意味着使用更少内存的唯一可靠方法是创建更少的对象。我认为,您对工作集无能为力,因为它是由运行时管理的(这实际上可能是在此类设备上使用 Java 的重点)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2012-05-30
      • 2021-02-26
      • 2010-10-24
      • 2015-06-14
      相关资源
      最近更新 更多