首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java PermGen空间是整个VM内存的一部分吗?

Java PermGen(永久代)空间是整个VM内存的一部分,它用于存储Java对象和方法,以及VM内部的一些数据结构。PermGen空间的大小会受到Java虚拟机(JVM)内存大小的限制,因此它不是固定的,而是可配置的。

PermGen空间的主要优势在于它独立于Java堆,因此它可以用于存储一些生命周期较长的对象,例如线程、连接、Socket等。此外,PermGen空间还可以用于存储一些静态数据,例如类和方法,以及VM内部的一些数据结构,例如类加载器和线程调度器。

推荐的腾讯云相关产品:腾讯云服务器、云数据库、云存储、云网络、云安全、云监控等。

产品介绍链接地址:https://cloud.tencent.com/product/服务器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JVM设置对象直接进入年老代

1.先说明一个事情就是在jdk1.8之后已经没有永久代被元空间取代,那么元空间在哪里? 说明:元空间在本地内存,自然更不是所谓年老代等分代里。 Java PermGen去了哪里?...在过去(当自定义类加载器不常见时),类大多是“静态”并且很少被卸载或收集,因此被标记为“永久”。此外,由于类JVM实现一部分而不是由应用程序创建,因此它们被视为“非堆”内存。...不,元数据信息没有消失,只是它所持有的空间不再与Java堆相邻。元数据现在已经移动到本机内存到称为“Metaspace”区域。 由于PermGen很难调整,因此转向Metaspace必要。...类元数据 Java类在Java Hotspot VM中具有内部表示,并称为类元数据。在以前版本Java Hotspot VM中,类元数据在所谓永久生成中分配。...Java Hotspot VM显式管理用于元数据空间。从操作系统请求空间,然后分成块。类加载器从其块中为元数据分配空间(块绑定到特定类加载器)。

66130

面试:精通Java;面试官:来讲一下JVM虚拟机内存模型最底层原理,必须说详细说清楚,知其所以然。看完后,你还敢在简历上写精通Java

永久代(PermGenJava7以及之前JVM对于方法区(Method Area)实现。 元空间(Metaspace)Java8以及之后JVM对于方法区(Method Area)实现。...Java8时候为什么要用元空间(Metaspace)替换掉永久代(PermGen): 永久代大小有限制,如果加载类太多,很可能导致永久代内存溢出,即java.lang.OutOfMemoryError...我们在Java8中也可以说常量池在方法区,因为永久代(PermGen)和元空间(Metaspace)对方法区(Method Area)不同实现,在上面我们刚刚也提到过。...Old GC ,清理老年代内存空间。 Full GC ,回收整个空间,包括年轻代和老年代。...在Java7以及之前还包括永久代;Java8及以后由于改成了元空间,它垃圾回收就不是由java来控制了,元空间默认情况下内存空间使用操作系统内存空间,所以空间容量比较充裕,不会发生元空间空间不足问题

30420

JDK为什么废弃永久代,而引入元空间

永久代: 在jdk7以及jdk7之前,方法区被称为永久代(PermGen) 此时永久代 Java 堆(Java Heap)一部分,用于存储类信息、方法信息、常量池信息等静态数据。...元空间和永久代不同点: 存储位置不同 为什么说存储位置不同呢? 永久代在物理上一部分,和新生代、老年代地址连续,而元空间属于本地内存。...第二个原因则是移除永久代为融合HotSpot VM与 JRockit VM而做出努力,因为JRockit没有永久代,不需要配置永久代。...不会遇到永久代存在时内存溢出错误。 将运行时常量池从PermGen分离出来,与类元数据分开,提升类元数据独立性。...-XX:MaxMetaspaceSize,最大空间,默认没有限制。如果没有使用该参数来设置类元数据大小,其最大可利用空间整个系统内存可用空间

32430

8张图 带你理解Java内存区域

很多人会误以为Java内存区域和内存模型同一个东西,其实并不是。 Java内存区域指 JVM运行时将数据分区域存储 ,简单说就是不同数据放在不同地方。通常又叫 运行时数据区域。...我总结了两个主要原因: 由于 PermGen 内存经常会溢出,引发恼人 java.lang.OutOfMemoryError: PermGen,因此 JVM 开发者希望这一块内存可以更灵活地被管理,...不要再经常出现这样 OOM 移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为 JRockit 没有永久代。...方法区逻辑上属于堆一部分,但是为了与堆进行区分,通常又叫“非堆”。 方法区比较重要一部分运行时常量池(Runtime Constant Pool),为什么叫运行时常量池呢?...类元信息被存储在元空间中。元空间没有使用堆内存,而是与堆不相连本地内存区域。所以,理论上系统可以使用内存有多大,元空间就有多大,所以不会出现永久代存在时内存溢出问题。

37930

8张图 带你理解Java内存区域

很多人会误以为Java内存区域和内存模型同一个东西,其实并不是。 Java内存区域指 JVM运行时将数据分区域存储 ,简单说就是不同数据放在不同地方。通常又叫 运行时数据区域。...: PermGen,因此 JVM 开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样 OOM 移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为...方法区逻辑上属于堆一部分,但是为了与堆进行区分,通常又叫“非堆”。 方法区比较重要一部分运行时常量池(Runtime Constant Pool),为什么叫运行时常量池呢?...只有 HotSpot 才有 “PermGen space”,而对于其他类型虚拟机,如 JRockit(Oracle)、J9(IBM) 并没有“PermGen space” 7、元空间 1.8就把方法区改用元空间了...类元信息被存储在元空间中。元空间没有使用堆内存,而是与堆不相连本地内存区域。所以,理论上系统可以使用内存有多大,元空间就有多大,所以不会出现永久代存在时内存溢出问题。

2.3K10

Xms Xmx PermSize MaxPermSize 区别

1)堆(Heap)和非堆(Non-heap)内存  按照官方说法:“Java 虚拟机具有一个堆,堆运行时数据区域,所有类实例和数组内存均从此处分配。堆Java 虚拟机启动时创建。”...说说为什么会内存益出:  (1)这一部分内存用于存放Class和Meta信息,Class在被 Load时候被放入PermGen space区域,它和存放InstanceHeap区域不同。 ...简单说就32位处理器虽然可控内存空间有4GB,但是具体操作系统会给一个限制,  这个限制一般2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit...说到实际物理内存这里需要说明一点,  如果你内存1024MB,但实际系统中用到并不可能1024MB,因为有一部分被硬件占用了。 3....比如我们使用-vm C:/Java/jre1.6.0/bin/javaw.exe参数设置虚拟机, 在eclipse.ini文件中要写成这样: -vm  C:/Java/jre1.6.0/bin/javaw.exe

3.9K10

优化Java堆大小5个技巧

2、PermGen(永久代):适用于Sun HotSpot VM((PermGen空间Java7或者Java8更新中将会被删除) 3、Native Heap(C-Heap):适用于所有的JVM厂商。...越多类加载器和类在运行时被加载,在HotSpot VM PermGen空间和内部JIT相关优化对象上需求就越高。...在JVM进程上部署应用程序越多,对本地内存PermGen空间要求就越高。数据缓存并不是序列化为一个磁盘或数据库,它将从OldGen空间里面需要额外内存。...对于32位JVM,通常不推荐一个Java堆大小超过2 GB(-Xms2048m,-Xmx2048m),对于Java EE应用程序和线程来说这样将需要足够内存和本机堆PermGen。...堆转储非常强大,它可以允许你查看和理解Java整个内存占用,包含类加载器相关数据和在内存占用分析中必须要做,特别是内存泄漏。

49010

Java内存线程共享!面试官:你确定

在开始进入正题之前,请允许我问一个和这个问题看似没有任何关系问题:Java对象内存分配过程如何保证线程安全Java对象内存分配过程如何保证线程安全?...我们知道,Java一门面向对象语言,我们在Java中使用对象都需要被创建出来,在Java中,创建一个对象方法有很多种,但是无论如何,对象在创建过程中,都需要进行内存分配。...所以说,因为有了TLAB技术,堆内存并不是完完全全线程共享,其eden区域中还是有一部分空间分配给线程独享。...还有一点需要注意,我们说TLAB在eden区分配,因为eden区域本身就不太大,而且TLAB空间内存也非常小,默认情况下仅占有整个Eden空间1%。...所以,“堆线程共享内存区域”这句话并不完全正确,因为TLAB内存一部分,他在读取上确实是线程共享,但是在内存分配上,线程独享

1.7K40

万字精美图文,带你掌握 JVM 内存布局及细节分析

1.2 堆区调整 根据Java虚拟机规范规定,Java堆可以处于物理上不连续内存空间中,只要逻辑上连续即可,就像我们磁盘空间一样。...Old区/Young区内存比例 因为新生代由Eden + S0 + S1组成,所以按照上述默认比例,如果eden区内存大小40M,那么两个survivor区就是5M,整个young区就是50M...PermGen,因此 JVM 开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样 OOM 2、移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为...准确来说,Perm 区中字符串常量池被移到了堆内存Java7 之后,Java 8 时,PermGen 被元空间代替,其他内容比如类元信息、字段、静态属性、方法、常量等都移动到元空间区。...六、直接内存 直接内存(Direct Memory)并不是虚拟机运行时数据区一部分,也不是Java虚拟机规范中定义内存区域。

56910

万字精美图文 | JVM学习面试大总结

1.2 堆区调整 根据Java虚拟机规范规定,Java堆可以处于物理上不连续内存空间中,只要逻辑上连续即可,就像我们磁盘空间一样。...因为新生代由Eden + S0 + S1组成,所以按照上述默认比例,如果eden区内存大小40M,那么两个survivor区就是5M,整个young区就是50M,然后可以算出Old区内存大小100M...PermGen,因此 JVM 开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样 OOM 2、移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为...准确来说,Perm 区中字符串常量池被移到了堆内存Java7 之后,Java 8 时,PermGen 被元空间代替,其他内容比如类元信息、字段、静态属性、方法、常量等都移动到元空间区。...六、直接内存 直接内存(Direct Memory)并不是虚拟机运行时数据区一部分,也不是Java虚拟机规范中定义内存区域。

30610

看懂这6张图,理解JVM内存布局就没问题了!

1.2 堆区调整 根据Java虚拟机规范规定,Java堆可以处于物理上不连续内存空间中,只要逻辑上连续即可,就像我们磁盘空间一样。...Old区/Young区内存比例 因为新生代由Eden + S0 + S1组成,所以按照上述默认比例,如果eden区内存大小40M,那么两个survivor区就是5M,整个young区就是50M...移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为 JRockit 没有永久代。...准确来说,Perm 区中字符串常量池被移到了堆内存Java7 之后,Java 8 时,PermGen 被元空间代替,其他内容比如类元信息、字段、静态属性、方法、常量等都移动到元空间区。...六、直接内存 直接内存(Direct Memory)并不是虚拟机运行时数据区一部分,也不是Java虚拟机规范中定义内存区域。

40350

深入理解JVM 内存布局及细节分析

2.2 堆区调整 根据Java虚拟机规范规定,Java堆可以处于物理上不连续内存空间中,只要逻辑上连续即可,就像我们磁盘空间一样。...区内存比例 因为新生代由Eden + S0 + S1组成,所以按照上述默认比例,如果eden区内存大小40M,那么两个survivor区就是5M,整个young区就是50M,然后可以算出Old...PermGen,因此 JVM 开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样 OOM 2、移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 融合,因为...准确来说,Perm 区中字符串常量池被移到了堆内存Java7 之后,Java 8 时,PermGen 被元空间代替,其他内容比如类元信息、字段、静态属性、方法、常量等都移动到元空间区。...08 直接内存 直接内存(Direct Memory)并不是虚拟机运行时数据区一部分,也不是Java虚拟机规范中定义内存区域。

78510

Java 常见内存溢出异常与代码实现

下面具体代码: /** * @author xiongyongshun * VM Args: java -Xss64k */ public class OutOfMemoryErrorTest...(OutOfMemoryErrorTest.java:27) 方法区内存溢出 注意, 因为 JDK8 已经移除了永久代, 取而代之 metaspace, 因此在 JDK8 中, 下面两个例子都不会导致...在方法区中, 有一部分内存用于存储常量池, 因此如果代码中常量过多时, 就会耗尽常量池内存, 进而导致内存溢出.那么如何添加大量常量到常量池呢?...下面实现常量池内存溢出代码例子: /** * @author xiongyongshun * VM Args: -XX:PermSize=10M -XX:MaxPermSize=10M *...在 JDK8 中, 使用了 MetaSpace 区域来存放 Class 相关信息, 因此当 MetaSpace 内存空间不足时, 会抛出 java.lang.OutOfMemoryError: Metaspace

70780

空间和永久代区别

同时,由于类classJVM实现一部分,并不是由应用创建,所以又被认为“非堆(Non-Heap)”内存。...从PermGen移除interned strings更多信息查看这里。 注:从JDK7开始永久代移除工作,贮存在永久代一部分数据已经转移到了Java Heap或者Native Heap。...对于32位JVM,C-Heap容量=4G-Java Heap-PermGen;对于64位JVM,C-Heap容量=物理服务器总RAM+虚拟内存-Java Heap-PermGen 随着JDK8...永久代移除对最终用户意味着什么? 由于类元数据可以在本地内存(native memory)之外分配,所以其最大可利用空间整个系统内存可用空间。...3,元空间对象位置固定。 4,如果发现某个加载器不再存货了,会把相关空间整个回收。 为什么这么做呢?

5.5K10

Java面试- JVM 内存模型讲解

经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 原理?我不懂 JVM ,但我照样可以开发。确实,但如果懂得了 JVM ,可以让你在技术这条路上走更远一些。...堆(Heap) 堆 JVM 内存中最大一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。...随着 Java 版本更新,其内容又有了一些新变化: 在 Java6 版本中,永久代在非堆内存区;到了 Java7 版本,永久代静态变量和运行时常量池被合并到了堆中;而到了 Java8,永久代被元空间...永久代内存经常不够用或发生内存溢出(应该是 JVM 中占用内存最大一块),产生异常 java.lang.OutOfMemoryError: PermGen。...虚拟机栈(VM Stack) 虚拟机栈线程私有的内存空间,它和 Java 线程一起创建。

75510

程序员进阶系列:OOM 都搞不定,还敢妄称自己Java高级攻城狮?

:Requested array size exceeds VM limit 在实际工作中,若真遇到了上面罗列这些内存溢出异常,你是否能够根据异常提示迅速定位哪儿出了幺蛾子,并是否能够铲除这些幺蛾子呢...面对此种异常,常规解决思路: 要检查一下代码是否存在优化空间; 依据内存溢出时快照文件 xx.hprof 来判断是否存在内存泄露,不需要对象有没有被回收掉; 调节虚拟机堆参数(-Xms -Xmx...场景三 java.lang.OutOfMemoryError: PermGen space 首先来解释一下 PermGen space 用处,主要用来存储每个类信息,例如:类加载器引用、运行时常量池...当出现 java.lang.OutOfMemoryError: PermGen space 异常时,要能够知道可能由于太多类或者太大类被加载到方法区导致。...元空间大小要求取决于加载数量以及这种类声明大小,所以主要原因很可能太多类或太大类加载到元空间导致

44410

排查Java内存问题

对于一个Java进程来说,会有多个内存池或空间——Java堆、Metaspace、PermGen(在Java 8之前版本中)以及原生堆。...随着时间推移,在堆中这些无意被持有的对象可能会随之增加,最终填满整个Java空间,导致频繁垃圾收集,最终程序会因为OutOfMemoryError错误而终止。...在这个内存区域中,PermGen意料之外增长以及OutOfMemoryError意味着类没有按照预期卸载,或者所指定PermGen空间太小,无法容纳所有要加载类和它们元数据。...Metaspace并不是Java一部分,它是分配在原生内存。所以,它仅仅受到机器可用原生内存数量限制。...在解决PermGen和Metaspace内存问题时,堆转储同样有用

2.7K50

JVM内存模型基础

堆(Heap) 堆JVM内存中最大一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。...)代替了之前永久代,并且元空间存储位置本地内存。...这是因为在JDK1.7版本中,指定PermGen区大小为8M,由于PermGen中类元数据信息在每次FullGC时候都可能被收集,回收率都偏低,成绩很难令人满意;还有,为PermGen分配多大空间很难确定...4.虚拟机栈(VM stack) Java虚拟机栈线程私有的内存空间,它和Java线程一起创建。...运行以上代码时,JVM整个处理过程如下: 1.JVM向操作系统申请内存,JVM第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具体内存分配表,然后把内存起始地址和终止地址分配给

16420
领券