`

JAVA开发(4) -JVM 内存溢出问题的解决

阅读更多

1、java.lang.OutOfMemoryError: Java heap space

解释:
Heap size 设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:

手动设置Heap size

windows 平台
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:

Java代码 复制代码 收藏代码
  1. set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m   
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m 


Linux平台
修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

2、java.lang.OutOfMemoryError: PermGen space

原因:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:

1. 手动设置MaxPermSize大小

windows平台
修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在

Java代码 复制代码 收藏代码
  1. “echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:    
  2. set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m   
“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: 
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m 

Linux平台
catalina.sh下为:

Java代码 复制代码 收藏代码
  1. JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"  
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"

3、eclipse产生java.lang.OutOfMemoryError: java heap space

 

解决办法:Eclipse -> Preference ->JAVA->Installed Java->Edit->Default VM Arguments添加

 

 Java代码 复制代码 收藏代码

-Xms1348m -Xmx1348m

 

分享到:
评论

相关推荐

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    我们上层应用平台是使用java开发的,但开放平台是使用c++开发,虽提供给我们对应的.h头文件,但在java中来解析这些数据就显然有些复杂,在实现、效率上都可能不太理想。 解决方案: 请C++同事帮忙写个dll程序,dll去...

    Java进阶教程解密JVM视频教程

    * 在内存结构章节,能够学习掌握 JVM内存溢出现象,堆栈内存结构,利用内存诊断工具排查问题。彻底分析 StringTable的相关知识与性能优化,掌握直接内存分配原理和释放手段。 * 在垃圾回收章节,不仅会介绍垃圾回收...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-017-Java语言概述-Java开发IDE.mp4 北京动力节点-Java编程零基础教程-018-Java语言概述-EditPlus的安装及设置.mp4 北京动力节点-Java编程零基础教程-019-Java语言概述-第一个...

    高级开发jvm面试题和答案.pdf

    面试高级开发的期间整理的面试题目,记录我面试遇到过的jvm...简述一下内存溢出的原因,如何排查线上问题? 内存溢出的原因 引用在gc中回收状况 为什么gc停止所有进程; 有几种垃圾回收器; 描述一下CMS和G1的异同;

    大型国企内部Java面试题

    JVM:涉及常用的内存泄漏、内存溢出、MAT、jstack的分析案例 Linux:涉及开发中常用的命令,如telnet、curl、wget、netstat Redis:集群底层原理、持久化内部机制等 多线程、集合等 内容过多,就不一一例举。整理...

    Java常见面试问题整理.docx

    面试问题整理:JVMJRE、JDK、JVM,JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的...

    从源码的角度探索Java中间件-Tomcat & Jetty的深度反汇编

    弄懂了Tomcat和Jetty的原理,JavaWeb开发对你来说就毫无秘密可言。...Tomcat的内存溢出原因分析及调优 Tomcat拒绝连接原因分析及网络优化 Tomcat进程占用CPU过高怎么办 谈谈Jetty性能调优的思路 热点问题答疑5

    混合音乐推荐系统-Track Stacking-毕业设计.zip

    它不仅支持面向对象编程的所有特性,如封装、继承和多态,还具有健壮性、安全性以及平台独立性等优点,能够有效防止各种内存溢出和类型安全问题。 Java在企业级应用开发中占据主导地位,广泛应用于服务器端Web应用...

    学生成绩管理分析系统 毕业设计.zip

    它不仅支持面向对象编程的所有特性,如封装、继承和多态,还具有健壮性、安全性以及平台独立性等优点,能够有效防止各种内存溢出和类型安全问题。 Java在企业级应用开发中占据主导地位,广泛应用于服务器端Web应用...

    Android毕业设计; Android, Music Player, for graduation.zip

    它不仅支持面向对象编程的所有特性,如封装、继承和多态,还具有健壮性、安全性以及平台独立性等优点,能够有效防止各种内存溢出和类型安全问题。 Java在企业级应用开发中占据主导地位,广泛应用于服务器端Web应用...

    Jprofile简介

    简单的性能问题很容易分离并解决,然而,大的性能问题,如内存溢出或者系统的罢工,通常在系统处于高负载情况下发生,就不能这么简单的处理了。这些问题需要一个独立的测试环境、一个模拟的负载,并且需要仔细地分析...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    jprofiler_windows_6_0_6

    JProfiler是一个全功能的Java剖析工具(profiler),主要用于检查和跟踪系统(限于Java开发的)的性能。 JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视...

    涵盖了90%以上的面试题

    JVM内存模型1.7和1.8的区别 如何判断一个对象是否是垃圾对象 垃圾回收算法 Minor GC和Full GC 垃圾收集器 集合的继承体系 Collection 和 Collections的区别。 如何通过jdbc访问数据库 JDBC处理事务采用什么方法 ...

    JVM的GC如何判断对象是否死亡?

    因为热爱,所以坚持 ...原因很简单:我们不想止于“增删改查工程师”这样的初级水平,一旦程序发生了内存溢出、内存泄漏等问题时,我们可以用已掌握的知识更好的调节和优化我们的代码。在学这章节之前

    java 面试题 总结

    比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...

    Java 异常处理

    Java 异常处理 异常是程序中的一些错误,但并不是所有的错误...网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。- 要理解Java异常处

    java8集合源码分析-Petal:面试复习及面试经验

    JVM:虚拟机结构,内存模型,双亲委派模型,内存溢出举例说明,垃圾回收算法,四大引用 Java并发:三种锁,validate,synchronized,lock,CAS,线程池(原理和拒绝策略),多线程工具类 操作系统:死锁条件与避免,...

    java面试题

    答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...

    Android中加载网络资源时的优化可使用(线程+缓存)解决

    下面提出一些优化: 1、采用线程池 2、内存缓存+文件缓存 3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4、对下载的图片进行按比例缩放,以减少内存的消耗 具体的...

Global site tag (gtag.js) - Google Analytics