1. warm up会有什么影响?
·这也是我为什么要讲这个话题的原因。主要是因为我们经常自己写代码测试某些方法的性能(
基准测试),发现每次运行的时间都不一样,甚至方法的顺序,方法的大小,测试结果也可能会不一样。
·影响基准测试结果的因素有很多:比如硬件配置:单核,双核,内存大小;jvm机制:执行方式,堆管理(GC),hotspot优化策略,并发等。
·我们要尽量减少这些因素的干扰,其中warm up现象就是一个要避免的。
2. 那什么是warm up现象?
·中文说法--预热。为什么会有预热现象了?先说说jvm几种执行方式。
·jvm有四种执行方式:解释执行,编译执行,动态优化执行(自适应优化),芯片级直接执行。
·动态优化执行:虚拟机开始对所有代码都是解释运行,但是它会监视代码的执行情况,找出频繁执行的代码,然后编译成本地代码,同时采取一些策略优化编译后的代码。这个执行时编译的过程也叫动态编译或即时编译。
·sun hotspot jvm采用的就是动态编译方式(SUN的JDK版本从1.3.1开始运用HotSpot虚拟机)。
·那么解释执行代码,直到将程序编译成本地代码,这个过程可以理解为jvm warm up。
3. 怎么避免warm up带来的影响了?
·方法一:jvm参数设置
-XX:CompileThreshold=10000:参数意思:通过JIT编译器,将方法编译成机器码的阀值,可以理解为调用方法的次数。client模式默认1500,server模式默认10000。
有些资料建议指定为1,第一次运行的时候就编译成本地代码。这样会达到预期的效果吗?
我们先看几个例子:(我们通过参数 -XX:+PrintCompilation往stdout打印方法被JIT编译时的信息来观察JNI的过程)
public class WarmUpTest {
private static final int loop = 10000;
public static void main(String[] argv) {
List list = createList();
for (int i = 1; i < loop; i++) {
iteratorloop(list);
}
}
private static void iteratorloop(List list) {
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
iterator.next();
}
}
private static List createList() {
List list = new ArrayList(1);
for (int i = 0; i < list.size(); i++) {
list.add(i);
}
return list;
}
}
A)XX:CompileThreshold=1;调用iteratorloop方法10000次,编译信息:
1 java.lang.Thread::<init> (49 bytes)
--- n java.lang.ClassLoader::findLoadedClass0
--- n java.lang.ClassLoader::findBootstrapClass
2 java.lang.Object::<init> (1 bytes)
3 java.lang.Thread::init (188 bytes)
--- n java.lang.ClassLoader$NativeLibrary::find
--- n java.security.AccessController::doPrivileged (static)
--- n java.security.AccessController::doPrivileged (static)
--- n java.io.WinNTFileSystem::getBooleanAttributes
4 java.lang.System::getSecurityManager (4 bytes)
5 java.lang.ThreadGroup::checkAccess (14 bytes)
6 ! java.lang.ThreadGroup::addUnstarted (40 bytes)
7 java.lang.String::toCharArray (20 bytes)
8 java.lang.String::getChars (66 bytes)
。。。。。
·输出了很多编译信息,但是并没有编译iteratorloop方法
B)XX:CompileThreshold=1;调用iteratorloop方法100000次,编译信息:
。。。。
344 com.china.my.java.WarmUpTest::main (23 bytes)
345 com.china.my.java.WarmUpTest::createList (40 bytes)
346 com.china.my.java.WarmUpTest::iteratorloop (27 bytes)
347 java.util.AbstractList::iterator (10 bytes)
。。。。
·编译了iteratorloop方法(第三行信息,只拷贝了一部分)
C)XX:CompileThreshold=1500;调用iteratorloop方法1499次,编译信息:
1 java.lang.Object::<init> (1 bytes)
2 java.lang.String::hashCode (60 bytes)
3 java.lang.String::charAt (33 bytes)
·只打印了三次编译信息,没有编译iteratorloop方法。
D)XX:CompileThreshold=1500;调用iteratorloop方法1500次,编译信息:
1 java.lang.Object::<init> (1 bytes)
2 java.lang.String::hashCode (60 bytes)
3 java.lang.String::charAt (33 bytes)
4 com.china.my.java.WarmUpTest::iteratorloop (27 bytes)
5 java.util.AbstractList::iterator (10 bytes)
6 java.util.AbstractList$Itr::<init> (6 bytes)
7 java.util.AbstractList$Itr::<init> (31 bytes)
8 java.util.AbstractList$Itr::hasNext (20 bytes)
·编译了iteratorloop方法(第四行信息)
【结论】
·CompileThreshold=1,遍历10000次后才可能发生编译;CompileThreshold=1500,编译的方法少,并且遍历1500次时,iteratorloop被编译执行了。
·jvm执行程序的时候,本身会调用很多方法(从打印出的编译信息可以看出),所以你想测试的方法不一定是执行频率最高的方法,这完全取决于jvm的hotspot策略。或者说CompileThreshold只是个先决条件,达到了这个值,不一定就会马上编译,虚拟机中会采取策略选择它所认为的当前hotspot编译成本地方法。
·方法二:先执行测试方法N次;然后在测试某方法执行时间。
·配合方法一:先预设CompileThreshold一个阀值,并通过PrintCompilation确认程序执行指定N次后会编译成本地代码。
{参考资料}
大方法的执行性能与调优过程小记
健壮的 Java 基准测试,第 1 部分: 问题
健壮的 Java 基准测试,第 2 部分: 统计和解决方案
Java 6中的线程优化真的有效么
分享到:
相关推荐
- 配置Warm up时需谨慎,避免过于频繁的预热操作可能对服务器造成不必要的负担。 - 确保预热的URL正确无误,以免误操作导致其他不必要的服务受到影响。 - 定期检查Warm up作业的状态,确保其正常运行。 **效果与...
这个现象在现代社会变得非常普遍,因为人们越来越依赖这些设备进行日常交流、学习和娱乐。长时间保持低头的姿势会严重拉伸颈部肌肉,进而对整个上半身,包括颈部、肩部和背部,造成压力。这种压力可能导致一系列健康...
这篇资料是关于如何在销售季节购买特定...这不仅适用于个人购物策略,也是对消费者行为和社会经济现象的一种理解。在当今消费主义盛行的社会,学会理性消费和适时购买,是提高生活质量,同时也是对个人财务的合理管理。
1. **文化冲击(Culture Shock)**:出国留学的过程中,人们可能会遇到的文化差异和挑战,这种现象被称为文化冲击。它涉及到语言、风俗、习惯、价值观等各方面的适应。 2. **语言实践(Real-life Language Usage)*...
6. **句式结构分析**:如第一句经典句式的仿写中,"When (I am) in trouble, I always turn to my classmates for help.",这里省略了主语"I am",是英语中常见的状语从句省略现象,让学生理解并学会运用这种简洁...
【知识点】 1. 海水的盐分:海水含有大量盐分,当海水蒸发时,水分子会离开,但盐分仍然留在海水中。...这些内容对于学生来说是高中英语课程的重要组成部分,可以帮助他们理解自然现象,掌握词汇和语言表达能力。
在Unit 1中,Warm-up部分探讨了对健康生活方式的不同看法,听力部分包括了短对话和长对话,以及一篇Passage。短对话涉及日常生活的不同情境,如个人兴趣、工作状况等;长对话可能涉及更深入的话题,如健康习惯或个人...
作者提到的文化冲击是一个普遍现象,当人们进入新的文化环境中,原有的生活习惯和思维方式可能会受到冲击。适应新文化需要时间和努力,如调整对人际交往的期望,理解并接纳新的生活方式,以及寻找应对压力的方法,如...
本课件共分为四个部分:Warm-up、New words & expressions、Key structures&usage以及Main idea,旨在帮助学习者提升英语水平。 I. Warm-up 部分通过提出问题,如"Did you have a sound sleep last night?"和"Have ...
【致用英语综合教程】是一门旨在提升英语实际应用能力的课程,课件内容涵盖了Warm-up、Reading、Language in Use、Project、Feel Free to Inquire、Homework以及Culture Tips等多个部分,旨在帮助学习者在听、说、读...
首先,课件通过Warm Up环节强调了语言的丰富性和多样性,引用了E.B. WHITE的作品《STUART LITTLE》中的长句作为示例,鼓励学生尝试构建复杂而富有表现力的句子。这提醒我们,写作不仅仅是传达信息,更是一种艺术形式...
Let's start with a simple tongue twister to warm up." 教学过程: "First, we'll explore the five pure vowels: /i:/, /æ/, /ɑ:/, /ɔ:/, /u:/. Listen carefully as I pronounce each one and then try to ...
- 表示“发芽”时,用于植物生长的描述,如:Seeds come up when the weather gets warm.(种子在天气变暖时发芽。) 以上是针对“人教高中英语必修一unitEnglisharoundtheworld单词讲解PPT学习教案”的部分内容所...
本文针对的是导航雷达设备中微处理器板频繁损坏的问题,其中特别研究了Racal-DeccaBridge Master253导航雷达在开机初始化“WARMUP”倒计时期间出现显示器“黑屏”和死锁状态的故障案例。文章通过对故障现象的分析,...
- 掌握与时间相关的动词短语,如"eat breakfast", "get up", "play sports", "eat dinner"等,以及表示频率的副词,如"usually", "sometimes", "often"。 2. **礼貌询问**: - 使用"Excuse me, Can I ask you ...
在使用这些模板时,要根据具体情境灵活调整,填充适合的词汇和句子,确保内容与主题紧密相关,避免机械套用。通过熟练运用这些模板,可以提升英语写作的效率和质量,为学士学位论文或日常写作提供便利。
6. **性能优化**:为了进一步提高效率,线程池可能还包括其他优化措施,如线程局部存储(Thread Local Storage)以减少全局数据的访问,或者预热线程(Warmup Threads)以便快速响应新任务。 在实际应用中,线程池...
- **天气现象**:snowy(下雪的),sunny(晴朗的),rainy(下雨的),windy(有风的),cloudy(多云的) 通过以上内容的学习,学生不仅能掌握基本的英语单词和短语,还能学会如何询问和回答关于学校设施、时间...
1. **Warm-up** - 通过Let’s chant的方式,用儿歌复习之前学过的天气相关单词和句型,为新内容的学习打基础。 2. **Revision** - 借助活动手册的练习1和2,通过听力和认读练习来复习第一课时的内容,巩固学生对已...
1. **热身活动(Step 1 warm-up)**:通过和季节相关的互动提问,激发学生兴趣,并使学生对即将学习的单元主题有所准备。 2. **课前阅读(Step 2 pre-reading)**:包含几个活动: - A1活动,让学生熟悉每个季节的...