java内存溢出的OutOfMemoryError异常
堆的最小值:-Xms 如-Xms20m
堆的最大值 -Xmx 如果设为一样的则可避免堆自动扩展。
年轻代大小: -Xmn
-XX:+HeapDumpOnOutOfMemoryError 当内存溢出时Dump出当前的内存堆转存快照。
Eclipse中虚拟机参数设置:debug As-->open dubug dialog
生成之后使用Eclipse Memory Analyzer 进行堆转储文件分析(需要安装MAT插件)。 -Xss:设置每条线程的Statck大小.在JDK1.5以后默认是1M,之前是256K
抛出StackOverFlow异常:操作系统分配给每个线程的内存是有限的,机器总内存减去Xmx再减去MaxPermSize,程序计数器占内存很少忽略,剩下的内存被虚拟机栈和本地方法栈瓜分,每个线程分到的栈容量越大,分配的线程数就小。正常情况栈深度1000-2000没问题,如果是建立更多线程导致的内存溢出,在不能减少线程的情况下,只能通过减小Xmx和栈容量来换取更多线程。 -PermSize :方法区的初始容量,默认是物理内存的1/64
-MaxPermSize :最大方法区容量。 -XX:MaxDirectMemorySize 本机直接内存大小,如果不指定,则与Xmx一样