ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## CodeCache 主要用于缓存编译后的机器码,动态生成的代码和本地方法代码(JNI) ### jvm参数 * InitialCodeCacheSize:表示CodeCache区域初始化大小 * ReservedCodeCacheSize:表示CodeCache区域的最大值(linux下默认为48M,如果开启了分层编译默认为240M,大小不能超过2048M) * CodeCacheMinimumFreeSpace:表示当CodeCache的可用大小不足这个值时,就会停止JIT编译,并进行code cache full的处理逻辑 * UseCodeCacheFlushing:一旦CodeCache达到这个值,JVM将会切换到interpreted-only(解释执行)模式,字节码不会再被编译为机器码,应用程序将继续运行,但是运行速度将会降低一个数量级 ### JIT预热 面对大流量并发的场景,当一个方法瞬间流量激增,会瞬间达到JIT编译的阈值,JVM会执行JIT编译,将热点代码编译成机器码进行缓存,但是当热点代码过多,JIT编译的压力剧增,直接导致系统负载瞬时拉高,CPU占用率也会飙升,导致整体服务性能降低; 建议针对大流量并发场景,应用上线时提前预估流量逐步切流,避免瞬时流量触发JIT编译,待JIT编译预热完成,逐步切入全量流量; ### CodeCache注意事项 如果CodeCache区域被占满,编译器被停用,字节码将不会编译为机器码,应用程序继续运行,但运行速度会降低一个数量级,严重影响系统运行性能; 待补充:JDK7升级JDK8问题