Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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_Memory_Memory Management_Garbage Collection_Garbage - Fatal编程技术网

如何避免在Java中产生垃圾?

如何避免在Java中产生垃圾?,java,memory,memory-management,garbage-collection,garbage,Java,Memory,Memory Management,Garbage Collection,Garbage,据我所知,Java没有任何管理内存的方法,因为整个内存管理都是由内置的自动运行的垃圾收集器完成的,在某些情况下可能会有点低效 我发现了这个网站,它告诉我他们正在制作一个java工具和库,它可以在不产生任何垃圾的情况下工作。我想从逻辑上解释一下这是怎么可能的。完全停止创建垃圾是不可能的,除了某些特定任务和内存极度受限的系统之外,尝试优化垃圾创建还为时过早。大量任务将导致某种类型的分配 但是,可以通过以下方式减少但不能消除垃圾: 共享和重新使用某些对象引用。 从堆外分配大数据块并手动管理它们。 事实

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


我发现了这个网站,它告诉我他们正在制作一个java工具和库,它可以在不产生任何垃圾的情况下工作。我想从逻辑上解释一下这是怎么可能的。

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

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

共享和重新使用某些对象引用。 从堆外分配大数据块并手动管理它们。
事实上,这篇文章说:

零垃圾:所有Coral块组件在关键路径中为GC生成零垃圾

这和说零垃圾完全不同。对于珊瑚来说,这是可以实现的,只是在一个相对较小的应用类别中;i、 e.基于消息的系统,您可以通过在消息缓冲区中的字节上进行就地匹配来完成所有工作。只要您需要使用普通的数据结构或大多数标准的库类,您就会生成对象

而且

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

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

是否可以编写代码来执行相同的操作

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

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

所有Coral块组件在关键路径中为GC生成零垃圾

我猜。预先分配的缓冲区,没有字符串对象。正如他们所说:

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


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

是的。这就是所谓的市场营销。数一数流行语的数量。你的问题还不错,毕竟他们的说法很离谱,但它不属于这里。也许programmers.se可能更合适。@Tunaki但这是零垃圾营销……你已经搞定了,内存管理“在某些情况下可能有点效率低下”。现在想想那些试图以任何代价避免垃圾的算法“在更多的情况下可能会更加低效”。不惜一切代价避免垃圾意味着执行你自己的内存管理,如果你做的正确,你可能与内置内存管理器保持一致,但是没有理由你的自定义内存管理应该更好。首先,垃圾本身并不意味着成本。实际成本是必须遍历并复制到幸存者空间的平均剩余对象数量乘以循环数。如果没有剩余的对象,产生大量垃圾可以免费触发大量循环。他们在网站上声称,他们开发了复杂的交易算法、修复引擎和高性能http服务器,这些服务器都是无垃圾的。看起来他们正在使用JDK标准库或任何其他产生垃圾的第三方库。