zoukankan      html  css  js  c++  java
  • jdk outMemory内存溢出

    参数的含义:
    -vmargs -Xms256M -Xmx768M -Xss256k -XX:PermSize=256M -XX:MaxPermSize=768M
    -vmargs 说明后面是vm的参数
    -Xms256M jvm初始分配的堆内存,默认为物理内存的1/64,可与-Xmx设置相同,防止每次垃圾回收重新分配内存
    -Xmx768M jvm最大允许分配的堆内存,默认为物理内存1/4
    -Xss256k 每个线程的堆栈大小,jdk 1.5以后每个线程堆栈默认为1M
    -XX:PermSize=256M jvm初始分配的非堆内存,默认为物理内存的1/64
    -XX:MaxPermSize=768M jvm允许分配的最大非堆内存,默认为物理内存1/4

    内存分为堆内存与非堆内存:

    堆内存为Java代码及可用的内存,是留给开发人员使用的;非堆就是JVM留给自己用的。

    在JVM中如果98%的内存用于垃圾回收且可用的 Heap Size 不足 2%的时候将抛出 OutOfMemoryError 错误

    堆内存分配:

      JVM初始分配的堆内存由Xms制定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。 默认空余堆内存小于40%时,JVM会增大堆知道Xmx的最大限制。空余堆内存大于70%时,JVM会减少到-Xms的最小限制,因此服务器设置-Xms、-Xmx 相等以避免在每次GC(垃圾回收)后调整堆的大小。
    说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。

    非堆内存分配:
      JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
      PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
      XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space 就是内存益出。

    为什么会内存溢出:
     
      (1)飞堆内存用于存放class和mete的信息,Class在被Load的时候被放入PermGen space(内存永久区域)区域,它和存放实例的Heap区域不同。
      (2)GC(Garbage Collection:垃圾回收器)不会再主程序运行期对PermGen space进行清理,所以如果程序Load很多class的话,就有可能会出现PermGen space错误。

    JVM内存限制(最大值):

      首先,JVM内存限制于实际的最大物理内存,假设内存无限大的话,JVM内存的最大值跟操作系统有关,简单说32位处理器虽然可控内存空间有4GB,但是最大也许就被先知道2GB-3GB,而64位就没有限制。
  • 相关阅读:
    iPhone控件之UIDatePicker
    iPhone控件之UIActionSheet
    iPhone控件之UIActivityView
    iPhone控件之UIPickerView2
    RTP/RTCP协议详解
    ASIHTTPRequest详解[转载]
    iPhone控件之UIProgressView
    iPhone控件之UIPageControl
    iPhone控件之UISegmentedControl
    使用AsyncSocket实现RTSP协议
  • 原文地址:https://www.cnblogs.com/lcword/p/5857908.html
Copyright © 2011-2022 走看看