尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

JVM 学习

JVM 学习 基础篇Java 支持跨平台字节码文件详解1、 应用场景版本冲突、系统升级2、字节码 文件的组成3、 打开 class字节码文件4、 基础信息解决版本不兼容52-448 —JDK8RandomStringUtils 该字节码文件版本1.8运行时环境JDK6 1.65、常量池6、方法7、 查看字节码 工具8、arthas类加载1、类的生命周期— 应用场景2、 加载阶段3、连接阶段验证准备final 修饰的变量初始化类加载器双亲委派机制运行时 数据区1、应用场景2、pc 程序计数器3、栈栈内存 也会溢出stack over flow4、堆内存-Xms4G-Xmx4G5、方法区6、直接内存区域总结字符串常量池垃圾回收1、引用计数法2、可达性 分析法** GC Root 对象**查看GC Root3、对象引用四种引用强弱软虚强引用永远不回收、只有弱引用没有其他 引用 指向该弱引用对象GC触发就会回收不管内存够不够软引用GC内存 不足时回收ThreadLocal为啥是弱引用** 手动调用 remove() 方法进行回收防止 内存泄露 ~~~~~**垃圾回收算法分代回收垃圾回收器ParallelParNew CMS总结JDK默认垃圾回收器垃圾回收器选择G1介绍过程打开G1 垃圾回收器G1如何实现可停顿预测G1应用场景大内存应用// 内存密集型应用publicclassCacheServer{// 超过4GB的堆内存privateMaplt;String,byte[]gt;cachenewConcurrentHashMaplt;gt;();publicvoidinit(){// G1能很好地管理大堆// 增量回收,避免长时间停顿for(inti0;ilt;100000;i){cache.put(keyi,newbyte[1024*100]);// 100KB each}}}推荐: 堆内存超过4GB响应时间敏感应用// 实时交易系统publicclassTradingSystem{publicResponseprocessTrade(TradeRequestrequest){// 要求99.9%的请求在100ms内响应// G1可以控制GC停顿在几十毫秒内// 保证交易不超时OrderordervalidateAndCreateOrder(request);returnexecuteTrade(order);}}推荐: Web应用、在线服务、实时系统动态内存需求场景// 波动负载的应用publicclassElasticApplication{publicvoidhandleLoad(intrequestCount){// 高峰期:大量对象分配// 低峰期:内存释放// G1能自适应调整各代大小// 高效应对负载变化for(inti0;ilt;requestCount;i){processRequest();}}}推荐: 负载波动大的应用要求可预测性的场景// SLA要求严格的服务publicclassSLAService{// SLA要求:99%请求lt;200ms, 99.9%请求lt;500ms// G1配置:-XX:MaxGCPauseMillis100// 确保GC停顿不超过100ms// 帮助满足SLA要求}G1优化实践关键参数调优# 基础配置-XX:UseG1GC# 启用G1-Xms8g-Xmx8g# 固定堆大小,避免动态扩展# 停顿时间目标-XX:MaxGCPauseMillis200# 目标最大停顿200ms(默认200)# Region大小(1-32MB,必须是2的幂)-XX:G1HeapRegionSize16m# 较大Region适合大对象多的场景# 并发GC触发阈值-XX:InitiatingHeapOccupancyPercent45# 堆占用45%时启动并发标记# 年轻代大小范围-XX:G1NewSizePercent5# 新生代最小占比5%-XX:G1MaxNewSizePercent60# 新生代最大占比60%# Mixed GC相关-XX:G1MixedGCCountTarget8# Mixed GC回收老年代的目标次数-XX:G1OldCSetRegionThresholdPercent10# 老年代Region回收比例监控关键指标使用GC日志监控G1性能:# 启用详细GC日志(JDK 8)-XX:PrintGCDetails-XX:PrintGCDateStamps-Xloggc:gc.log# JDK 9使用新的日志格式-Xlog:gc*:filegc.log:time,level,tags调整 内存区域大小对象在堆上的存储JIT 即时编译器ZGC使用
返回列表