java - 如何控制老年代的java堆大小?

标签 java garbage-collection jvm

我想控制 java 堆的老年代大小。我在下面有这些设置:

-Xmx1024m -XX:MaxNewSize=640m -XX:NewSize=640m -XX:SurvivorRatio=5 -XX:-UseAdaptiveSizePolicy -XX:PermSize=32m -server

启动应用程序后,我执行“jmap -heap pid”,它显示:

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.

我的问题是为什么旧的size是5mb,我觉得应该是300+mb = MaxHeapSize - NewSize - PermSize = 1024 - 640 - 32

我的设置有什么问题,如何控制旧尺寸?

最佳答案

您没有设置最小堆大小,因此允许老一代增长/缩小。自适应大小策略仅影响新/旧生成边界。设置 -Xms1024m

考虑到您甚至不知道我怀疑您选择的其他参数可能是错误的。我建议改为设置高级目标(暂停时间、吞吐量、堆空闲率),让启发式方法发挥作用。

推荐阅读:Hotspot GC Tuning Guide

关于java - 如何控制老年代的java堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180683/

相关文章:

java - 如何在play框架中使用javaWS获取特定响应json

java - 计算数组中的负数

java - Wicket ListView ajax 删除总是删除列表中的最后一个元素

使用应用程序在密集内存中进行 C# 垃圾收集

java - JVM 线程转储位置

java - GWT 中的对话框深度(z-index)

java - 是否有可能控制反序列化文件时创建的对象数量

java - Spring上下文引用java

java - 有没有类似 NGen 的 JVM 预编译解决方案?

scala - 数组构造器优化——Double的装箱