当前位置: 首页 > 面试题库 >

新TLAB中的分配与TLAB之外的分配

夏侯林
2023-03-14
问题内容

JDK中的Java Mission
Control工具提供有关新TLAB中对象分配以及TLAB外部分配的统计信息。(在“内存/分配”下)。这些统计信息的意义是什么,对于应用程序的性能有什么好处?我是否应该担心是否在TLAB之外分配了一些对象,如果可以,该怎么办?


问题答案:

TLAB是线程本地分配缓冲区。在HotSpot中分配对象的常规方法是在TLAB中。由于分配缓冲区是线程本地的,因此可以在不与其他线程同步的情况下完成TLAB分配,因此仅在获取新的TLAB时才需要同步。

因此,理想的情况是尽可能在TLAB中完成分配。

一些对象将被分配到TLAB之外,例如大对象。只要在TLAB之外的分配与新TLAB中的分配的百分比较低,就不必担心。

执行每个线程时,会分别动态调整TLAB的大小。因此,如果线程分配过多,则它从堆中获得的新TLAB的大小将增加。如果需要,可以尝试设置标志-XX:MinTLABSize以设置最小TLAB大小,例如
-XX:MinTLABSize=4k

我的同事David Lindholm提供的答案:)



 类似资料:
  • 问题内容: 在python中,调用和分配给字典之间有区别吗?如果是,那是什么?例: 问题答案: 如果您还有另一个变量也引用相同的字典,则有很大的不同: 这是因为分配会创建一个新的空字典并将其分配给变量。这样就指向旧字典,里面还有项目。但是,清除相同的字典,并且两者都指向。

  • 我在localhost上设置了一个分片的mongo db环境,有3个配置服务器、2个分片的mongo实例和一个mongos。 集群启动后,我运行以下命令序列: 我启用数据库进行分片,并创建一个索引等。 以上所有操作的结果都是成功的。 但是一旦我做到了:db.foo.stats() 我看到所有的数据都在一个分片中结束,而没有被分发。和运行 生产: 然而,有趣的是,如果我从一个空白集合开始,并在向其中

  • 实际上,我正在尝试创建一个应用程序,有n个多媒体文件,其中包括图像和视频。我的应用程序大小大约为,我的资产大小大约为。当我在普通设备上加载应用程序时,我们没有遇到任何问题,但在具有的设备上,如等,应用程序在过程中崩溃,错误是“内存不足”。我已经用这个生成了错误报告。我也尝试过位图工厂。同时,我使用了数组的视频方法。 有谁能帮助解决这个问题吗? 致命异常:主进程:com.example.we.app

  • 问题内容: 当您知道on上对象/项目的确切数量时,我非常想知道哪种内存分配方法对性能(例如,运行时间)有利,这对性能有好处。少量对象(少量内存)和大量对象(大量内存)的成本。 与 请告诉我。谢谢。 注意:我们可以对此进行基准测试,并且可能知道答案。但是我想知道解释这两种分配方法之间性能差异的概念。 问题答案: 静态分配将更快。静态分配可以在全局范围和堆栈上进行。 在全局范围内,静态分配的内存内置在

  • 当您知道中对象/项的确切数量时,我很想知道内存分配的首选方法是什么对性能(例如,运行时间)有好处Linux。少量对象(少量内存)和大量对象(大量内存)的成本。 例如,类型A【N】vs 请让我知道。非常感谢。 注意:我们可以对此进行基准测试,并可能知道答案。但我想知道解释这两种分配方法之间性能差异的概念。

  • 让我们考虑一下这个代码: 现在,让我们想象一下,在堆中为分配内存时,没有可用空间AND,同时,堆栈中有足够的可用空间。 我的问题很简单:如果堆栈中的分配是错误的,那么堆栈中的分配是否总是错误的? 据我所知,堆栈是为每个线程分配的,堆是为进程分配的。那么,是否可以保证堆栈中内存分配的结果不会与堆中内存分配的结果相关联?当然,我不认为堆栈溢出本身。换句话说,为堆栈保留的内存实际上是完全为其保留的吗?或