VM 的Permanent generation space,实际上就是方法区,存储了下面两种类型的数据:
1.Class的节本信息
Package Name
Super class package name
Class or interface
Type modifiers
Super inferface package name
2.其它信息
The constant pool for the type
Field information
Method information
All class (static) variables declared
in the type, except constants
A reference to class ClassLoader
A reference to class Class
其中constant pool包含以下信息:
literal strings
注:如String s="abc",这样的字面值,是从pool中取的,如果取不到会在池中存储一份,如果另外有个变量String t=“abc”,它首先会在pool中拿,如果能拿到,则不会新创建一份,String.intern方法也一样,因此用intern方法要特别注意,容易导致perm space out of memory
final variable values
如final s = “”;
class names
method names
String.intern();
另外要注意,在默认情况下,perm space是可以被垃圾收集的(除了CMS垃圾收集器之外),不再使用的class将会被unload,用参数-Xnoclassgc可以设置让perm space不卸载不再使用的class。
一般GC算法也是会照顾permanent generation的,每次permanent generation满了要做扩展前都会触发一次FULL GC,除非设置了-Xnoclassgc。
另外如果使用CMS(ConcMarkSweep GC)算法的话,开了-XX:+UseConcMarkSweepGC标志,默认情况下就是不会扫描permanent generation的,需要同时打开下面两个标志位才能让CMS GC扫描permanent generation。
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
只针对SUN的JVM有效。
分享到:
相关推荐
JAVA内存溢出 JAVA中OutOfMemoryError(内存溢出)的三种情况及解决办法 Java中的OutOfMemoryError(内存溢出)是一种常见的错误,本文将详细介绍OutOfMemoryError的三种情况及其解决方法。 首先,我们需要了解...
PermGen space 是 Permanent Generation space 的缩写,表示内存的永久保存区域。这个区域用于存放 Class 和 Meta 信息。Class 在被 Load 时就会被放入 PermGen space 区域,它和存放 Instance 的 Heap 区域不同。...
在Java编程中,"java heap space"内存溢出是一个常见的问题,它通常发生在应用程序尝试分配超过JVM堆内存限制的对象时。这个问题对于任何Java开发者来说都至关重要,因为如果不妥善处理,可能会导致程序崩溃。以下是...
Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)、永久代(Permanent Generation Space)等。不同的内存区域有着不同的作用和特点: 1. **堆内存**:这是应用程序中对象...
Java内存不足PermGen space错误通常出现在Java程序运行过程中,尤其是当Java EE服务器(如Tomcat、JBoss等)加载WAR或EAR包时。这个错误的根本原因在于Java虚拟机(JVM)的永久代(Permanent Generation Space)内存...
### Java内存结构详解 ...Java内存模型的设计是为了高效地管理内存资源,确保程序能够稳定运行。通过对堆、栈、方法区以及本地方法栈的理解,我们可以更好地优化Java程序的性能,避免内存泄漏等问题的发生。
#### 二、Java内存管理基础知识 在理解内存泄露和溢出之前,我们需要先了解Java虚拟机(JVM)的基本内存结构及其管理机制: 1. **JVM内存区域**: - **年轻代(Young Generation)**: 包括Eden区和两个Survivor区...
Java内存溢出问题通常指的是Java应用程序在运行过程中由于内存分配不当或使用过度导致JVM无法分配更多的内存,从而抛出`java.lang.OutOfMemoryError`异常。本文将深入探讨Java内存溢出的不同类型及其解决方案。 1. ...
Java内存监控是Java应用程序性能优化的关键环节,它可以帮助开发者识别并解决内存泄漏、垃圾收集问题以及潜在的服务器性能瓶颈。本文将深入探讨Java内存监控的相关知识点,并提供实用的命令工具来帮助你查找和解决...
《JAVA内存调优白皮书(IBM)》是IBM公司发布的一份技术文档,主要针对Java应用程序的内存管理和性能优化提供了深入的指导。在Java世界中,内存管理是决定程序性能、稳定性和可扩展性的重要因素,特别是Java虚拟机...
Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存...通过上述方法,可以有效地预防和解决`java.lang.OutOfMemoryError: Java heap space`问题,优化JVM内存管理,提升应用程序的稳定性和性能。
PermGen space 溢出是指 Permanent Generation space 的内存溢出。PermGen space 是 JVM 存放 Class 和 Meta 信息的区域。如果程序载入了太多的 CLASS,可能会导致 PermGen space 溢出。解决方法是通过-XX:PermSize ...
PermGen(Permanent Generation)是Java虚拟机(JVM)的一个内存区域,主要用于存储类的元数据,如类的名称、方法信息等。与堆区不同,堆区中的对象在不再被引用时会被垃圾收集器(Garbage Collector, GC)回收,但...
总之,"java.lang.OutOfMemoryError: PermGen space"错误是由于Java虚拟机的 PermGen 区域内存不足造成的,可以通过增大 PermGen 区域的大小、升级JVM版本、优化类加载和库的使用等方式来解决。对于任何内存管理问题...
PermGen空间,全称为Permanent Generation space,是Java虚拟机(JVM)内存管理的一部分,主要用来存储类和元数据信息。当Java类加载器加载类时,这些类的信息会被存储到PermGen空间中。这与存放类实例的堆区(Heap...
本文主要讨论如何解决MyEclipse中的内存溢出问题以及相关的Java内存管理知识点。 首先,解决内存溢出问题的关键在于调整JVM的内存配置。在MyEclipse中,可以通过以下路径进行设置:Window > Preferences > ...
- 堆是Java内存模型中的主要部分,主要用于存储对象实例。所有的类实例和数组都在堆中分配内存。 - 堆内存是动态分配的,大小可变,由Java虚拟机(JVM)管理。 - 垃圾回收机制(Garbage Collection, GC)负责自动...
JVM内存模型是Java虚拟机(JVM)中的一种内存管理机制,它将内存区分为永久区内存(Permanent space)和堆内存(heap space)两大块。永久区内存用于存放加载的Class类级对象,如class本身、method、field等等,而堆...