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性能会持续降低的原因。

Java reservedcodecachesize虚拟机参数案例详解

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

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

1)reservedcodecachesize调优说明

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

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

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

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

那么问题来了,我们该如何判断是由于该参数默认值太小导致代码缓存已满而造成的性能有问题呢?这时我们可以查看JVM的运行日志,它的日志中会显示出下面截图中的警告信息,警告我们代码缓存已满。此时jvm的编译器就会被禁止使用,因此代码编译停止直接导致jvm运行速度迅速下降。

Java reservedcodecachesize虚拟机参数案例详解

如果发现上图中的警告消息,说明我们就该设置该参数的值调整其大小。

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发生内存溢出或者是内存泄漏时,我们可以设置一些指令来告诉我们的程序管理者。

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

Java reservedcodecachesize虚拟机参数案例详解

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

来源:http://www.itjcw123.cn/2983.html

标签:Java,jvm
0
投稿

猜你喜欢

  • Java聊天室之实现运行服务器与等待客户端连接

    2023-11-23 08:16:17
  • 一文详解C# Chart控件

    2023-01-20 03:50:04
  • C#利用性能计数器监控网络状态

    2022-01-05 00:13:53
  • C#实现带消息数的App图标

    2022-03-08 11:30:52
  • Android封装MVP实现登录注册功能

    2021-06-14 20:45:08
  • Java @Async注解导致spring启动失败解决方案详解

    2022-03-06 00:15:17
  • Java 数据库连接池详解及简单实例

    2023-08-10 15:54:07
  • Java排序算法总结之希尔排序

    2022-07-16 13:19:11
  • 常用Eclipse快捷方式(推荐)

    2022-01-22 04:37:56
  • Java裁剪压缩PNG图片,透明背景色变黑的解决方案

    2023-11-25 13:21:27
  • C#多线程的相关操作讲解

    2022-01-13 18:32:12
  • java查找图中两点之间所有路径

    2022-10-04 03:08:11
  • Android基于ViewPager+Fragment实现左右滑屏效果的方法

    2023-11-16 10:50:38
  • Java中Map实现线程安全的3种方式

    2021-10-07 21:23:36
  • 公共POI导出Excel方法详解

    2023-09-10 22:51:31
  • C语言字符串另类用法的实现

    2023-06-19 02:05:25
  • android创建数据库(SQLite)保存图片示例

    2023-07-11 23:07:14
  • 如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    2021-10-20 14:59:40
  • SpringCloud Function SpEL注入漏洞分析及环境搭建

    2022-07-03 05:18:21
  • Android中EditText显示明文与密码的两种方式

    2021-09-13 07:35:39
  • asp之家 软件编程 m.aspxhome.com