Java中的内存使用和垃圾收集

时间:2017-08-14 18:47:18

标签: java garbage-collection local-variables

我已经阅读了很多关于java中内存使用情况的内容。

我的问题指向游戏制作。 在我创建二叉树时,每个帧我都会调用方法达500次。 每个节点都将调用一个函数,并将创建10个局部变量。

  1. 内存使用和垃圾收集器是否更好地创建一个包含所有必需变量的单独类,实例化一次并为每个节点提供对该对象的引用?
  2. 如果我的第一个问题实际上更好,那么从一个单独的对象调用.getSomething()比存储你想要在自己的对象中得到的东西更“昂贵”吗?

    谢谢大家!

1 个答案:

答案 0 :(得分:0)

  1. 根据经验,您创建的对象越少,您对GC的压力就越小。因此,如果每个"节点"在您的应用程序中需要访问同一组值,将这些值放在一个对象中肯定比为每个节点一遍又一遍地分配它们更好。
  2. 很可能不是。如果经常执行,JIT编译器很可能会内联这些调用。
  3. 正如您的问题的评论中所提到的,本地原语变量将在堆栈上分配,不受垃圾回收的影响。在某些情况下,由于JIT编译器的转义分析技术,甚至可以在堆栈上分配对象。

    一般来说,如果您真的想了解应用程序在GC和分配方面的行为方式,您应该对其进行分析(例如使用Java Flight Recorder&#39的分配配置文件)并查看GC日志。 此外,您应该根据这些结果而不是过早地调整应用程序。