当前位置: 首页 > 知识库问答 >
问题:

如何控制java堆的旧代大小?

曹原
2023-03-14
Attaching to process ID 96921, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.51-b03

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 671088640 (640.0MB)
   MaxNewSize       = 671088640 (640.0MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 5
   PermSize         = 33554432 (32.0MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 480247808 (458.0MB)
   used     = 81462752 (77.68893432617188MB)
   free     = 398785056 (380.3110656738281MB)
   16.962649416194733% used
From Space:
   capacity = 95420416 (91.0MB)
   used     = 61444600 (58.59813690185547MB)
   free     = 33975816 (32.40186309814453MB)
   64.39355703500601% used
To Space:
   capacity = 95420416 (91.0MB)
   used     = 0 (0.0MB)
   free     = 95420416 (91.0MB)
   0.0% used
PS Old Generation
   capacity = 5767168 (5.5MB)
   used     = 90128 (0.0859527587890625MB)
   free     = 5677040 (5.4140472412109375MB)
   1.5627774325284092% used
PS Perm Generation
   capacity = 35127296 (33.5MB)
   used     = 35092152 (33.46648406982422MB)
   free     = 35144 (0.03351593017578125MB)
   99.89995244723647% used

15721 interned Strings occupying 1939128 bytes.

共有1个答案

濮丰
2023-03-14

您没有设置最小堆大小,从而允许旧的gen增长/缩小。自适应大小策略只影响新/旧gen边界。设置-xms1024m

考虑到你甚至不知道我怀疑你的其他参数的选择可能是消息不灵通。我建议设置高层目标(暂停时间、吞吐量、堆空闲率),让启发式发挥作用。

推荐阅读:热点GC调优指南

 类似资料:
  • 我正在调查EE应用程序上的性能问题,这些问题可能是由于垃圾收集器的优化程度不高造成的。 在查看在重载下收集的日志时,我偶然发现了以下发现: 按照这里的官方jstat留档,我们可以看到当前的旧代大小(OGC)已经达到了最大旧代大小(OGCMX)。然而,第一行告诉我们,“旧空间利用率占空间当前容量的百分比”(O)“仅”为88%。 我的问题是: 什么机制在jstat输出中将旧的生成限制设置为OGCMX?

  • 问题内容: 我有时编写Python程序,这些程序很难确定执行前将使用多少内存。因此,有时我会调用一个Python程序,该程序试图分配大量RAM,从而导致内核大量交换并降低其他正在运行的进程的性能。 因此,我希望限制Python堆可以增长多少内存。达到限制后,程序可能会崩溃。最好的方法是什么? 如果重要的话,很多代码都用Cython编写,因此应该考虑在那里分配的内存。我还没有嫁给一个纯粹的Pytho

  • 是否有任何工具可以转储旧一代的JVM堆? 换句话说,我如何判断一个物体是来自年轻一代还是老一代?

  • 问题内容: 我收到以下错误: 问题答案: 以下是一些可用来更改堆大小的选项。

  • 问题内容: 如何增加Java中的堆大小? 问题答案: 你可以在32位系统上增加到4GB。如果你使用的是64位系统,则可以更高。如果你选择不正确,无需担心,如果你在32位系统上要求5g,则Java会抱怨值无效并退出。 正如其他人发布的那样,使用cmd-line标志-例如 你可以通过键入java -X来获得完整列表(或者无论如何都接近完整列表)。 使用命令行选项可以增加JVM分配的堆大小。这里有3个选

  • 我想检查我的应用程序是否很好地获得选项。 java进程在docker容器中运行。 为了做到这一点,我要找到所创建进程的最大堆大小。 null 假设(ngcmx+ogcmx)=()可以吗? https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html