如何避免在 Java 中制造垃圾?

How is it possible to avoid making garbage in Java?

据我所知,Java没有任何管理内存的方法,因为整个内存管理是由内置的运行垃圾收集器自动完成的,这可能有点低效在某些情况下。

http://www.coralblocks.com/

我找到了这个网站,它告诉我们他们正在制作一个 java 工具和库,它们可以工作而不会产生任何垃圾。我想就这怎么可能得到某种合乎逻辑的解释。

完全停止产生垃圾是不可能的,除了某些特定任务和内存极其受限的系统外,尝试优化垃圾产生还为时过早。大量任务会导致某种分配。

然而,垃圾可以通过以下方式减少但不能消除:

  • 汇集并重新使用一些对象引用。
  • 在堆外分配大块数据并手动管理它们。

事实上,关于 CoralFIX 的文章说:

Zero Garbage: All Coral Blocks components produce zero garbage for the GC in the critical path.

这与说零垃圾完全不同。而且它只能在相对较小的 class 应用程序中实现(对于 Coral);即基于消息的系统,您可以通过就地匹配消息缓冲区中的字节来完成所有工作。只要您需要使用普通数据结构或(大多数)标准库 classes,您就会生成对象。

还有...

At Coral Blocks we use Java as a syntax language.

换句话说,Coral Blocks 应用程序员不需要编写 Java 代码!


是否可以编写代码来做同样的事情?

理论上是的,但实际上可能不是。您需要替换 Java SE 库(和第 3 方库)的大部分功能,因此您最好编写应用程序1 使用不同的编程语言。

1 - 我想,如果您的应用程序很简单并且对 Java SE 和外部库的依赖性很小,那么这样做是可行的。但很少有非平凡的应用程序是这样的。

http://www.coralblocks.com/index.php/2015/10/is-coralfix-the-fastest-and-easiest-to-use-fix-engine/

All Coral Blocks components produce zero garbage for the GC in the critical path.

我的猜测。预分配缓冲区,无 String 个对象。正如他们所说:

At Coral Blocks we use Java as a syntax language. Our libraries have zero external dependencies and we don’t even rely on the JDK standard libraries. With CoralFIX you have total control over the critical path.

你无法避免在 java 中产生垃圾,但你可以减少它。好的和高效的代码通常不会留下任何未使用的变量。避免制造垃圾的一种方法是注意未使用的东西。