Java reservedcodecachesize虚拟机参数案例详解

 更新时间:2021年08月20日 09:28:06   作者:晴天  
这篇文章主要介绍了Java reservedcodecachesize虚拟机参数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

一、reservedcodecachesize参数介绍

该参数是JvM虚拟机调优中调整内存大小的一个设置参数,值得大小设置直接影响到Code Cache的大小,而jvm编译的代码有常常存放在Code Cache中,而Code Cache的空间内存又支撑着jvm的正常运行,如果该空间不足jvm虚拟机将会发生问题,并且性能持续降低。

Code Cache就是所谓的代码缓存,由于JVM虚拟机的内存默认是有大小限制的,因此代码缓存区域肯定也是有一定大小限制,一般的Windows电脑上64位系统下它的默认大小应该是48M,如果代码缓存已满则jvm在编译代码时的优化设置就会被禁用,这也就是为什么jvm性能会持续降低的原因。

jvm调优内存结构详图

合理的调整该reservedcodecachesize值设置的大小就可以达到令JVM虚拟机不断调优不断进行优化而达到高性能执行的目的。

二、该参数如何设置与调优

1)reservedcodecachesize调优说明

在学会如何设置该参数值得大小与如何调用之前,我们首先要明白一个问题,就是jvm虚拟机本身默认的配置已经是非常合理的了,若非遇到性能瓶颈的情况下,是不需要进行调整该值的大小的。

即便设置该值的大小也是需要根据本机本地电脑系统内存的总大小作为参考指导,也就是说该值调整需要根据电脑系统的内存来做出判断的,并没有固定的值。

我们的项目在生产环境中平时运行的很好,然而经常会遇到性能问题的时候,我们才会考虑配置jvm的参数,调整虚拟机性能的最大化。

2)如何判断reservedcodecachesize的大小导致的性能降低

那么问题来了,我们该如何判断是由于该参数默认值太小导致代码缓存已满而造成的性能有问题呢?这时我们可以查看JVM的运行日志,它的日志中会显示出下面截图中的警告信息,警告我们代码缓存已满。此时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发生内存溢出或者是内存泄漏时,我们可以设置一些指令来告诉我们的程序管理者。

该参数就可以完美的设置,比如说发邮件告诉我们做一些内存清理和内存设置的工作。

OnOutOfMemoryError参数设置代码案例

上图中的例子就是设置了一下该参数,然后将内存溢出的详细信息打包成一个文件运行在jvm的脚本中。

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

相关文章

  • Java之理解多态详解

    Java之理解多态详解

    大家好,本篇文章主要讲的是Java之理解多态详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 解决java main函数中的args数组传值问题

    解决java main函数中的args数组传值问题

    这篇文章主要介绍了解决java main函数中的args数组传值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • IDEA简单实现登录注册页面

    IDEA简单实现登录注册页面

    这篇文章主要介绍了IDEA简单实现登录注册页面,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java中单例模式的七种写法示例

    Java中单例模式的七种写法示例

    作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了,但究竟你自己了解的程度到底怎样呢?下面这篇文章主要给大家介绍了关于Java中单例模式的七种写法,需要的朋友可以参考下
    2021-09-09
  • Java response响应体和文件下载实现原理

    Java response响应体和文件下载实现原理

    这篇文章主要介绍了Java response响应体和文件下载实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 一文带你掌握Java开发者如何接入并使用DeepSeek

    一文带你掌握Java开发者如何接入并使用DeepSeek

    对于Java开发者来说,将DeepSeek集成到项目中,可以极大地提升数据处理和分析的效率,下面小编就来为大家介绍一下具体的调用方法吧
    2025-03-03
  • Java字符串原理分析之String是否可变

    Java字符串原理分析之String是否可变

    当我们在求职时,面试官很喜欢问我们关于String的一些原理性知识,比如String的不可变性、字符串的内存分配等,为了让大家更好地应对面试,并理解String的底层设计,接下来会给大家聊聊String的一些原理,比如String为什么具有不可变性,需要的朋友可以参考下
    2023-05-05
  • Java设计模式之外观模式解析

    Java设计模式之外观模式解析

    这篇文章主要介绍了Java设计模式之外观模式解析,外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用,需要的朋友可以参考下
    2024-01-01
  • APT 注解处理器实现 Lombok 常用注解功能详解

    APT 注解处理器实现 Lombok 常用注解功能详解

    这篇文章主要为大家介绍了使用APT 注解处理器实现 Lombok 常用注解功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java MultipartFile实现上传文件/上传图片

    Java MultipartFile实现上传文件/上传图片

    这篇文章主要介绍了Java MultipartFile实现上传文件/上传图片,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12

最新评论