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

是否有一个普遍认为的标准来确定PermGen和堆空间之间的适当比例?

在Java虚拟机中,PermGen(永久代)和堆空间是两个不同的内存区域。PermGen用于存储类的元数据信息,如类的结构、方法、字段等,而堆空间用于存储对象实例。

在Java 8及之前的版本中,PermGen是一个固定大小的内存区域,其大小由启动参数决定。然而,在Java 8之后,PermGen被移除,取而代之的是Metaspace(元空间),它使用本地内存来存储类的元数据信息,并且具有动态调整大小的能力。

因此,对于Java 8及之后的版本,没有一个普遍认可的标准来确定PermGen和堆空间之间的适当比例。Metaspace的大小取决于应用程序的类加载行为和元数据的大小,可以通过调整启动参数来控制Metaspace的大小。

对于堆空间,其大小应根据应用程序的需求和性能要求进行调整。一般来说,如果应用程序需要存储大量的对象实例,堆空间应该设置得较大。如果应用程序的对象实例较少,可以适当减小堆空间的大小,以节省内存资源。

在腾讯云的云计算服务中,可以使用云服务器(CVM)来运行Java应用程序。腾讯云提供了丰富的云服务器规格和配置选项,可以根据应用程序的需求选择适当的配置。此外,腾讯云还提供了云数据库(TencentDB)和云原生应用平台(TKE)等产品,用于支持Java应用程序的数据库存储和容器化部署。

更多关于腾讯云的产品和服务信息,可以访问腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

元空间和永久代的区别

永久代是一片连续的堆空间,在JVM启动之前通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间,默认大小是64M(64位JVM由于指针膨胀,默认是85M)。...而且应该为PermGen分配多大的空间很难确定,因为PermSize的大小依赖于很多因素,比如JVM加载的class的总数,常量池的大小,方法的大小等。...元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。   ...三、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈: 每个线程有一个私有的栈,随着线程的创建而创建。

5.8K10

Java8内存结构的改变~

一、JVM 内存分布 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 ? 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。...这里有一个小细节需要注意,catch 捕获的是 Throwable,而不是 Exception。...因此,可以大致验证 JDK 1.7 和 1.8 将字符串常量由永久代转移到堆中,并且 JDK 1.8 中已经不存在永久代的结论。现在我们看看元空间到底是一个什么东西?...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

1.2K20
  • 优化Java堆大小的5个技巧

    在JVM进程上部署的应用程序越多,对本地内存和PermGen空间的要求就越高。数据缓存并不是序列化为一个磁盘或数据库,它将从OldGen空间里面需要额外的内存。...除非你需要大量的数据缓存来实现适当的性能,典型的门户应用网站(媒体)繁重的应用程序需求。数据缓存太多的时候应该用一个黄色的标志标注一下,最好早点去重新审视一下一些设计元素。...虽然上面的信息是至关重要的,并且关于Java堆的设置进行了“最佳猜测”,对应用程序的行为进行模拟并且进行适当的分析、负载和性能测试来验证Java堆内存要求。...负载测试和性能测试是必不可少的,通过模拟并发用户来验证早期评估是否正确,它也会把应用程序瓶颈暴露出来并且允许你进行微调。推荐一个非常容易上手的工具:Apache Jmeter。...与当前的JVM规范相比,适当的垂直和水平伸缩,包括在每个物理主机和跨多个主机上建立JVM进程来满足整个吞吐量和容量。

    64810

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

    本文主题内容: 1、JVM 内存区域概览 2、堆区的空间分配是怎么样?堆溢出的演示 3、创建一个新对象内存是怎么分配的? 4、方法区 到 Metaspace 元空间 5、栈帧是什么?栈帧里有什么?...(堆区画小了,按理来说应该是最大的区域) 如果按照线程是否共享来分类的话,如下图所示: PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,就很自然而然的就记住了。不需要死记硬背。...2.3 堆的默认空间分配 另外,再强调一下堆空间内存分配的大体情况。 这里可能就会有人来问了,你从哪里知道的呢?如果我想配置这个比例,要怎么修改呢? 我先来告诉你怎么看虚拟机的默认配置。...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。...除了Native方法以外,Java方法都是通过Java 虚拟机栈来实现调用和执行过程的(需要程序技术器、堆、元空间内数据的配合)。所以Java虚拟机栈是虚拟机执行引擎的核心之一。

    98110

    java常见内存溢出(OOM)解决方案

    通常存放基本数据类型,对象引用(一个指向对象起始地址的引用指针或一个代表对象的句柄),reeturnAddress类型(指向一条字节码指令的地址) 栈区域有两种异常类型:如果线程请求的栈深度大于虚拟机所允许的深度...1G,默认当空余堆内存小于40%时,jvm会最大Heap的大小到-Xmx指定大小,可通过-XX:MinHeapFreeRatio来指定这个比例,当空余堆内存大于70%时,JVM会将Heap的大小往-Xms...指定的大小调整,可通过-XX:MaxHeapFreeRatio来指定这个比例,但通常为了避免频繁调整HeapSize的大小,将-Xms和-Xmx的值设为相同。...一般的异常信息:java.lang.OutOfMemoryError:Java heap spacess java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象...如果不存在泄漏,那就应该检查虚拟机的参数(-Xmx与-Xms)的设置是否适当。

    87210

    Tomcat7优化

    首先,是客户端访问tomcat的一个过程,如图所示: 图中间虚线框部分是 Apache基金下的服务器来做静态资源处理的,而这部分需要花费大量时间,当用nginx和tomcat做企业级集群的时候,需要禁用掉....Http11NioProtocol"/>   中加入 executor="tomcatThreadPool",即最后为:   根据业务场景和服务器硬件资源条件可以适当的加大线程连接池,根据第三方工具去开启并发测试来确定一个最好的连接池数...  PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到...其它参数:   -XX:NewSize :默认为2M,此值设大可调大新对象区,减少FullGC次数   -XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)...  -XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)   -XX:userParNewGC

    1.7K100

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

    本文主题内容: JVM 内存区域概览 堆区的空间分配是怎么样?堆溢出的演示 创建一个新对象内存是怎么分配的? 方法区 到 Metaspace 元空间 栈帧是什么?栈帧里有什么?怎么理解?...(堆区画小了2333,按理来说应该是最大的区域) 如果按照线程是否共享来分类的话,如下图所示: ?...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。...也就是说虚拟机栈的生命周期和线程是一致,并且是线程私有的。除了Native方法以外,Java方法都是通过Java 虚拟机栈来实现调用和执行过程的(需要程序技术器、堆、元空间内数据的配合)。...局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。 这里直接上代码,更好理解。

    47150

    Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    一、JVM 内存模型   根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。   1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。...这里有一个小细节需要注意,catch 捕获的是 Throwable,而不是 Exception。...因此,可以大致验证 JDK 1.7 和 1.8 将字符串常量由永久代转移到堆中,并且 JDK 1.8 中已经不存在永久代的结论。现在我们看看元空间到底是一个什么东西?   ...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    33200

    Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。...这里有一个小细节需要注意,catch 捕获的是 Throwable,而不是 Exception。...因此,可以大致验证 JDK 1.7 和 1.8 将字符串常量由永久代转移到堆中,并且 JDK 1.8 中已经不存在永久代的结论。现在我们看看元空间到底是一个什么东西?   ...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    51020

    Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。...这里有一个小细节需要注意,catch 捕获的是 Throwable,而不是 Exception。...因此,可以大致验证 JDK 1.7 和 1.8 将字符串常量由永久代转移到堆中,并且 JDK 1.8 中已经不存在永久代的结论。现在我们看看元空间到底是一个什么东西?...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    1.3K20

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

    本文主题内容: 1、JVM 内存区域概览 2、堆区的空间分配是怎么样?堆溢出的演示 3、创建一个新对象内存是怎么分配的? 4、方法区 到 Metaspace 元空间 5、栈帧是什么?栈帧里有什么?...(堆区画小了2333,按理来说应该是最大的区域) 如果按照线程是否共享来分类的话,如下图所示: ? PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,就很自然而然的就记住了。...从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代。再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。...元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。...除了Native方法以外,Java方法都是通过Java 虚拟机栈来实现调用和执行过程的(需要程序技术器、堆、元空间内数据的配合)。所以Java虚拟机栈是虚拟机执行引擎的核心之一。

    62310

    选择JDK1.8的理由之JVM内存变化

    堆内存不够最常见的错误就是OOM(OutOfMemoryError) 栈内存溢出最常见的错误就是StackOverflowError,程序有递归调用时候最容易发生 二、堆内存划分 在JDK7以及其前期的...这将是一个好消息:意味着不会再有java.lang.OutOfMemoryError:PermGen问题,也不再需要你进行调优及监控内存空间的使用,但是新特性不能消除类和类加载器导致的内存泄漏。...你需要使用不同的方法以及遵守新的命名约定来追踪这些问题。 PermGen 空间的状况 这部分内存空间将全部移除。...Jstat 和 JVisualVM两个工具,在我们使用b75版本进行测试时,已经更新了,但是还是能看到老的PermGen空间的出现。...:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    51920

    聊聊jvm的PermGen与Metaspace

    =N来设置最大大小,但是由于应用程序string.intern通常是不可预测和不可控的,因此不好设置这个大小。...设置不好的话,常常会引起 java.lang.OutOfMemoryError: PermGen space java7,8的字符串常量池在堆中实现 字符串常量池被限制在整个应用的堆内存中,在运行时调用...如果没有使用-XX:MaxMetaspaceSize来设置类的元数据的大小,其最大可利用空间是整个系统内存的可用空间。JVM也可以增加本地内存空间来满足类元数据信息的存储。...Metaspace相关参数 -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,...PermGen是HotSpot的实现特有的,JRockit并没有PermGen一说 doc Java8内存模型—永久代(PermGen)和元空间(Metaspace) JVM内存调优相关的一些笔记(杂)

    2K10

    JVM内存划分

    由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。...当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。...,所以Java堆中还可以细分为:新生代和老年代,在细致一点的有Eden空间,From Survivor空间,To Survivor空间等。...这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。 备注:本机直接内存的分配不会受到Java堆大小的限制,受到本机总内存和处理器寻址空间的限制,有OOM异常。...有指针碰撞和空闲列表两种分配方式:选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的GC是否带有压缩整理功能决定;因此,在使用Serial、ParNew等带Compact过程的收集器时

    1.1K20

    Tomcat之jvm及连接数设置

    一、Tomcat的JVM提示内存溢出 查看%TOMCAT_HOME%\logs文件夹下,日志文件是否有内存溢出错误 二、修改Tomcat的JVM 1、错误提示:java.lang.OutOfMemoryError...请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。 ...-XX:MaxNewSize=size in bytes      允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。...-XX:NewRatio=value      改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。 ...-XX:SurvivorRatio=number      改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。

    1.4K30

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

    本文主题内容: 1、JVM 内存区域概览 2、堆区的空间分配是怎么样?堆溢出的演示 3、创建一个新对象内存是怎么分配的? 4、方法区 到 Metaspace 元空间 5、栈帧是什么?栈帧里有什么?...(堆区画小了2333,按理来说应该是最大的区域) 如果按照线程是否共享来分类的话,如下图所示: ? PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,就很自然而然的就记住了。...从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代。再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。...1.3 堆的默认空间分配 另外,再强调一下堆空间内存分配的大体情况。 ? 这里可能就会有人来问了,你从哪里知道的呢?如果我想配置这个比例,要怎么修改呢? 我先来告诉你怎么看虚拟机的默认配置。...除了Native方法以外,Java方法都是通过Java 虚拟机栈来实现调用和执行过程的(需要程序技术器、堆、元空间内数据的配合)。所以Java虚拟机栈是虚拟机执行引擎的核心之一。

    32410

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

    当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。 那么它和永久代有什么不同呢?这就是个问题了。 那么他们的不同点都有哪些呢?...元空间和永久代的不同点: 存储位置不同 为什么说存储位置不同呢? 永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。...现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。 为什么要废弃永久代,而使用元空间来进行替换呢?...它的大小不容易确定,因为这其中有很多影响因素,比如类的总数,常量池的大小和方法数量等。 -XX:MaxPermSize 指定太小很容易造成永久代内存溢出。...毕竟两大虚拟机要做统一永久代和元空间势必要废弃一个,而永久代的痛点是在于大小不好设置,设置小了会频繁发生GC,而且永久代的GC是效率很低且费时间,因为判断一个类是否可以被回收的条件很苛刻且费时,会占用资源影响用户线程的执行导致整体吞吐量变低

    72230

    OutOfMemory及其解决方法「建议收藏」

    堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。...堆内存用来存放由new创建的对象和数组 在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由...缺点就是要在运行时动态分配内存,存取速度较慢; 栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。...简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制, 这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit...2.Java代码导致错误的解决: 重点排查以下几点: 1)检查代码中是否有死循环或递归调用。 2)检查是否有大循环重复产生新对象实体。 3)检查对数据库查询中,是否有一次获得全部数据的查询。

    10K10

    Java性能优化指南(一)

    等待有需要的时候才进行分配 JVM判断是否进行编译的标准一般是运行的次数,当运行次数达到编译阈值的时候,编译器就认为获取了足够的信息可以对代码进行编译了 -XX:CompileThreshold=N...GC roots 一个对象被使用的判断依据是从GC Roots 出发,分析是否可以达到该对象,可以作为GC roots的引用点有 方法区中静态变量和常量引用的对象 活动线程 本地方法栈中的引用 当一个对象到...堆大小由两个参数值控制:分别是初始值(-Xms N)和最大值(-Xmx N),JVM的目标是找到一个合理的堆值,因此会自动在这两个值之间进行调整,一般都是根据GC消耗的时间来决定的。...,前者确定比例,后者确定是否使用这个比例,如果-XX:+UseCMSInitiatingOccupancyOnly开启,默认的比例为70%,如果不启动,那么CMS会根据更加复杂的算法来判断何时启动并发回收...,导致更多的老年代GC,如果堆的大小无法增加,那么Minor GC和老年代GC之间存在一个取舍。

    67320

    学习笔记0530----Tomcat扩展

    请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。...-XX:MaxNewSize=size in bytes 允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。...-XX:NewRatio=value 改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。...-XX:SurvivorRatio=number 改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。...JMX是Java官方提供的一套用于监控Java程序和JVM运行时状态的标准API,通过JMX我们可以监控服务器的硬件资源(CPU、内存等)、JVM内存使用情况、JVM线程情况、JVM中的类的情况等指标。

    64110
    领券