关于 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:<directories and zip/jar files separated by ;>                  set search path for bootstrap classes and resources-Xbootclasspath/a:<directories and zip/jar files separated by ;>                  append to end of bootstrap class path-Xbootclasspath/p:<directories and zip/jar files separated by ;>                  prepend in front of bootstrap class path-Xdiag            show additional diagnostic messages-Xnoclassgc       disable class garbage collection-Xincgc           enable incremental garbage collection-Xloggc:<file>    log GC status to a file with time stamps-Xbatch           disable background compilation-Xms<size>        set initial Java heap size.........................-Xmx<size>        set maximum Java heap size.........................-Xss<size>        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 Memory 你要知道的10点

相关文章:

你感兴趣的文章:

标签云: