我所理解的是;
除了V8引擎的垃圾收集之外,这是否意味着,当响应完成后,foxx使用的任何内存都会被垃圾收集?
如果以上问题的答案是肯定的,那么是否有一种方法可以禁用V8引擎的垃圾收集器,如果我禁用了V8引擎的GC,我是否可以期待更好的延迟?
如果我搞错了请告诉我。
发布于 2018-11-14 10:18:03
与许多其他解释器不同,javascript解释器有一个特殊的特性。它们需要在多个浏览器窗口中运行,其中一个窗口不应该知道另一个窗口。
因此,解释器操作集与其一般逻辑严格分离。在V8中,这个概念是在名称Isolate
下实现的。
ArangoDB产生了几个分离,每个上下文都可以在其中运行。ArangoDBs基础设施将钩子连接到可以发出信号的隔离区,即新的集合是可用的。然而,在Foxx中没有这样的钩子。
ArangoDB是多线程的.请求代理将读取请求,如果它发现它应该执行Foxx请求(而不是直接的AQL调用),它将从池中选择一个隔离器,并在该V8上下文中继续执行。因此,您既没有到达同一个工作线程的保证,也没有保证它会在后续请求中选择相同的隔离。
每一个分离都可以是单独的垃圾收集,而无需阻止其他隔离的执行。ArangoDB公开有关这些上下文的统计信息。,因此您可以看到隔离可以被标记为dirty
,这意味着它们应该被垃圾收集。您可以使用require("internal").wait(<seconds>, true)
手动调用垃圾收集。生成的上下文数量取决于系统拥有的CPU数量。但是,您可以看到,可以配置这些设置。的策略与调优Java有很大不同。
Foxx本身将在请求后放弃服务分配的结构。然后,它们将在后续请求中不可用,一旦垃圾收集运行,它们的内存将返回到系统。
通常,您应该努力使您的Foxx成为您执行的阿克尔的一个薄薄的层。虽然性能应该被视为一种特性,但是当您的代码达到一定程度的成熟度时,您通常会开始研究它。我们解释了如何在我们的博客文章系列中创建使用场景以及度量和优化可能的吞吐量;虽然这里没有直接提到Foxx服务,但是在那里使用的策略也可以应用于Foxx。
https://stackoverflow.com/questions/53282419
复制相似问题