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 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...
随机推荐
- uniapp编译成小程序无法设置背景色
参考地址: https://blog.csdn.net/weixin_42120767/article/details/107550236 在原生微信小程序中,我们可以设置page{backgroun ...
- Centos7部署DVWA靶场
Centos7部署DVWA靶场 DVWA 款开源的渗透测试漏洞练习平台,其中内含xs SQL注入. 文件上传.文件包含. CSRF和暴力破解等各个难度的测试环境. 安装httpd及其相关的组件 y ...
- 调研报告-基于 Iceberg 构建湖仓一体平台调研
一.背景 我们使用 Iceberg 构建湖仓一体平台的初衷是希望解决业务方在使用 Hive 数仓时的一些痛点.主要包括以下几大方面: (1)现有的数据同步只支持全量同步,同步大表速度慢. (2)Hiv ...
- dart 数组去重
List list = ['1','2','3','3']; list = list.toSet().toList();
- 基于stm32+esp8266通过阿里云物联网平台和MQTT实现智慧粮仓环境监测管理系统
基于STM32+ESP8266通过阿里云物联网平台和MQTT实现智慧粮仓环境监测管理系统 技术要点:STM32f407.ESP8266.阿里云物联网平台IOT.MQTT.JSON数据解析. 1.功能与 ...
- QT5笔记:5. QtCreator 的快捷键
常用的快捷键: F4 同名头文件和源文件之间切换 F2 声明和定义切换 Ctrl + / 注释 F10\F11 单步调试
- Flink学习(七) 多流转换算子 拆分合并流
一.Split 和 Select (使用split切分过的流是不能被二次切分的) DataStream --> SplitStream : 根据特征把一个DataSteam 拆分成两个或者多个D ...
- linux下npm安装的全局命令无法执行
npm install laravel-echo-server -g 安装了之后在其他目录无法执行,找不到命令,在windows下可以直接使用,在linux下需要配置下环境变量 npm prefix ...
- 无法解析@NotBlank
当碰到无法解析的时候,一般都是地址写错了,找不到相应的路劲 我是全局能搜到这个包@NotBlank,在jakarta.validation-api包里面,但是我网上搜https://www.cnblo ...
- Linux centos 运行telnet命令command not found的解决方法
Linux centos 运行telnet命令,出现下面的错误提示: 1 2 [root@localhost ~]# telnet 127.0.0.1 -bash: telnet: command ...