Java reservedcodecachesize虚拟机参数案例详解

一、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的脚本中。

到此这篇关于Java reservedcodecachesize虚拟机参数案例详解的文章就介绍到这了,更多相关Java reservedcodecachesize虚拟机内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 最新虚拟机VMware 14安装教程

    先给大家献上VMware 14 激活码 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ZC3WK-AFXEK-488JP-A7MQX-XL8YF AC5XK-0ZD4H-088HP-9NQZV-ZG2R4 ZC5XK-A6E0M-080XQ-04ZZG-YF08D ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8 FF590-2DX83-M81LZ-XD

  • Python动态规划实现虚拟机部署的算法思想

    声明 本文章为个人拙见,仅仅提供参考,不一定正确,各位大佬可以发表自己的意见. 题目描述 考虑到在虚拟机部署中资源提供商通常希望自己的收益最大化,现假设有一台宿主机,共有x个cpu和y GB的内存,用户可以采取自己报价的方式向资源提供商申请使用虚拟机资源,譬如说付w元申请a个cpu和b GB内存的一台虚拟机.请你设计一个算法,让资源提供商可以合理地安排虚拟机,使得自己的收益最大化. 输入: n x y 2 4 200 4 2 150 - 说明,n表示共有n条用户报价申请,宿主机共有x个cpu和y

  • java虚拟机中栈的运行知识点总结

    运行原理 1.不同线程中所包含的栈帧是不允许存在相互引用的. 2.如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给当前一个栈针,并且虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧. 3.Java方法有两种返回函数的方式,一种是正常的函数返回,使用return指令:另一种是抛出异常.不管使用哪种方式,都会导致栈帧被弹出. 实例 public class StackFrameTest { public static void main(String[] args) {

  • Java虚拟机类加载器之双亲委派机制模型案例

    1. 双亲委派模型是什么? 当某个类加载器需要加载某个.class字节码文件时,它首先把这个任务委托给它的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 2. 双亲委派模型的工作原理? 1.如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去执行: 2.如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器:(每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶

  • java虚拟机JVM类加载机制原理(面试必问)

    目录 1.类加载的过程. 1)加载 2)验证 3)准备 4)解析 5)初始化 2.Java 虚拟机中有哪些类加载器? 1)启动类加载器(Bootstrap ClassLoader): 2)扩展类加载器(Extension ClassLoader): 3)应用程序类加载器(Application ClassLoader): 3.什么是双亲委派模型? 4.为什么使用双亲委派模式? 5.有哪些场景破坏了双亲委派模型? 1)线程上下文类加载器 2)Tomcat 的多 Web 应用程序 3)OSGI 实现

  • vmware虚拟机安装deepin20最全详细过程

    虚拟机软件:vmware workstation 镜像:deepin-desktop-community-1002-amd64.iso 提前创建安装目录:D:\linux\deepin-20 1.打开安装好的vmware workstation,点击创建新的虚拟机 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 3

  • Python使用oslo.vmware管理ESXI虚拟机的示例参考

    目录 读取所有节点主机 获取所有区域: 获取所有主机列表: 获取 HostSystem MO 详细信息: 资源清单 读取主机状态 循环输出 读取虚拟机状态 Vsphere API基础: 实现开关机 列出数据存储 获取资源池 列出网络 读取所有节点主机 from oslo_vmware import api from oslo_vmware import vim_util import urllib3 urllib3.disable_warnings() session = api.VMwareA

  • Java虚拟机精选面试题20道

    目录 1.介绍下Java内存区域(运行时数据区). 程序计数器(Program Counter Register) Java虚拟机栈(Java Virtual Machine Stacks) 本地方法栈(Native Method Stack) Java堆(Java Heap) 方法区(Method Area) 运行时常量池(Runtime Constant Pool) 2.怎么判定对象已经"死去"? 引用计数法 可达性分析算法 3.介绍下四种引用(强引用.软引用.弱引用.虚引用)?

  • Java reservedcodecachesize虚拟机参数案例详解

    一.reservedcodecachesize参数介绍 该参数是JvM虚拟机调优中调整内存大小的一个设置参数,值得大小设置直接影响到Code Cache的大小,而jvm编译的代码有常常存放在Code Cache中,而Code Cache的空间内存又支撑着jvm的正常运行,如果该空间不足jvm虚拟机将会发生问题,并且性能持续降低. Code Cache就是所谓的代码缓存,由于JVM虚拟机的内存默认是有大小限制的,因此代码缓存区域肯定也是有一定大小限制,一般的Windows电脑上64位系统下它的默认

  • Java之Jackson使用案例详解

    序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. Json是什么? Jason是 JavaScript Object Notation-  JavaScript对象表示法,是一种轻量级数据交换格式.主要用于数据传输,比如说在后端写了一个Java对象,想在其他地方(前端)使用这个对象,就需要转换为Json这种形式进行传输. 1.

  • Java反射 PropertyDescriptor类案例详解

    JAVA中反射机制(JavaBean的内省与BeanUtils库) 内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set(

  • Java JVM编译策略案例详解

    解释器 当虚拟机启动时,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样可以省去许多不必要的编译时间.并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,,将有价值的字节码编译为本地机器指令,以换取更高的程序执行效率. hotspot中内嵌有2个JIT编译器,分别为Client Compiler,Server Compiler,但大多数情况下我们称之为C1编译器和C2编译器. C1编译器 client compiler,又称C1编译器,较为轻量,只做少量性能开销比较

  • Java java.lang.InstantiationException异常案例详解

      java.lang.InstantiationException 是指不能实例化某个对象,一般在我们使用java反射机制去创建某个对象的时候实例化到了一个抽象类或者接口(java中抽象类和接口是不能被实例化),而今天我遇到的则是我在使用反射机制实例化某个持久类的时候爆出这个异常,后来发现是因为iBATIS在对象建立中,会使用不带参数的构造函数来建立对象,而自己的持久化类中含有带参数的构造方法,将默认无参构造方法覆盖,导致在实例化过程出现异常.所以在定义一个无参构造方法可解决. 异常 持久类没

  • Java SPI简单应用案例详解

    开篇 本文主要谈一下 Java SPI(Service Provider Interface) ,因为最近在看 Dubbo 的相关内容,其中涉及到了 一个概念- Dubbo SPI, 最后又牵扯出来了 JAVA SPI, 所以先从 Java SPI 开整. 正文 平常学习一个知识点,我们的常规做法是: 是什么 有什么用 怎么用 这次我们倒着做,先不谈什么是 SPI 及其作用,来看下如何使用. 使用 1. 创建一个 maven 工程 2. 创建一个接口类以及实现类 // 接口 public int

  • Java Springboot websocket使用案例详解

    什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 - 为什么要实现握手监控管理 如果说,连接随意创建,不管的话,会存在错误,broken pipe 表面看单纯报错,并没什么功能缺陷等,但实际,请求数增加,容易导致系统奔溃.这边画重点. 出现原因有很多种,目前我这边出现的原因,是因为客户端已关闭连接,服务端还持续推送导致. 如何使用 下面将使用springboot集成的webSocket 导入Maven 首先SpringBoot版本 <parent> &l

  • Java @Pointcut注解表达式案例详解

    1 表达式类型 标准的Aspectj Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型的表达式,分别如下. execution:一般用于指定方法的执行,用的最多. within:指定某些类型的全部方法执行,也可用来指定一个包. this:Spring Aop是基于代理的,生成的bean也是一个代理对象,this就是这个代理对象,当这个对象可以转换为指定的类型时,对应的切入点就是它了,Spring Ao

  • Java SpringBoot Validation用法案例详解

    目录 constraints分类 对象集成constraints示例 SpringBoot集成自动验证 集成maven依赖 验证RequestBody.Form对象参数 验证简单参数 验证指定分组 全局controller验证异常处理 自定义constraints @DateFormat @PhoneNo 使用自定义constraint注解 问题 提到输入参数的基本验证(非空.长度.大小.格式-),在以前我们还是通过手写代码,各种if.else.StringUtils.isEmpty.Colle

  • Java JVM虚拟机调优详解

    目录 jmap查看内存信息 jstack jinfo查看jvm系统参数 Jstat查看堆内存使用和类加载的数量信息 内存泄漏 jmap查看内存信息 jmap histo /pid > ./log.txt :查看某一进程实例个数,占用内存的字节数,以及所属的类 jmap -heap /pid :查看堆信息 jmap ‐dump:format=b,file=app.hprof /pid 通过jvisualvm命令启动jvm可视化管理界面可导入dump文件进行分析:查看类的实例 jstack 分析死锁

随机推荐