首页
学习
活动
专区
工具
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.7K10

Java8内存结构改变~

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

1.1K20
  • 优化Java大小5个技巧

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

    61710

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

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

    91210

    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)设置是否适当

    84110

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

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

    45750

    Tomcat7优化

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

    1.7K100

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

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

    32900

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

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

    50220

    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虚拟机栈是虚拟机执行引擎核心之一。

    61210

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

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

    48620

    聊聊jvmPermGen与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空间等。...这样能在一些场景中显著提高性能,因为避免了在JavaNative中来回复制数据。 备注:本机直接内存分配不会受到Java大小限制,受到本机总内存处理器寻址空间限制,OOM异常。...指针碰撞空闲列表两种分配方式:选择哪种分配方式由Java是否规整决定,而Java是否规整又由所采用GC是否带有压缩整理功能决定;因此,在使用Serial、ParNew等带Compact过程收集器时

    99420

    Tomcat之jvm及连接数设置

    一、TomcatJVM提示内存溢出 查看%TOMCAT_HOME%\logs文件夹下,日志文件是否内存溢出错误 二、修改TomcatJVM 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虚拟机栈是虚拟机执行引擎核心之一。

    31910

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

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

    67430

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

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

    8.9K10

    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之间存在一个取舍。

    65820

    学习笔记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中情况等指标。

    63210
    领券