读Java性能权威指南(第2版)笔记08_即时编译器中

java性能优化权威指南---即时编译器(Just-in-time,JIT) 目录 1、JIT编译器概览 2、调优入门:选择编译器类型(client、server或者两者同时使用) 1)、优化启动 2)、优化批处理 3)、优化长时间运行的应用 3、java和JIT编译器版本 4、编译器中级调优 1)、调优代码缓存 2)、编译阈值 3)、检测编译过程 5、高级编译器调优 1)、编译线程 2)、内联(默认开启,-XX:+PrintInling) 3)... 阅读详情

 

1. 编译阈值

1.1. 一旦代码执行到一定次数,就达到了它的编译阈值,编译器就会认为它有足够的信息来编译代码

1.2. 在当前的JVM中,优化阈值的意义不大

1.2.1. 从JDK 7以及更早期遗留下来的

1.3. -XX:CompileThreshold=N

1.3.1. 当禁用分层编译时有效

1.3.2. 默认值是10 00

1.3.3. 降低这个标志的值可以改善使用C2编译器的应用程序的启动时间

1.3.3.1. 可能会导致一些方法被编译,而这些方法本来是永远都不会被编译的

1.4. 编译器使用的计数器会随着方法和循环的执行增加计数,但是它们也会随着时间的推移而减少

1.4.1. 计数器只是方法或循环最近热度的相对度量

1.4.2. 有些频繁执行的代码可能永远不会被C2编译器编译,即使这个程序永远运行

1.5. -XX:Tier3InvocationThreshold=N

1.5.1. 默认值200

1.5.2. 让C1编译器更快地编译方法

1.6. -XX:Tier4InvocationThreshold=N

1.6.1. 默认值5000

1.6.2. 让C2编译器更快地编译方法

2. 编译线程

2.1. 调用次数更多的方法有更高的优先级

2.1.1. 可以确保最重要的方法先被编译

2.2. 需要编译的代码会放在编译队列中

2.2.1. 队列中的代码越多,应用程序达到最佳性能需要的时间就越长

2.3. C1编译器和C2编译器有不同的队列

2.3.1. 对于放在编译队列中的方法,编译是异步进行的

2.4. -XX:CICompilerCount=N

2.4.1. JVM用来处理队列的总线程数

2.4.2. 三分之一(至少一个)用来处理C1编译器队列

2.4.3. 剩下的线程(也是至少一个)用来处理C2编译器队列

2.4.4. 如果分层编译被禁用,则只启动给定数量的C2编译器线程

2.5. 在Docker容器中运行旧版本的JDK 8会导致自动优化出问题

2.5.1. 需要手动将此标志设置为需要的值

2.6. 可用的CPU有限,较少的线程竞争系统资源对性能有益

2.6.1. 减少线程数量可以帮助提升整体吞吐量

2.6.2. 代价是预热期会持续更长时间

2.7. -XX:+BackgroundCompilation

2.7.1. 默认值为true

2.7.1.1. 意味着队列会进行异步处理

2.7.2. 设置为false

2.7.2.1. 一旦方法可以被编译,想要执行它的代码就会等待,直到方法实际上完成编译,而不是继续在解释器中执行

2.8. -Xbatch

2.8.1. 可以禁用后台编译

3. 内联

3.1. 对性能提升非常重要

3.1.1. 编译器能做的最有利的优化,特别是对于属性封装良好的面向对象代码

3.1.2. 不要害怕小方法,特别是getter和setter,因为它们很容易被内联

3.2. -XX:-Inline

3.2.1. 默认启用

3.3. -XX:MaxFreqInlineSize=N

3.3.1. 频繁内联

3.3.2. 默认325字节

3.3.3. 一个方法因为调用得很频繁而可以被内联,那么只有在它的字节码小于325字节时

3.4. -XX:MaxInlineSize=N

3.4.1. 正常内联

3.4.2. 默认35字节

3.4.3. 只有在字节码小于35字节时,方法才会被内联

3.4.4. 它可能会缩短测试所需的预热时间,但是不太可能对一个长期运行的应用程序产生很大影响

3.5. 注意事项

3.5.1. 将MaxInlineSize的值设置为大于35字节,意味着一个方法在首次调用时可能就被内联了

3.5.2. 如果方法经常被调用,就说明它的性能重要得多,它总归是会被内联的(假设它小于325字节)

4. 逃逸分析

4.1. 编译器能够进行的最复杂的优化

4.1.1. 常导致微基准测试出错

4.1.2. 可以产生更快的代码,但复杂循环结构和大型方法限制了有效性

4.2. -XX:+DoEscapeAnalysis

4.2.1. 默认值是true

4.2.2. C2编译器会进行大幅度的优化

4.2.3. 在极少数情况下,它会出错

4.2.4. 禁用这个特性可能会带来更稳定的代码

PCB之AD层次化原理图设计 PCB之AD层次化(模块化)原理图设计 软件版本:AD17.1.9(bBuild 592) 先上效果图: 可以看到,图中有RS485和W5500这两个部分是复用了原理图,当项目中需要多个功能相同的电路时,这种设计就可以大大节约PCB布局布线的时间,方法后面介绍; 1.首先确定好项目中个部分电路的功能模块 不同功能的电路分开不同原理图画,然后给出输入输出端口,这样方便复用,下面是实例项目的功能划分 2.单个模块电路的接口设计 这里以W5500以太网接口电路为例说明: 主要就分为通讯接口和电源接口: 阅读详情

相关推荐

Altium Designer铺铜陷阱:为什么你的死铜总是清除不干净?

本文深入探讨Altium Designer中铺铜操作导致死铜无法清除的常见问题,分析死铜形成的五大诱因,并提供高级参数优化和网络连接性验证技巧。通过调整边界计算精度和泪滴算法设置,有效解决死铜残留问题,提升PCB设计质量与制造良率。

weixin_29169505的博客 359

Java -XX:MaxInlineSize 方法内联

转载: https://www.cnblogs.com/xyz-star/p/10152564.html

joy_pan的博客 1159

ThingsBoard入门实战(二):ThingsBoard 设备接入

文章目录ThingsBoard 设备接入一、设备配置/设备类型二、设备三、设备接入HTTPCOAPMQTT四、下一步 ThingsBoard 设备接入 设备接入并不一定需要真正的设备,我们可以通过程序。或者命令来模拟设备,向平台发送信息。 这节我们先为用户分配一个设备,然后通过模拟设备命令更新设备的状态(遥测值)。 一、设备配置/设备类型 添加一个叫"路灯"的设备配置。 设备配置听起来比较抽象,可以认为是设备类型或者是设备类型的配置。实际上,ThingsBoard 中很多时候让选择设备类型,就是选的这个。

AIGC搞起 1万+

JVM-方法内联

JVM-方法内联 jvm学习记录 方法内联(inlining,对性能的提升很大):方法内联可以减少方法调用,从而减少方法栈的创建。 简单点说:就是把被调用方函数代码"复制"到调用方函数中,减少因函数调用开销的技术。 相信大家都知道循环的速度比递归快很多,就是这个原因,另外方法内联后,还使得一些JIT更深入的优化变成可能。jvm可以通过两个启动参数来控制字节码大小为多少的方法可以被内联: -XX:MaxInlineSize: 能被内联的方法的最大字节码大小,默认值为35Byte,这种方法不需要频繁的调用。比

qq_41257365的博客 1983

【脑电分析系列】第15篇:脑电功能连接性与脑网络分析(二):Granger因果性、图论指标与复杂网络构建

摘要: 本文深入探讨了脑电(EEG)分析中的高阶连接性方法——有效连接(Effective Connectivity),重点介绍了Granger因果性(Granger Causality, GC)的原理与应用。GC通过统计预测揭示脑区间信息流动方向,超越了传统功能连接的同步性分析。文章还结合图论指标(如度、路径长度、聚类系数和模块化)量化脑网络的拓扑结构,并通过Python代码(MNE和NetworkX库)演示了从EEG数据构建、分析复杂脑网络的完整流程。该研究为理解大脑动态互动、认知任务信息流及神经系统疾

qq_32516809的博客 1567

手把手教你用Python 3.11和Node.js 18在Windows 11上搭建Dify开发环境

本文提供了一份详尽的Windows 11本地Dify开发环境搭建指南。文章手把手教你完成从Python 3.11、Node.js 18的安装配置,到PostgreSQL、Redis数据库服务的部署,再到前后端服务的启动与联调的全过程,并包含常见问题排查与效能优化建议,旨在帮助开发者构建一个稳定、可调试的Dify本地开发环境。

fire9的博客 645

大透编译器,聊聊方法内联

方法内联 上篇文章中,和大家聊过JVM会用编译的方式为代码提速,那在这个基础上,即时编译器还做了很多的优化措施,从而进一步的提升性能,我们这次聊的方法内联就是即时编译器优化措施之一。 来看下这段代码: private static int add1(int x1, int x2, int x3, int x4){ return add2(x1, x2) + add2(x3, x4); } private static int add2(int x1, int x2) { return x1 + x2;

qq_45455361的博客 314

SU-03T1语音模组固件烧录与配置全指南

本文提供SU-03T1离线语音模组固件烧录与配置的完整指南。详细介绍了从硬件连接、软件环境搭建,到在智能公元平台定制唤醒词、命令词及引脚配置,最后使用专用工具完成固件烧录的全流程。重点解析了烧录过程中的关键步骤与常见问题解决方法,帮助开发者快速实现智能语音控制功能。

weixin_29159613的博客 468

深入理解JVM后端优化技术-方法内联

jvm只是负责依次将字节码指令逐次转换成机器码。而在转换过程中,JVM会对做一些代码优化,不管怎么样,就算程序员写出了很烂的代码,JVM也能保持一个不错的执行效率。这就是。

dzend的专栏 526

SQL注入详解

SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。 即:注入产生的原因是后台服务器接收相关参数未经过滤直接带入数据库查询...

渗透之路,攻防之间皆学问 26万+

2025年5月架构设计师论文真题回顾,附写作技巧、所涉知识点及参考范文(三)

本文主要回顾2025年上半年(2025-5-24)系统架构设计师考试下午论文的题目,同时附带写作技巧、所涉知识点及参考范文。试题三:多模型数据库及应用。

一几文的编程学习笔记。 630

常用的 JVM 调优的参数

JVM调优是一个复杂且关键的过程,涉及到内存管理、垃圾回收、编译优化和线程管理等多个方面。合理的JVM参数设置可以显著提高Java应用的性能和稳定性,但也需要根据具体应用的特点进行调整和优化。通过系统地了解和使用这些常用的JVM调优参数,开发者可以更好地控制应用程序的运行环境,从而提升整体系统的效率和可靠性。

Flying_Fish_roe的博客 2099

OpenClaw进行安全测试(附使用场景案例)

test-master 是一个全面的测试专家,覆盖功能测试、性能测试、安全测试三大领域。这里我们重点来看下使用test-master如何进行安全测试。使用 test-master 时,可以针对以下高频领域进行专项安全扫描:✅ OWASP Top 10 测试✅ SQL 注入测试✅ XSS 测试✅ CSRF 测试✅ 认证 / 授权测试。

十二测试录 331

读Java性能权威指南(第2版)笔记07_即时编译器上

如果C1编译器队列已满,那么计划在级别3上编译的方法在等待编译的同时,可以进行级别4的编译。C1编译器得到代码是如何使用的信息之后,会利用这些信息进行优化,然后才开始编译。如果没有额外的CPU周期可用,你能做的就是尽量缩减应用程序的大小。如果C2编译器队列已满,那么队列中的方法会被取出,在级别2上编译。C1编译器有3个级别,所有总共有5个编译级别。不重要的方法可以从级别2或者级别3开始编译。即时编译器是Java虚拟机的核心。编译器不得不“撤销”之前的编译。原生方法封装时发生的编译。在阻塞模式下发生的编译。

lyingSeven的博客 159

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《Tomcat权威指南》第二版学习笔记

本篇是《Tomcat权威指南》第二版学习笔记,Jason Brittain著,英文名是:Tomcat:The Definitive Guide,中国电力出版社,2009.9出版。 在工作中经常使用Tomcat、JBoss、Jetty等Java容器,但都不曾系统的学习总结过,本次拿出一个周末的时间,通过本书,较为系统的学习一下Tomcat,并结合互联网的参考资料,写下这篇学习总结,颇有收获。

Java之旅 2794

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

读Java性能权威指南(第2版)笔记09_即时编译器下

GraalVM优化代码时并没有C2编译器那么激进,所以对于运行得足够久的应用程序,传统的JVM最终会胜出。如果不让预编译的方法被C2编译器编译,那么服务器预热后的性能就会比它最终可能达到的性能差。给定足够长的预热期,禁用分层编译时的执行情况和开启时应该是差不多的。生成的二进制文件启动速度很快,特别是相较于在JVM中运行的程序。对于很小的、快速运行的程序没有帮助,甚至会阻碍它们的运行。原生程序的内存占用在开始时比传统JVM少得多。当在内存受限的环境中运行时有理由关闭它。对于比较大的程序有好处。

lyingSeven的博客 375

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java性能权威指南(第2版)读后总结与感想

语言在不断进化发展、jvm也在不断进化发展,在采用java 8 不变的情况下,使用包含新的垃圾回收算法的jdk,使用新的垃圾回收算法能够获得更好的性能体验。了解不难,学精很难,性能调优不仅仅是技术活,更是一门艺术,需要考虑的场景、判断的条件纷繁复杂,各种开关也会相互影响,使用的不好,还不如采用默认方式。验证、测试自然少不了各种工具,既有原生自带的,也有开源或者商业的第三方工具,在这个方面,介绍的也较详细,能够帮忙我们分析性能问题的源头。有些性能建议是包治百病的,比如,使用更小的对象;

lyingSeven的博客 209

【读书笔记】Java性能权威指南 读书笔记

文章目录1.导论2.性能测试方法3, Java性能调优工具3.2 java 监控工具3.2.1 基本信息3.3 性能分析工具3.3.1 采样分析器3.3.2 探查分析器3.3.3 阻塞方法和线程时间线3.3.4 本地分析器3.4 Java任务控制3.4.1 Java飞行记录器4. JIT编译器4.1 编译器介绍4.2 调优入门: 选择编译器类型4.2.1 优化启动4.2.2 优化批处理4.2.3 优化长时间运行的应用4.3 Java和JIT编译器版本4.4 编译器中级调优4.4.1 调优代码缓存4.4.2 

九师兄 746

《Java性能权威指南》学习笔记

英文版《Java Performance The Definitive Guide》,出版于2014年,中文版出版于2016年,相比于《深入理解Java虚拟机》,讲的更加透彻、准确。适合读一遍,然后做长期参考。 作者Scott Oaks是Oracle公司的一位架构师,专注研究Oracle中间件软件的性能。加入Oracle之前,他曾于Sun Microsystem公司任职多年,在多个技术领域都有建树,包括SunOS的内核、网络程序设计、Windows系统的远程方法调用(RPC)以及 OPEN LOOK虚拟窗口

Java之旅 4960

Java性能优化权威指南-JVM概述和监控调优

HotSpot VM主要分为三部分:HotSpot VM运行时、JIT编译器、垃圾回收器。即时编译器和垃圾回收器是可插拔的,可以选择适合自己的。早期的HotSpot VM是32位的,内存限制为4G。但随着现代内存越来越大,HotSpot VM也支持64位。对象的引用从原来占用4字节32位到8字节64位,占用空间大,触发GC解决方案:Java支持指针压缩,可以将64位压缩为32位【其实是35位,因为对象结构中填充部分的存在,对象的开头指针都是8的整数倍,即后面3位都是0,可以不存储。

m0_50149847的博客 984

Java性能优化权威指南

Java性能优化权威指南

hixiaoxiaoniao的专栏 1083

java优化 pdf_Java性能优化权威指南 PDF扫描[132MB]

Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议。主要包括以下几方面:性能监控、性能分析、Java HotSpot VM 调优、高效的基准测试以及Java EE 应用的性能调优。《Java性能优化权威指南》适合所有Java 程序员、系统调优师和系统架构师阅读。Java性能优化权威指南 目录:第1章 策略、方法和方法论 11.1 性能问题的现状 11.2 性能分...

weixin_30679293的博客 1119

Tomcat权威指南第二版PDF资源下载介绍:全面掌握Tomcat服务器的宝典

Tomcat权威指南第二版PDF资源下载介绍:全面掌握Tomcat服务器的宝典 去发现同类优质开源项目:https://gitcode.com/ 《Tomcat权威指南第二版PDF资源下载》为您提供了一本全面解析Tomcat服务器各方面内容的权威指南,是学习、使用和优化Tomcat的理想选择。 项目介绍 《Tomcat权威指南第二版》是一本深入浅出地介绍Tomcat服务器各方面知识的书籍,包括安装...

gitblog_06726的博客 1049

Java性能权威指南-总结2

响应时间测试和吞吐量测试(假设后者是基于客户端-服务器模式)之间的差别是,响应时间测试中的客户端线程会在操作之间休眠一段时间。这被称为思考时间。响应时间测试是尽量模拟用户行为:用户在浏览器输入URL,用一些时间阅读返回的网页,然后点击页面上的链接,花一些时间阅读返回的网页,等等。当测试中引入思考时间时,吞吐量就固定了:指定数量的客户端,在给定思考时间下总是得到相同的TPS(少许差别)。基于这点,测量请求的响应时间就变得重要了:服务器的效率取决于它响应固定负载有多快。

weixin_42583701的博客 943

java权威指南电子书下载,Java性能权威指南pdf

市面上介绍Java的书有很多,但专注于Java性能的并不多,能游刃有余地展示Java性能优化难点的更是凤毛麟角,本书即是其中之一。通过使用JVM和Java平台,以及Java语言和应用程序接口,本书详尽讲解了Java性能调优的相关知识,帮助读者深入理解Java平台性能的各个方面,使程序如虎添翼。通过阅读本书,你可以:运用四个基本原则大程度地提升性能测试的效果使用JDK中自带的工具收集Java应用的性...

weixin_39633134的博客 380

看了这篇【JIT编译器】,你也能说你会java性能优化了!

大家好,我是小菜,一个渴望在互联网行业做到蔡不菜的小菜。可柔可刚,点赞则柔,白嫖则刚! 死鬼~看完记得给我来个三连哦! 本文主要介绍 java性能分析 之 JIT编译器 如有需要,可以参考 如有帮助,不忘 点赞 ❥ 创作不易,白嫖无义! 参考书籍:《Java性能权威指南》 作为Java开发人员,也许在工作中最经常用到的只是 CRUD,解决性能问题 也许不经常接触到,但是也是需要了解一二的!这篇文章小菜带你一起探究 Java中的JIT编译器。 前情概览 即时 JIT(JUst-In-Time)编译器是

Cbuc丶的博客 511
上一篇: Java实战(第二版)读后总结与感想
下一篇: 读Java性能权威指南(第2版)笔记09_即时编译器下
躺柒
博客等级 码龄4年 7004粉丝 1321原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值