Java reservedcodecachesize虚拟机参数案例详解
作者:晴天 发布时间:2022-03-15 12:18:48
一、reservedcodecachesize参数介绍
该参数是JvM虚拟机调优中调整内存大小的一个设置参数,值得大小设置直接影响到Code Cache的大小,而jvm编译的代码有常常存放在Code Cache中,而Code Cache的空间内存又支撑着jvm的正常运行,如果该空间不足jvm虚拟机将会发生问题,并且性能持续降低。
Code Cache就是所谓的代码缓存,由于JVM虚拟机的内存默认是有大小限制的,因此代码缓存区域肯定也是有一定大小限制,一般的Windows电脑上64位系统下它的默认大小应该是48M,如果代码缓存已满则jvm在编译代码时的优化设置就会被禁用,这也就是为什么jvm性能会持续降低的原因。
合理的调整该reservedcodecachesize值设置的大小就可以达到令JVM虚拟机不断调优不断进行优化而达到高性能执行的目的。
二、该参数如何设置与调优
1)reservedcodecachesize调优说明
在学会如何设置该参数值得大小与如何调用之前,我们首先要明白一个问题,就是jvm虚拟机本身默认的配置已经是非常合理的了,若非遇到性能瓶颈的情况下,是不需要进行调整该值的大小的。
即便设置该值的大小也是需要根据本机本地电脑系统内存的总大小作为参考指导,也就是说该值调整需要根据电脑系统的内存来做出判断的,并没有固定的值。
我们的项目在生产环境中平时运行的很好,然而经常会遇到性能问题的时候,我们才会考虑配置jvm的参数,调整虚拟机性能的最大化。
2)如何判断reservedcodecachesize的大小导致的性能降低
那么问题来了,我们该如何判断是由于该参数默认值太小导致代码缓存已满而造成的性能有问题呢?这时我们可以查看JVM的运行日志,它的日志中会显示出下面截图中的警告信息,警告我们代码缓存已满。此时jvm的编译器就会被禁止使用,因此代码编译停止直接导致jvm运行速度迅速下降。
如果发现上图中的警告消息,说明我们就该设置该参数的值调整其大小。
3)调整该参数值得大小进行调优
接下来就是reservedcodecachesize参数值调整其大小进行性能调优的重中之重了,我们上文中也提到过了调整该值的大小是根据本地内存的做参考依据的,这里的设置只能有一定的参考意义,并不适用每一台机器。
只要报上图中的警告信息就说明代码缓存空间太小不够用,因此需要将值调大,其次jvm的垃圾回收期是不会回收代码缓存空间的,随着jvm运行时间不断的增加,该值得空间可用缓存也会越来越少。
因此解决办法有两个,我们可以从下面这两方面进行,根据工作经验以及生产经验来看,一般将该值的大小调整为256兆,具体代码如下:
XX:ReservedCodeCacheSize=256m
另一个方面我们就可以配置jvm的垃圾回收机制去回收代码缓存空间,开启代码如下:
XX:+UseCodeCacheFlushing
三、jvm虚拟机其它参数详解
1)-Xms -Xmx参数详解
-Xms和-XMx两个参数分别指代jvm初始分配的内存大小和JVM能够分配到堆内存上限的最大值,常用的标记单位一般是M或者g。
我们在jvm启动时可以设置合理的这两个参数的值的大小,其实jvm也会自动调整堆内存的大小,所以当看到实际的值与我们设定的值不一致的时候,不要惊慌,那是因为jvm在动态的调整。
2)-XX:PermSize and -XX:MaxPermSize参数详解
上面的两个参数分别指代非堆内存的初始化最小值以及非堆内存的上限最大值,当jvm中堆空间的大小过小,或者是小于50%时就会发出警告,报堆内存太小的警告信息,此时一般就是指的PermSize的值太小,我们可以适当地对其进行调整,不过还是要根据本地机器的内存大小来设置。
此外,这两个值还直接影响到永久代的大小,如果Java中引入了大量的第三方类库,而jvm在编译时需要将这些大量类库加载到内存中,需要加载到永久代中,这时可以适当调大来增加永久带的大小。
3)-XX:OnOutOfMemoryError参数详解
OnOutOfMemoryError参数就是告诉我们当我们的jvm发生内存溢出或者是内存泄漏时,我们可以设置一些指令来告诉我们的程序管理者。
该参数就可以完美的设置,比如说发邮件告诉我们做一些内存清理和内存设置的工作。
上图中的例子就是设置了一下该参数,然后将内存溢出的详细信息打包成一个文件运行在jvm的脚本中。
来源:http://www.itjcw123.cn/2983.html


猜你喜欢
- 本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下封装了一个选择年月的控件,XAML代码:<UserCo
- 一、添加联系人Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppe
- 前言OpenTelemetry作为一个分布式追踪的项目,他支持非常多的语言,如Java,Golang,Python等,鉴于笔者的主力语言为J
- Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单。最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装Fl
- 一、简述:cmd中,执行java命令与javac命令的区别:javac:是编译命令,将java源文件编译成.class字节码文件。例如:ja
- 单线程实现文件分割在老的FAT32文件系统中,最大的单个文件大小必须保存在4G内,对于经常看电影的我这个是不能允许的。不过现在Windows
- 难点是泛型如何转换一、arrayList<Map<String, Object>>转化json字符串,存入redis
- 引言平时使用ProtoStuff作为序列化工具,对于一些POJO对象序列化,但是在实际使用中,发现针对BigDecimal对象进行序列化时却
- 分享一个小技巧:在日常开发中有时候需要切换到另外的一个分支,但在某些条件下当前的分支上存在一些文件尚未提交,这时候就需要使用到idea自带的
- 内网用户或 * 的用户使用 using System.IO; using System.Net; public string get_ht
- 常用的字符串转date,和日期转字符串的方法,具体内容如下package com.cq2022.zago.base.util; import
- SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):cache – 对给定命名空间的缓存配置。cache-ref – 对其他命
- 异步、多线程、任务、并行编程之一:选择合适的多线程模型本篇概述:@FCL4.0中已经存在的线程模型,以及它们之间异同点;@多线程编程模型的选
- maven配置项目的jdk版本无效排查最近在配置项目的jdk的时候发现在pom.xml中配置的1.8版本无效,maven更新后就变成了1.7
- 一 ,定义接口和抽象类interface IPerson{ //获取名字 fun getName():String //获取身份证ID fu
- 本文开始做一个网上商城的项目,首先从搭建环境开始,一步步
- Android 中下拉菜单,即如html中的<select>,关键在于调用setDropDownViewResource方法,以
- 本文实例讲述了C#日期格式字符串的相互转换操作。分享给大家供大家参考,具体如下:方法一:Convert.ToDateTime(string)
- ListView在实际实用中,一般都会有下新刷新和上拉加载的动态效果,今天要学的就是如何自定义带下拉刷新的ListView。原理解析:一般将
- 先看下面图片:这是我在做登录页面的时候,调用系统的ProgressDialog 进行等待,可是看起来很不协调,左边的等待图片过大,右边文字过