Java:我如何避免GC又名停止世界事件



假设我正在读取每毫秒有数百万事务的传入流,速度如此之快,以至于我无法负担GC,否则整个系统将挂起。

功能是非常简单的,它只是记录每一个数据包经过网卡。(假想的)

这可能吗?有这样的实现的设计模式吗?我只知道轻量级和资源池设计模式。我真的需要用C编码,以便我可以管理它吗?

1)我可以有合理数量的ram,但不是荒谬的像100gb(也许16gb)?2) CPU处理不是问题。

常见问题解答:

必须是Java吗?不,请给我推荐另一种可以支持大多数平台的语言。(linux, aix, windows)

  1. 如果你真的想处理所有通过你的网卡。Java是错误的语言。

  2. 正如你已经被告知的,每毫秒一百万个事务似乎是不现实的,只有当你能够在多台(读取许多许多)计算机之间分配工作时才能实现

  3. 外面有很多垃圾收集器,如果有什么对你有好处的话,去搜索一下。

  4. 如果你真的不想让垃圾回收器启动,我认为你唯一的选择是:不要创造垃圾。初始化一个字节数组作为要在其中工作的内存。只使用原语,不使用对象。它会很麻烦,但它可能很快,我被告知这是人们在实时系统工作的那种东西。

假设您指的是每秒数百万事务,而不是毫秒,您可以使用Chronicle,它承诺每秒5-20m事务,持久

我希望每毫秒数百万事务是一个笑话或夸张的说法。没有一台计算机可以处理这么多,特别是如果仅仅100Gb的内存是荒谬的。

但是忽略预期事务的实际数量,这种类型的任务所需要的是实时Java。如果你想继续使用Java的话。

无论哪种方式,你都可能首先需要一个实时操作系统,因为你的应用程序不会是计算机上唯一运行的东西,如果操作系统决定在你的应用程序需要控制时不给它控制,你就无能为力了。

Update:如果你只想捕获网络流量,不要重新发明轮子,使用libpcap ..它甚至有一个Java包装器

最新更新