【问题标题】:How is it possible to avoid making garbage in Java?如何避免在 Java 中制造垃圾?
【发布时间】:2016-05-03 22:22:34
【问题描述】:

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

http://www.coralblocks.com/

我找到了这个网站,它告诉他们正在制作一个 Java 工具和库,这些工具和库根本不会产生任何垃圾。我想得到一些关于它怎么可能的合乎逻辑的解释。

【问题讨论】:

  • 是的。这叫营销。统计流行语的数量。
  • 你的问题不错(毕竟他们提出了一个非常离谱的说法),但它不属于这里。也许programmers.se 可能更合适。
  • @Tunaki 但这是“零垃圾”营销……
  • 您已经成功了,内存管理“在某些情况下可能有点效率低下”。现在考虑不惜一切代价避免垃圾的算法“在更多情况下可能效率更低”。
  • @gyurix:这是二十年前的神话。不惜一切代价避免垃圾意味着执行您自己的内存管理,如果您做得对,您可能会与内置内存管理器相提并论,但没有理由为什么您的自定义内存管理应该更好。首先,垃圾本身并不意味着成本。实际成本是平均 remaining 对象的数量(必须遍历并复制到幸存者空间)乘以循环数。如果没有剩余对象,则产生大量垃圾可能会免费触发大量循环。

标签: java memory memory-management garbage-collection garbage


【解决方案1】:

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

所有 Coral Blocks 组件在关键路径中为 GC 产生零垃圾。

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

在 Coral Blocks,我们使用 Java 作为语法语言。我们的库零外部依赖,我们甚至不依赖 JDK 标准库。使用 CoralFIX,您可以完全控制关键路径。

【讨论】:

    【解决方案2】:

    其实关于CoralFIX的文章说:

    零垃圾:所有 Coral Blocks 组件在关键路径中为 GC 产生零垃圾。

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

    还有……

    在 Coral Blocks,我们使用 Java 作为语法语言。

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


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

    理论上可以,但实际上可能不行。您需要替换 Java SE 库(和第 3 方库)的大量功能,以致于编写应用程序会更好1 使用不同的编程语言。

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

    【讨论】:

    • 他们在他们的网站上声称他们已经开发了复杂的交易算法、FIX 引擎和无垃圾的高性能 http 服务器。看起来他们正在使用 CoralBits 而不是 JDK 标准库或任何其他产生垃圾的第三方库。
    【解决方案3】:

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

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

    • 池化和重用一些对象引用。
    • 在堆外分配大块数据并手动管理它们。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2015-07-05
        相关资源
        最近更新 更多