Java 如何设计极其高效的功能

Java 如何设计极其高效的功能,java,optimization,memory-management,Java,Optimization,Memory Management,我正在设计一个函数(Java方法),它将在移动设备上每秒执行40-80次 我希望避免在函数运行时(可能在应用程序的整个生命周期内)产生大量由GC收集的死变量 例如,在C语言中,我可能会使用volatile,以防止在每次执行函数时内存分配我的变量。。。我想用Java做一些类似的事情,但不知道如何做 该函数将数据存储在 一串 4个整数 2个一维字符串数组 通常,在Java中,使用上述变量但不在每次执行函数时重新分配它们(每秒40多次)的首选方法是什么 成员变量会“起作用”,但这是最好的解决方案吗

我正在设计一个函数(Java方法),它将在移动设备上每秒执行40-80次

我希望避免在函数运行时(可能在应用程序的整个生命周期内)产生大量由GC收集的死变量

例如,在C语言中,我可能会使用
volatile
,以防止在每次执行函数时内存分配我的变量。。。我想用Java做一些类似的事情,但不知道如何做

该函数将数据存储在

  • 一串
  • 4个整数
  • 2个一维字符串数组
通常,在Java中,使用上述变量但不在每次执行函数时重新分配它们(每秒40多次)的首选方法是什么

成员变量会“起作用”,但这是最好的解决方案吗

谢谢! 布拉德

  • 将这些字段包装在一个类{Java喜欢看到对象}中,分配一次并使用它
  • 在使用字符串数组时,请记住字符串池的概念

    • 我完全同意这个答案

      如果动态创建变量,那么每次调用函数都会分配更多内存,因为Java的GC在释放类时调用destroy之前不会完全清理变量


      但是,如果要多次调用该函数,那么只让它们成为类的成员变量也会起作用。

      可以使用静态变量,但前提是这些变量是常量,或者对它们的更改不会严重影响当前调用同一函数的其他线程


      如果您的代码必须是可重入的,并且静态变量不是选项,那么您可以创建一个简单的数据保持器对象来保存这些变量,并将其作为参数传递给您的函数。您的调用环境可以决定是否共享这些对象。

      静态成员变量,在卸载类之前不会卸载它们。请记住,如果该类的所有引用都丢失了,那么它可能会被GC’ed。我怀疑这在您的情况下会是一个问题,但是值得注意。此外,如果您正在创建包含静态成员变量的类的新实例,那么您将从一个分配位置坐在同一条船上。

      使用静态类字段,或者如果您打算只创建一个类实例,则普通成员变量将起作用

      如果需要更改字符串的内容,请考虑使用String Bu建器代替将创建/GC`Ed的不可变字符串实例。

      int是原语,所以它们不是问题


      您的字符串数组会很好,但请考虑您在其中添加了什么。你是在构造新的字符串对象并让旧的字符串对象进行gc吗?

      它必须是可重入的吗?好奇你在移动设备上每秒做40多次什么?@Brad:“变量”不是gc的:对象是。知道其中的差别很重要。80hz=12.5 ms/调用,因此我假设您的时间预算大约为1到5 ms。我会尝试干净地编写代码,然后在一个长循环中完全运行它。在运行它时,我会使用随机暂停技术来查看它的哪些部分可以改进。不知道你在做什么,但是1ms是一个相当健康的时间量。函数不会被同时调用,所以它不必是可重入的。-1。使用静态字段与分配的频率完全无关。唯一相关的是创建对象的频率(例如,使用
      new
      操作符的频率)@标记同样正确。检查我的回答静态表示它不会改变。问题是,变量是在每次调用函数的过程中计算出来的。@Brad..check now.static也解决了这个问题,但在这里它更适合作为ObjectOK。我喜欢将变量捆绑到类中的想法-保持整洁,并允许将来的增长(如多线程支持),我将阅读字符串池。谢谢