JIT 编译后的代码存储位置
JIT 编译后的代码存储位置
1. 存储位置
JIT 编译后的本地机器代码被存储在 JVM 的 Code Cache(代码缓存区)中。
Code Cache 是 JVM 内存的一部分,用于保存 JIT 编译生成的机器码,避免重复编译和提高代码执行效率。
2. Code Cache 的特性
- 作用:
- 存储 JIT 编译后的机器码。
- 提高热点代码的执行效率。
- 位置:
- Code Cache 是 JVM 内存的非堆区域,与堆、方法区等其他内存区域独立。
- 大小配置:
- Code Cache 的大小可以通过以下 JVM 参数调整:
-XX:InitialCodeCacheSize=<size>:初始大小。-XX:ReservedCodeCacheSize=<size>:最大大小。
- Code Cache 的大小可以通过以下 JVM 参数调整:
例如:
-XX:InitialCodeCacheSize=32m -XX:ReservedCodeCacheSize=256m
3. Code Cache 的管理
- Code Cache 的内容会随着 JIT 编译的执行逐步填充。
- 当 Code Cache 被填满时,JVM 会停止新的编译请求,从而可能导致程序性能下降。
- 为避免缓存溢出,可以通过监控工具(如 JConsole 或 VisualVM)检查 Code Cache 的使用情况,并调整配置参数。
4. 示例:监控 Code Cache
以下是一个监控 Code Cache 的示例工具:
使用jcmd查看 Code Cache 的状态
可以使用jcmd命令查看当前 JVM Code Cache 的使用情况:
jcmd <pid> Compiler.codecache
输出示例:
Code Cache:
size=245760Kb used=17326Kb max_used=18432Kb free=228434Kb
bounds [0x000000011b800000, 0x000000011ca00000, 0x000000011ca00000]
total_blobs=1021 nmethods=913 adapters=84
compilation: enabled
- size:Code Cache 的总大小。
- used:已经使用的大小。
- free:剩余可用空间。
- nmethods:JIT 编译生成的方法数量。
5. Code Cache 的生命周期
- 当 JVM 停止运行时,Code Cache 的内容会被清空。
- 在应用程序运行期间,JIT 编译器会动态管理 Code Cache 的内容,定期清理不再使用的代码,避免空间浪费。
6. 总结
- JIT 编译后的代码存储在 JVM 的 Code Cache 中。
- Code Cache 是 JVM 内存的一个独立区域,主要用于存储热点代码的机器码。
- 通过参数调整 Code Cache 大小,避免溢出问题。
- 可以使用工具(如 jcmd、JConsole)监控 Code Cache 的使用情况。
JIT 编译后的代码存储位置的更多相关文章
- webpack编译后的代码如何在浏览器执行
浏览器是无法直接使用模块之间的commonjs或es6,webpack在打包时做了什么处理,才能让浏览器能够执行呢,往下看吧. 使用commonjs语法 先看下写的代码, app.js minus.j ...
- php中,如何将编译后的代码,反编译回去。
编译后 <?php /*********************/ /* */ /* Version : 5.1.0 */ /* Author : RM */ /* Comment : 0712 ...
- KEIL MDK编译后的代码量和RAM使用详解
一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘.编译器会将一个程序分为好几个部分,分别存储在 MCU 不同的存储区.Keil 工程在编译完 ...
- android 自定义用相机拍照后的照片存储位置
1.imageUri = Uri.fromFile(new File(Environment .getExternalStorageDirectory()+ File.separator + getP ...
- JD-GUI反编译后代码逻辑分析
一,用jd-gui.exe等工具查看源代码.如何你不会,可以参看此文章: http://blog.csdn.net/hp_2008/article/details/8207879 可以到以下连接下载可 ...
- jvm学习(3)方法区、堆、对象存储位置
方法区 方法区,Method Area, 对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generation),本质上两者并不等价, ...
- javac 编译与 JIT 编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- Javac编译和JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- Javac编译与JIT编译
本文转载自:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的 ...
- 【深入Java虚拟机】之七:Javac编译与JIT编译
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...
随机推荐
- oracle配置SGA参数不当导致不能正确启动数据库实例处理
原因:生成环境数据库想要增加数据库内存配置参数SGA_TARGET增加到42G,但是没有配置SGA_MAX_SIZE参数值,导致SHUTDOWN IMMEDIATE停止数据库,再STARTUP启动数据 ...
- [译] WinForms:分析一下(我用 Visual Basic 写的)
原文 | Klaus Loeffelmann 翻译 | 郑子铭 如果您从未看过电影<分析这一点>,下面是简短的介绍:假设一个纽约家族的成员有可疑的习惯,他决定认真考虑接受治疗以改善他的精神 ...
- 2025年值得推荐的 8 款 WPF UI 控件库
前言 今天大姚给大家分享 8 款开源.美观.功能强大.简单易用的WPF UI控件库,希望可以帮助到有需要的同学. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Wind ...
- changeServer.sh一键切换服务器脚本
直接看改进版2.0 切换服务器,免密登录vi changeServer.sh #!/bin/bash #authe by wangxp export IFCFG=/etc/sysconfig/netw ...
- java连接mysql遇到sql执行错误,异常判断和抛出源码分析
一.代码处理过程
- (抄自己luogu上的博客)莫队总结
虽然当时文风很2,但是觉得写的蛮好的,就在这里贴一下吧. 最近学了分块(太难想了 \(qwq\) )和莫队(太神奇了 \(0w0\) ),写一个阶段性总结~ 分块 总所周知,分块是一种神奇的暴力,用 ...
- 使用browser-use进行数据爬取实战记录
前言 前面的文章介绍了browser-use的基本使用,今天带来的分享是使用browser-use进行一次数据爬取的实战(不过还是demo级别的). 使用到的三个玩法分别是使用自己的浏览器.定义输出结 ...
- 【数学公式】mathtype和word2016集成
mathtype 安装好了以后,word 没有相应的选项卡怎么办? 问题 解决办法 找到word的启动路径 2. 找到mathtype 安装好后的mathpage文件夹 进入文件夹,找到MathPag ...
- 2个月搞定计算机二级C语言——真题(11)解析
1. 前言 今天双 11,正好轮到讲第 11 篇,直接来个三 11. 那么本篇我们讲解2个月搞定计算机二级C语言--真题11 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include ...
- idea 登录提示Server's certificate is not trusted
原因:你本地的idea证书不可以 解决方式1: 你去安装一个正版的: 解决方式2: 设置接受不受信任证书即可. AS:File - Settings - Tools - Server Certific ...