关于 java Heap Memory 你要知道的10点

原文:10 points about Java Heap Space or Java Heap Memory


对一个java developer来说,知道java中的Heap,设置Heap的大小,分析Heap中的Memory的回收是非常重要的。


java中什么是Heap Space?

当一个java程序启动JVM,从操作系统那里取得一些内存,JVM就从这些内存来满足它的需要,这些内存中的一部分就作为Heap了。Heap在内存地址中从底部开始,往上移动。当不论用什么方式创建一个对象时,给对象分配的内存就在Heap中,当对象die或者Garbage Collector回收内存时,对象使用的内存还给Heap Space。了解更多Garbage Collector。


怎么增加java Heap size?

在大部分32位的Sun JVM上默认Heap Size是128M,但这个因JVM不同而不同。

在jdk 5 及以后,可以使用图形化工具JConsole查看JVM及java application的内存使用情况。

-Xms Heap的初始大小

-Xmx Heap的最大大小

-Xmn Heap中new generation大小

更多java -X

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:
                  set search path for bootstrap classes and resources
-Xbootclasspath/a:
                  append to end of bootstrap class path
-Xbootclasspath/p:
                  prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms        set initial Java heap size.........................
-Xmx        set maximum Java heap size.........................
-Xss        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all
                  show all settings and continue
-XshowSettings:vm show all vm related settings and continue
-XshowSettings:properties
                  show all property settings and continue
-XshowSettings:locale
                  show all locale related settings and continue


java的堆和垃圾回收器

java中对象创建在堆内,垃圾回收器工作在堆内,为Heap回收内存空间。

为了Garbage Collection工作,Heap被分成3个部分:New Generation,Old or Tenured Generation,Perm space。

New Generation用于存放新创建的对象,随着程序运行,有些对象dies,但仍然live,被GC移到Old or Tenured Generation。Perm space存放类和方法的Meta data,String pool,Class层面的详细信息。


java中的OutOfMemoryError

当java Heap达到它的默认最大值或者-Xmx指定的值,无法给新创建的object分配空间了,就会抛出“OutOfMemoryError”,在抛出前,JVM会先执行GC,如果GC后还是这样,那就抛出该异常。要解决这个问题,需要明白你的程序都创建了哪些对象,这些对象占用了多少内存,使用profiler或者heap analyser来跟踪分析该异常。"java.lang.OutOfMemoryError: Java heap space"意思是java Heap没有足够的空间了,也无法往大expand。 "java.lang.OutOfMemoryError: PermGen space" 意思是java Heap的Prem Space满了,无法再加载一个新类或者分配一个String了。


java Heap Dump

java Heap Dump是java Heap memory在某一时间点的snapshot。对分析,定位内存泄露或者OutOfMemoryError很有用。jdk提供了这样的工具,用“jmap”搞一张Heap Dump,用“jhat”来分析Heap Dump.



你可能感兴趣的:(Java,Heap)