Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的内存使用和垃圾收集_Java_Garbage Collection_Local Variables - Fatal编程技术网

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

Java中的内存使用和垃圾收集,java,garbage-collection,local-variables,Java,Garbage Collection,Local Variables,我读过很多关于java内存使用的文章 我的问题指向游戏制作。 在创建二叉树的过程中,每一帧我最多调用500次方法。 每个节点将调用一个函数并创建10个局部变量 对于内存使用和/或垃圾收集器来说,创建一个单独的类来保存所有需要的变量、实例化它一次并给每个节点一个对此对象的引用更好吗 如果我的第一个问题实际上更好,那么从一个单独的对象调用.getSomething()是否比将想要得到的东西存储在自己的对象中更“昂贵” 谢谢大家! 根据经验,创建的对象越少,对GC的压力就越小。因此,如果应用程序中的每

我读过很多关于java内存使用的文章

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

  • 对于内存使用和/或垃圾收集器来说,创建一个单独的类来保存所有需要的变量、实例化它一次并给每个节点一个对此对象的引用更好吗
  • 如果我的第一个问题实际上更好,那么从一个单独的对象调用.getSomething()是否比将想要得到的东西存储在自己的对象中更“昂贵”

    谢谢大家!

  • 根据经验,创建的对象越少,对GC的压力就越小。因此,如果应用程序中的每个“节点”都需要访问同一组值,那么将这些值放在一个对象中肯定比反复为每个节点分配它们要好
  • 很可能不是。如果经常执行这些调用,JIT编译器很可能会内联这些调用
  • 正如您在问题的注释中所提到的,本地原语变量将在堆栈上分配,并且不会进行垃圾收集。在某些情况下,由于JIT编译器的转义分析技术,甚至可以在堆栈上分配对象

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

  • 根据经验,创建的对象越少,对GC的压力就越小。因此,如果应用程序中的每个“节点”都需要访问同一组值,那么将这些值放在一个对象中肯定比反复为每个节点分配它们要好
  • 很可能不是。如果经常执行这些调用,JIT编译器很可能会内联这些调用
  • 正如您在问题的注释中所提到的,本地原语变量将在堆栈上分配,并且不会进行垃圾收集。在某些情况下,由于JIT编译器的转义分析技术,甚至可以在堆栈上分配对象

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

    局部变量存储在调用堆栈上,并在方法返回时立即释放。因此,他们没有资格获得GC。当然,这并没有说明局部变量引用的任何对象,但它们如何受GC影响完全取决于对对象的引用有多少种不同,因此如果没有更多的信息就不可能说。局部变量存储在调用堆栈上,并在方法返回时立即释放。因此,他们没有资格获得GC。当然,这并没有说明由局部变量引用的任何对象,但它们如何受GC影响完全取决于有多少不同的对象引用,因此如果没有更多的信息就不可能说。