【JVM】JVM-codecache内存区域介绍

2023-10-26

在这里插入图片描述

1.概述

转载:https://leokongwq.github.io/2016/10/12/maven-test.html

2.JVM-codecache内存区域介绍

大家都知道JVM在运行时会将频繁调用方法的字节码编译为本地机器码。这部分代码所占用的内存空间成为CodeCache区域。一般情况下我们是不会关心这部分区域的且大部分开发人员对这块区域也不熟悉。偶然的机会我们线上服务器Down了,在日志里面看到 java.lang.OutOfMemoryError code cache。通过查找资料来详细了解一下该快内存区域的使用。

所有测试数据都基于jdk8

在这里插入图片描述

在这里插入图片描述

OSR编译的阈值计算

在client模式时,计算规则为CompileThreshold * (OnStackReplacePercentage/100),在server模式时,计算规则为(CompileThreshold * (OnStackReplacePercentage - InterpreterProfilePercentage))/100InterpreterProfilePercentage的默认值为33,当方法上的回边计数器到达这个值时,即触发后台的OSR编译,并将方法上累积的调用计数器设置为CompileThreshold的值,同时将回边计数器设置为CompileThreshold/2的值,一方面是为了避免OSR编译频繁触发;另一方面是以便当方法被再次调用时即触发正常的编译,当累积的回边计数器的值再次达到该值时,先检查OSR编译是否完成。如果OSR编译完成,则在执行循环体的代码时进入编译后的代码;如果OSR编译未完成,则继续把当前回边计数器的累积值再减掉一些,从这些描述可看出,默认情况下对于回边的情况,server模式下只要回边次数达到10 700次,就会触发OSR编译。

用以下一段示例代码来模拟编译的触发:

public class Foo{  
    public static void main(String[] args){  
    Foo foo=new Foo();  
        for(int i=0;i<10;i++){  
            foo.bar();  
        }  
    }  
    public void bar(){  
        // some bar code  
        for(int i=0;i<10700;i++){  
        bar2();  
        }  
    }  
    private void bar2(){  
        // bar2 method  
    }  
}

以上代码采用java -server方式执行,当main中第一次调用foo.bar时,bar方法上的调用计数器为1,回边计数器为0;当bar方法中的循环执行完毕时,bar方法的调用计数器仍然为1,回边计数器则为10 700,达到触发OSR编译的条件,于是触发OSR编译,并将bar方法的调用计数器设置为10 000,回边计数器设置为5 000。

当main中第二次调用foo.bar时,jdk发现bar方法的调用次数已超过compileThreshold,于是在后台执行JIT编译,并继续解释执行// some bar code,进入循环时,先检查OSR编译是否完成。如果完成,则执行编译后的代码,如果未编译完成,则继续解释执行。

当main中第三次调用foo.bar时,如果此时JIT编译已完成,则进入编译后的代码;如果编译未完成,则继续按照上面所说的方式执行。

由于Sun JDK的这个特性,在对Java代码进行性能测试时,要尤其注意是否事先做了足够次数的调用,以保证测试是公平的;对于高性能的程序而言,也应考虑在程序提供给用户访问前,自行进行一定的调用,以保证关键功能的性能。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JVM】JVM-codecache内存区域介绍 的相关文章

  • Java基础---反射、多线程

    十 反射机制 1 Java反射机制概述 1 1Java Reflection Reflection 反射 是被犯为动态语言的关键 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 并能直接操作任意对象的内部属性
  • datetime.time类介绍

    一 time是一个时间类 由时 分 秒 微妙组成 其构造函数如下 class datetime time hour minute second microsecond tzinfo 参数tzinfo 它表示时区信息 各参数的取值范围 hou
  • window安装docker Desktop和wsl2

    目录 一 先到微软商店下载terminal 也就是power shell 后续命令都在这个里面执行 二 安装docker Destop 1 打开控制面板 2 勾选Hyper V服务 3 根据提示重启电脑 等待更新即可 二 启动Docker
  • 字符串去重的5种方式

    public class Demo public static void main String args String str albcad12l gt sfg gt String newStr quChong5 str System o
  • 深度负反馈

    负反馈放大电路的方块图 因为负反馈放大电路有四种组态 而且对于同一种组态 具体电路也各不相同 所以为了研究负反馈放大电路的共同规律 可以利用方块图来描述所有电路 一 负反馈放大电路的方块图表示法 任何负反馈放大电路都可以用下图所示的方块图来
  • windows服务器禁用135,137,138,139,445端口方法

    windows服务器禁用135 137 138 139 445端口方法 1 防火墙新建入站和出站规则 注意 此方法只针对防火墙已开启的情况下才能实现禁用端口 打开控制面板 系统和安全 Windows Defender 防火墙 在左侧选择 高
  • 安装Apache Hive-2.3.3

    1 Hive是什么 1 1 Hive是数据仓库 数据仓库英文名DataWarehouse 可简写为DW或DWH 数据仓库 由数据仓库之父比尔 恩门 Bill Inmon 于1990年提出 主要功能仍是将组织透过资讯系统之联机事务处理 OLT
  • 【H.264/AVC视频编解码技术详解】十七:帧内预测编码的预测实现方法

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • pandas.read_csv参数整理

    pandas read csv参数整理 转载 读取CSV 逗号分割 文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见 http pandas pydata org pandas docs stable io html
  • 如何当个优秀的文档工程师?从 TC China 看技术文档工程师的自我修养

    本文系 NebulaGraph Community Academic 技术文档工程师 Abby 的参会观感 讲述了她在中国技术传播大会分享的收获以及感悟 据说 技术内容领域 传播领域的专家和决策者们会在中国技术传播大会 tcworld Ch
  • 实施静态分析并非易事

    针对软件错误和漏洞的静态分析测试 SAST 应该成为应用程序安全性和软件质量程序的一部分 您需要做的就是运行一个工具 它将在开发的早期发现价格便宜且易于修复的错误 听起来很简单 但是 这不仅需要购买工具并运行扫描 还需要将代码上传到测试服务
  • 【云原生】Docker镜像、容器、仓库、配置等常见问题汇总(面试必看)

    Docker 常见问题整理汇总 本文目录 一 镜像相关 二 容器相关 三 仓库相关 四 配置相关 五 Docker与虚拟化 六 其它常见问题 一 镜像相关 1 如何批量清理临时镜像文件 可以使用sudo docker rmi sudo do
  • C++入门基础07:函数定义与声明、函数传参(传值、传地址、传引用)、函数重载

    C 入门基础07 函数定义与声明 函数传参 传值 传地址 传引用 函数重载 1 函数定义与声明 函数是一起执行一个任务的一组语句 每个程序 C C 都有一个主函数 main 所有简单的程序都可以定义其他额外的函数 可以把代码划分到不同的函数
  • 上位机发送FINS UDP命令读写欧姆龙PLC数据

    上位机通过发送FINS UDP命令读写欧姆龙PLC内部数据 可以用于上位机socket通讯测试 客户服务中心 打开 Sockettool软件 新建一个UDP客户端 HTcP TIP urIEl调试工具W 创 H隊 是出 H TCP H TC
  • 服务器物理内存总是九十几,服务器物理内存使用率90以上

    服务器物理内存使用率90以上 内容精选 换一换 开启弹性云服务器的虚拟内存后 会导致硬盘I O性能下降 因此 平台提供的Windows弹性云服务器默认未配置虚拟内存 如果弹性云服务器内存不足 建议通过 变更规格 操作来扩大内存 如果业务需要
  • 时空编解码器残差多图卷积网络预测OD客流需求

    paper title Predicting origin destination ride sourcing demand with a spatio temporal encoder decoder residual multi gra

随机推荐

  • windows下调用系统API实现进程创建和文件读写

    题目要求 有一个文本文件CommandList txt 第一行是说明文字 本文件最后一次打开和运行日期是20150407 第二行开始每行是一个可执行程序的名称 含路径 编写一个应用程序能打开该文件 并顺序执行其中的每个程序 并更新文件第一行
  • stm32+hx711+称重传感器

    本项目使用主控stm32f103c8t6 最小系统核心板 称重模块hx711 串口打印到电脑端显示数值 这个传感器内部是一组半桥应变片 使用方法可以有以下三种 1 使用一只传感器配合外接电阻组成全桥测量 量程为一个传感器的量程 50kg 对
  • Python 工匠:编写条件分支代码的技巧

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂优文发表于云 社区专栏 作者 朱雷 腾讯IEG高级工程师 Python 工匠 是什么 我一直觉得编程某种意义是一门 手艺 因为优雅而高效的代码 就如同完美的手工艺品一样让人
  • 2017年总结和2018年规划(几年前帖子,私密变公开后时间就变了)

    2017年浑浑噩噩 一直处于摇摆不定的局面 2018年重新找了个工作 必须要努力啦 月薪16000 图形还是要和师兄这边搞搞UE4 图像这边学学计算机视觉 希望能通过试用期 加油
  • 左程云算法笔记025

    map和哈希map的使用 cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include
  • LINUX下查看点云图————point cloud(.ply .vtk .pcd)

    首先 你要确定点云的格式 pcd vtk 还是 ply 如果是 pcd vtk 那么可以用pcl工具查看 1 安装pcl 官网链接点击打开链接 sudo add apt repository ppa v launchpad jochen s
  • python可使用什么退出死循环_碰到python死循环后要怎么退出结束?

    每当编写代码行云流水 却突然碰到代码无限循环 这是非常让人头疼的 难道直接退出程序运行嘛 答案肯定是不行 怎么跳出呢 一起来看下吧 案例 遇到的问题是这样的 如果我定义了一个死循环线程我该如何终止它 我发现用全局变量的方法根本不好使 pys
  • python基础 - networkx 绘图总结

    目录 1 创建方式 2 基本参数 3 DiGraph 有向图 4 Graph 无向图 5 有向图和无向图互转 6 一些精美的图例子 networkx是一个用Python语言开发的图论与复杂网络建模工具 内置了常用的图与复杂网络分析算法 可以
  • 【科普向】LaTeX简介(一篇极简的 LaTeX 介绍文章)

    文章目录 LaTeX诞生背景 TeX和LaTeX LaTeX主要功能 文档结构 数学公式 公式块 我们平时在word里新建一个doc x 文件后 输入内容 调整页边距 字体大小 行间距等待 然后交给打印机打印就可以了 如果你写了一篇关于新疆
  • Qt获取控件位置,坐标总结

    总结的结果是 QMouseEvent中两类坐标系统 一类是窗口坐标 一类是显示器坐标 总结一 经过试验 QMouseEvent globalPos 和 QCursor pos 效果一样 但是Qt帮助文档说不一样 可是我获得值确实相同的 QC
  • 手把手搭建Python量化交易平台-2:量化策略的原理与整体架构

    摘要 探讨量化策略的整体架构 一 量化策略的原理与整体架构 1 输入数据 来自于金融数据共享平台 1 行情或技术面数据 K线数据 MA均线数据 MACD数据 2 财务或基本面数据 国家宏观经济 行业经济 公司财务数据 3 自定义数据 4 投
  • 看懂今天这个!你就是个真正的javaer!

    昨天 猿人君已经教会你搞对象了 听说 由于文字篇幅有限 讲得不明白的地方 大家关注公主号猿人工厂 或者加入qq群765605694 猿人工厂君 手把手的免费教你 恭喜你 从此开始一段新的人生 跨越上和大海 抽象人山人海 在过去的几天里 你已
  • 单词统计

    题目描述 输入一行字符 统计其中有多少个单词 单词之间以空格分隔 输入 一行英文字符 含空格 输出 单词的个数 单独占一行 样例输入 I am a boy 样例输出 4 代码 Java版 import java util Scanner p
  • 毕业后的五年拉开大家差距的原因在哪里?

    有人工作 有人继续上学 大家千万不要错过这篇文章 能看到这篇文章也是一种幸运 真的受益匪浅 对我有很大启迪 这篇文章将会改变我的一生 真的太好了 希望与有缘人分享 也希望对有缘人有所帮助 看完之后有种 相见恨晚 的感觉 特别激动 希望大家好
  • Eclipse环境下通过Cygwin使用NDK编译jni程序

    一 认识Cygwin NDK和jni 首先来认识一下什么是Cygwin NDK和jni Cygwin Cygwin是一个在windows平台上运行的unix模拟环境 它对于学习unix linux操作环境 或者从unix到windows的应
  • java 动态生成 visio----aspose.diagram for java

    最近在鼓捣java 如何生成visio图表 苦于没有API 找到了aspose这个神器 下载试用版本之后 发现最多只能生成10个元素 而且有水印 下面尝试如何去掉水印与元素限制 本文章所涉及的软件均可从网上获取 但是只能用于学习之用 不能用
  • idea使用http客户端上传文件

    controller 文件上传 param file return PostMapping value fileUpload ResponseBody public String uploadSkuImage RequestParam fi
  • 初始C语言——从大到小排序

    三个数的排序 三个数之间两两比较类似于三个数中显示最大值 两两比较 但是有一个问题 最大值问题只需要输出最大值即可而排序问题则还要排序 那么我们是否可以确定三个位置x y z将最大值依次赋值给x y z确保输出时x y z的位置是从左到右输
  • 真二次元!动漫形象风格迁移

    点击上方 机器学习与生成对抗网络 关注星标 获取有趣 好玩的前沿干货 文章 机器之心 一张输入人脸图像 竟能生成多样化风格的动漫形象 伊利诺伊大学香槟分校的研究者做到了 他们提出的全新 GAN 迁移方法实现了 一对多 的生成效果 在 GAN
  • 【JVM】JVM-codecache内存区域介绍

    1 概述 转载 https leokongwq github io 2016 10 12 maven test html 2 JVM codecache内存区域介绍 大家都知道JVM在运行时会将频繁调用方法的字节码编译为本地机器码 这部分代