OutOfMemoryError

Java OutOfMemoryError 的原因是什么,什么是Java native方法

雨燕双飞 提交于 2019-12-26 20:39:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、Java OutOfMemoryError 的原因是什么,什么是Java native方法? 转载的博文 容易发生内存溢出问题的内存空间包括:Permanent Generation space和Heap space。 常见的几种错误: 1.1 OutOfMemoryError PerGen space 发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与Permanent Generation space有关。 解决方法:增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行: JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m" 1.2 OutOfMemoryError Java Heap space 发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关。

java.lang.OutOfMemoryError:Out of swap space?

安稳与你 提交于 2019-12-09 21:08:05
近期遇到一个JVM崩溃问题,JVM在运行不定时间后会崩溃,崩溃的时间没发现有什么规律,有可能是一两天,有可能是一个月,近半年大概发生了3次,在第三次发生的时候终于引起了楼主的关注,楼主决定想办法处理掉它,下面分享一下处理的过程。 首先贴上hs.log(日志太长,只贴出一部分),如下: # # An unexpected error has been detected by Java Runtime Environment: # # java.lang.OutOfMemoryError: requested 1310720 bytes for GrET in C:\BUILD_AREA\jdk6_07\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space? # # Internal Error (allocation.inline.hpp:42), pid=3640, tid=5204 # Error: GrET in C:\BUILD_AREA\jdk6_07\hotspot\src\share\vm\utilities\growableArray.cpp # # Java VM: Java HotSpot(TM) Server VM (10.0-b23 mixed mode windows-x86)

android BitmapFactory的OutOfMemoryError: bitmap ...

拈花ヽ惹草 提交于 2019-12-07 14:22:23
网上有很多解决android加载bitmap内存溢出的方法,搜了一圈做下整理总结。项目里需求是拍摄多图之后上传,部分手机会内存溢出 。 常用一种解决方法:即将载入的图片缩小,这种方式以牺牲图片的质量为代价。在 BitmapFactory 中有一个内部类 BitmapFactory.Options ,其中当 options.inSampleSize 值 >1 时,根据文档: If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. (1 -> decodes full size; 2 -> decodes 1/4th size; 4 -> decode 1/16th size). Because you rarely need to show and have full size bitmap images on your phone. For manipulations smaller sizes are usually enough. options.inSampleSize是以2的指数的倒数被进行放缩 现在问题是怎么确定inSampleSize的值?每张图片的放缩大小的比例应该是不一样的

eclipse 下调整jdk和tomcat的jvm参数

怎甘沉沦 提交于 2019-12-07 14:11:08
eclipse 下调试和运行,往往会出现调整java.lang.OutOfMemoryError: Java heap space 产生的原因我猜测是使用了maven,subversion,mylar,wtp等插件,还有就是大文件,对象的操作导致,具体原因还不确定。 在网上找了找相关资料,找到了解决办法:方法(1)操作后没有起作用,不过可以参考其中查看内存的技巧 .具体解决看方法(2),(3) 一 、在eclipse根目录,找到eclipse.ini,在其中指定初始heap size和最大heap size: -xms 64M -xmx 256M 其中, -xms是初始heap size, -xmx 是最大heap size。 在实际使用过程中,我发现我一启动eclipse时,heap size使用大概是40m,多时可以达到128m,所以我的设置是 -xms 64m -xmx 128m 对于permgen space: 在eclipse.ini中指定参数: -permsize 256m -maxpermsize 784m 二 、修改jdk 使用内存(此方法可行) 找到eclispe 中window->preferences->Java->Installed JRE ,点击右侧的Edit 按钮,在编辑界面中的 “Default VM Arguments ”选项中,填入如下值即可。

JVM调优之Tomcat启动参数配置及详解(一)

扶醉桌前 提交于 2019-12-06 06:49:14
开发项目中会遇到Tomcat内存溢出( java.lang.OutOfMemoryError: PermGen space )的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小、年轻代大小、每个线程大小参数进行调优的,具体如下: 一、在Tomcat 启动脚本(catalina.sh/catalina.bat)首行添加如下配置即可解决此问题 JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=512m" 1:-Xms 堆空间初始大小 2:-Xmx 堆空间最大数值 3:-Xmn 年轻代的堆大小 4:-Xss 每个线程堆大小 二、JVM堆大小的默认最大和最小值(参考) 操作系统及JVM类型 初始堆的大小(Xms) 最大堆的大小(Xmx) Linux/Solaris,32位客户端 16MB 256MB Linux/Solaris,32位服务器 64MB 取1GB和物理内存大小1/4二者中的最小值 Linux/Solaris,64位服务器 取512MB和物理内存大小1/64二者中的最小值 取32GB和物理内存大小1/4二者中的最小值 MacOS,64位服务器型JVM 64MB 取1GB和物理内存大小1/4二者中的最小值 32位Window系统,客户端型JVM

JVM内存溢出之tomcat配置

不羁岁月 提交于 2019-12-04 20:46:46
JVM内存溢出常见的有一下两种: 第一种:java.lang.OutOfMemoryError: PermGen space 第二种:java.lang.OutOfMemoryError: Java heap space 第一种异常原因是因为我们项目中需要加载的文件太多所导致,项目发布时class文件和jar文件会被加载到jvm的永久区,当永久区空间不足时则会抛出 java.lang.OutOfMemoryError: PermGen space; 第二种为堆栈溢出,此异常在项目运行其产生,由于运行期产生太多的对象实例而没有被gc,所以才会抛出该异常; 针对以上两种异常,和Tomcat使用情况的不同,有如下三种解决方案: 1 、Tomcat解压版 通过startup.bat脚本运行: 当我们通过startup.bat运行tomcat时,需要记事本catalina.bat并找到 echo Using CATALINA_BASE: "%CATALINA_BASE%"该行, 然后在上面添加 set JAVA_OPTS=%JAVA_OPTS% -server -Xms100m -Xmx1024m -XX:PermSize=20m -XX:MaxPermSize=100m 并将参数设置合理值。 2. Tomcat解压版 注册为系统服务 解压版注册为系统服务方式为,cmd 进入tomcat

java.lang.OutOfMemoryError异常解决方法

风格不统一 提交于 2019-12-02 08:51:57
原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小; 常见错误提示: 1.tomcat:java.lang.OutOfMemoryError: PermGen space 2.tomcat:java.lang.OutOfMemoryError: Java heap space 3.tomcat:java.lang.OutOfMemoryError: unable to create new native thread 4.weblogic:Root cause of ServletException java.lang.OutOfMemoryError 5.resin:java.lang.OutOfMemoryError 6.java:java.lang.OutOfMemoryError 分为两种情况: 1、用dos窗口启动tomcat Windows下,在文件{tomcat_home}/bin/catalina.bat 在文件开头可增加如下设置: set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize

tomcat内存溢出OutOfMemoryError

我的梦境 提交于 2019-12-01 05:12:11
出现OutOfMemoryError PermGen space系统错误,通过在网上查阅资料,发现这个错误并不是Tomcat的问题,而JVM设计自身的一个缺陷,JVM把内存分了不同的区, PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,类加载的时候就存放在这个区域中。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收! 老外一直认为这是sun JVM的一个bug,曾有这样的评价:“A bug this critical is open since 2003? Absolutely shameful”-- 我觉得SUN在这个BUG上确实有些丢脸。没想到至今这个问题还没未能解决,有人给出最好的解决方法是不使用JDK,使用BEA的JRokit,当然现在Oracle,BEA,SU已经成为一家人了,我想这个问题应该会更快有更好的解决方案。 好了还是说说如何解决问题吧,网上大量的资料说在tomcat这样设置:SET JAVA_OPTS= -Xms64m -Xmx512m,但经过本人的测试,没有一点作用,详细看了JVM内存的分配机制后才知道,-Xms和--Xmx是调整Java heap space

Java内存溢出详解+Tomcat配置文件中JVM的启动参数设置

笑着哭i 提交于 2019-11-30 05:47:21
一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。 在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。 解决方法:手动设置JVM Heap(堆)的大小。 2. java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出。 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。 为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信 息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen

java虚拟机运行时的内存分类以及出现异常分析(jvm之一)

廉价感情. 提交于 2019-11-29 23:36:37
java虚拟机所管理的内存包括以下几个运行时数据区域: 方法区(Method Area):线程共享的,存放已被虚拟机记载的类信息、常量、静态变量等数据。“永久代(Permanent Generation)” 虚拟机栈(Virtual Machine Stacks):线程私有,生命周期跟线程相同;java方法执行时创建栈帧存放局部变量表(各种基本数据类型、对象引用等)、操作数栈、动态链接等信息。 本地方法栈(Native Method Stack) 堆(Heap):线程共享的;存放对象实例;垃圾收集器管理的主要区域即GC堆。 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器。Java虚拟机多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,所以线程需要一个独立程序计数器。 OutOfMemoryError异常 1、Java堆(heap)溢出 java HeapOOM -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError (将堆的最小值-Xms与最大值-Xmx参数设置为一样可以避免堆自动扩展;-XX:+HeapDumpOnOutOfMemoryError出现内存溢出异常时Dump出当前的内存堆转储快照以分析) Java堆内存的OOM异常是实际应用中最常见的内存溢出溢出情况。异常信息