JDK7與8內存參數解析與修改


 

JDK內存

jdk內存實際是jvm內存,jvm有一個運行時數據區,其實就是對這一部分的大小分配。

運行時數據區通常包括這幾個部分:程序計數器(Program Counter Register)、Java棧(VM Stack)、本地方法棧(Native Method Stack)、方法區(Method Area)、堆(Heap)

  • Xss:每個線程的stack大小(棧)
  • Xmx:JAVA HEAP的最大值、默認為物理內存的1/4
  • Xms:JAVA HEAP的初始值,server端最好Xms與Xmx一樣
  • Xmn:JAVA HEAP young區的大小(相當於對-XX:newSize、-XX:MaxnewSize同時設置)
  • XX:PermSize:設定內存的永久保存區域(JDK7)
  • XX:MaxPermSize:設定最大內存的永久保存區域(JDK7)

JDK1.7調節參數與查看參數:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/test
$ javac Test.java

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/test
$ java -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m Test

 

C:\Users\Administrator>jps
19284 Jps
6628 NetworkServerControl
18072
22340
21860 Test

C:\Users\Administrator>jmap -heap 21860
Attaching to process ID 21860, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11

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

Heap Configuration:
   MinHeapFreeRatio = 0
   MaxHeapFreeRatio = 100
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 536870912 (512.0MB)
   MaxPermSize      = 536870912 (512.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 268959744 (256.5MB)
   used     = 10758632 (10.260231018066406MB)
   free     = 258201112 (246.2397689819336MB)
   4.000090065522965% used
From Space:
   capacity = 44564480 (42.5MB)
   used     = 0 (0.0MB)
   free     = 44564480 (42.5MB)
   0.0% used
To Space:
   capacity = 44564480 (42.5MB)
   used     = 0 (0.0MB)
   free     = 44564480 (42.5MB)
   0.0% used
PS Old Generation
   capacity = 716177408 (683.0MB)
   used     = 0 (0.0MB)
   free     = 716177408 (683.0MB)
   0.0% used
PS Perm Generation
   capacity = 536870912 (512.0MB)
   used     = 2614432 (2.493316650390625MB)
   free     = 534256480 (509.5066833496094MB)
   0.48697590827941895% used

1523 interned Strings occupying 140352 bytes.

 

當然了:還有另外的配置,只是不常用

-XX:NewSize:新生代初始化內存的大小(注意:該值需要小於-Xms的值)。

-XX:MaxNewSize:新生代可被分配的內存的最大上限(注意:該值需要小於-Xmx的值)。

-Xmn:對-XX:newSize、-XX:MaxnewSize兩個參數同時進行配置(注意:JDK1.4之后才有該參數)。

例如:

java -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:OldSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m Test

 查看內存:

 

或者:

java -Xms1024m -Xmx1024m -Xmn512m -XX:PermSize=512m -XX:MaxPermSize=512m Test

  結果:

 

 

在JDK1.8中,取消了PermGen,取而代之的是Metaspace,所以PermSize和MaxPermSize參數失效,取而代之的是元空間:

 例如下面配置設置元空間的大小和最大大小:(等同於JDK7的永久區)

liqiang@root MINGW64 ~/Desktop/新建文件夾 (2)
$ javac Test.java

liqiang@root MINGW64 ~/Desktop/新建文件夾 (2)
$ java -Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m Test 

 查看參數:

C:\Users\liqiang>jmap -heap 2381712
Attaching to process ID 2381712, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13

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

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 357564416 (341.0MB)
   MaxNewSize               = 357564416 (341.0MB)
   OldSize                  = 716177408 (683.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 536870912 (512.0MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
 MaxMetaspaceSize = 536870912 (512.0MB)
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 268435456 (256.0MB)
   used     = 10737448 (10.240028381347656MB)
   free     = 257698008 (245.75997161865234MB)
   4.000011086463928% used
From Space:
   capacity = 44564480 (42.5MB)
   used     = 0 (0.0MB)
   free     = 44564480 (42.5MB)
   0.0% used
To Space:
   capacity = 44564480 (42.5MB)
   used     = 0 (0.0MB)
   free     = 44564480 (42.5MB)
   0.0% used
PS Old Generation
   capacity = 716177408 (683.0MB)
   used     = 0 (0.0MB)
   free     = 716177408 (683.0MB)
   0.0% used

1597 interned Strings occupying 146680 bytes.

 

補充:查看JVM參數的方法

第一種:jps+jmap

C:\Users\Administrator>jps
16740 Main
8388 Jps
4248
11564 Server
11884 NetworkServerControl

C:\Users\Administrator>jmap -heap 11564
Attaching to process ID 11564, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13

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

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2155872256 (2056.0MB)
   NewSize                  = 718274560 (685.0MB)
   MaxNewSize               = 718274560 (685.0MB)
   OldSize                  = 1437597696 (1371.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8 MetaspaceSize = 536870912 (512.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 536870912 (512.0MB)
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 538968064 (514.0MB)
   used     = 132464928 (126.32839965820312MB)
   free     = 406503136 (387.6716003417969MB)
   24.577509661129014% used
From Space:
   capacity = 89653248 (85.5MB)
   used     = 89640016 (85.48738098144531MB)
   free     = 13232 (0.0126190185546875MB)
   99.98524091397113% used
To Space:
   capacity = 89653248 (85.5MB)
   used     = 0 (0.0MB)
   free     = 89653248 (85.5MB)
   0.0% used
PS Old Generation
   capacity = 1437597696 (1371.0MB)
   used     = 75478984 (71.98236846923828MB)
   free     = 1362118712 (1299.0176315307617MB)
   5.250355103518475% used

61705 interned Strings occupying 7127136 bytes.

 

第二種:用JDK自帶的工具 jconsole或者jvisualvm:

 

 

 

 

補充:32位windows平台對每個進程能管理的內存是有限制的,限制是2GB

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM