- 浏览: 53636 次
- 性别:
- 来自: 厦门
文章分类
最新评论
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)那么就会产生此错误信息了。
解决方法: .其实不仅仅是时间长了会出现这样的问题,在开发过程中也会有。我们经常喜欢SSH组合来开发程序。当出现这样的问题时,总是归咎与 Tomcat,Spring,Hibernate。因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用 CBLIB会动态产生很多类。
1. 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下为 catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
catalina.sh 下为:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就 固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
java.lang.OutOfMemoryError: Java heap space
1.当java程序运行到一定时间的时候。常常抛出java.lang.OutOfMemoryError: Java heap space异常。 2.java heap space 指的是JVM的内存不够用了,内存泄露。 原因: 解决方法:
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
修改TOMCAT_HOME/bin /catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
或 修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
发表评论
-
Java 设置http代理
2014-06-11 09:53 1023一、设置系统代理 方法如下: java -Dhttp.p ... -
URLConnection的连接、超时、关闭用法总结(转载)
2014-06-10 15:46 1674Java中可以使用HttpURLConnection来请求 ... -
HttpURLConnection连接超时的设置
2014-06-10 15:39 1163HttpURLConnection连接超时的设置(设置超时时 ... -
java 多态认识
2014-05-15 11:08 0多态多态中用到了以 ... -
jquery的ajax和getJson跨域获取json数据
2014-03-18 10:20 378jquery的ajax和getJson跨域 ... -
hibernate hql 使用 in
2012-09-26 17:01 0public void updateDynamicMar ... -
java HttpUrlConnection
2012-05-31 16:09 989Java发送http请求 (get 与 post方法请求) ... -
读取配置文件
2012-03-26 10:41 001.package com; 02. 03.i ... -
tomcat 设置内存
2012-02-09 09:25 1001关键字: tomcat outofmemoryerror pe ... -
xml
2011-07-28 09:19 673Dom4J讀寫xml http://ajava.org ... -
JSP 標籤字符串操作
2011-04-18 15:45 1571<%@ page language="j ... -
net/sf/cglib/proxy/CallbackFilter
2010-01-12 13:25 4007严重: Context initialization fail ... -
org/apache/commons/collections/SequencedHashMap
2010-01-12 12:55 3572严重: Context initialization fail ... -
javax/transaction/TransactionManager
2010-01-12 12:50 40582010-1-12 12:47:20 org.apache.c ... -
org.springframework.beans.BeanInstantiationException
2010-01-12 12:44 3911严重: Context initialization fail ... -
抽象类与接口的区别 - OO - New - JavaEye论坛
2009-12-28 12:42 726abstract class和interface是Java语言 ... -
struts2session与request的值问题
2009-12-27 13:47 1453ActionContext ServletActionCont ... -
java.lang.NoClassDefFoundError
2009-12-24 19:56 1030程序明明运行的好好的,可是今早启动Tomcat时出现java. ...
相关推荐
eclipse设置java内存 Eclipse是一个功能强大且广泛使用的集成开发环境(IDE),但是,如果不正确地设置其运行内存,可能会导致内存溢出错误。因此,正确地设置Eclipse的java内存是非常重要的。本文将详细介绍如何...
### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...
jdk 内存设置主要包括堆大小设置、垃圾收集器的选择和配置等几个方面。 堆大小设置是 jdk 内存设置的核心内容。堆大小的设置直接影响着 Java 应用程序的性能和稳定性。最大堆大小有三方面限制:相关操作系统的数据...
在Java编程语言中,了解对象内存大小是优化内存使用、提高程序性能的关键步骤。当我们谈论“Java对象内存大小”时,我们通常指的是一个Java对象在内存中占据的空间,包括对象头、实例字段以及可能的对齐填充。这个...
优化Java堆内存大小对于提升应用性能、防止垃圾收集器频繁启动以及避免OutOfMemoryError至关重要。以下是五个关键技巧,可以帮助你有效地调整Java堆内存设置: 1. **理解默认值与自定义配置**:每个JVM都有默认的堆...
Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...
在Java编程环境中,了解对象占用的内存大小是优化性能的关键步骤。这可以帮助我们避免内存泄漏,提高应用程序的效率。本文将深入探讨如何统计缓存(尤其是Java对象)所占的内存大小,以及这对理解程序内存消耗的重要...
在Java编程语言中,了解一个对象占用的内存大小对于优化程序性能、理解内存消耗以及防止内存泄漏至关重要。本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java...
在释放内存缓存方面,Windows提供了SetProcessWorkingSetSize函数,允许我们设置进程的工作集的大小。我们可以使用这个函数来释放不需要的内存缓存,提高系统的性能。 在获得CPU使用率方面,我们可以使用...
### Java内存机制学习和使用 #### 一、Java内存机制概览 Java内存管理是Java开发人员必须掌握的核心概念之一。良好的内存管理不仅能够提升应用性能,还能避免常见的内存泄漏问题。本文旨在深入探讨Java内存机制,...
Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...
本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并解析给定代码片段中的关键概念。 ### JVM内存模型 在讨论如何获取JVM内存大小之前,首先需要理解JVM的内存布局。JVM内存...
可以通过增加`-Xmx`参数来设置最大堆内存大小。 #### 四、内存泄漏识别与定位 1. **工具选择**:可以使用如VisualVM、JProfiler等工具来监控和诊断内存泄漏问题。 2. **分析策略**:观察内存使用情况,查找不再...
Java内存管理是Java编程中的核心概念,它涉及到程序运行时数据的存储、分配以及回收。在Java中,内存主要分为堆内存(Heap)和栈内存(Stack),还有方法区(Method Area)、程序计数器(PC Register)以及本地方法...
- `-XX:MaxGCPauseMillis` 设置垃圾回收的最大暂停时间,JVM会自动调整内存大小以尝试满足这个目标。 - `-XX:+UseAdaptiveSizePolicy` 开启自适应内存策略,让JVM根据运行时情况自动调整内存大小。 5. **垃圾回收...
Java 实现内存动态分配主要涉及Java内存模型以及内存管理机制,包括堆内存和栈内存的分配,以及垃圾回收等概念。下面将详细解释这些知识点。 1. **Java内存模型** Java程序运行时,内存分为堆内存(Heap)和栈内存...
本文将详细介绍如何修改Tomcat的内存大小,包括常用的内存参数及其意义,并提供具体的设置方法。 #### 一、理解Tomcat内存参数 在调整Tomcat内存之前,首先需要了解几个重要的JVM内存参数: 1. **-Xms**:表示JVM...
本篇文章将详细探讨jProfiler7在Java内存分析上的核心功能、使用方法以及在Linux环境中的配置和应用。 1. **内存分析概述** - 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的...
### Weblogic内存大小配置与调优 在IT领域,尤其是企业级应用服务器的运维与管理中,Weblogic作为一款广泛使用的中间件平台,其性能优化是确保应用稳定性和响应速度的关键。其中,合理配置Weblogic的内存大小是优化...