惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
Help Net Security
Help Net Security
P
Proofpoint News Feed
J
Java Code Geeks
爱范儿
爱范儿
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
Google DeepMind News
Google DeepMind News
H
Help Net Security
G
Google Developers Blog
Jina AI
Jina AI
Vercel News
Vercel News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
Lohrmann on Cybersecurity
S
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
阮一峰的网络日志
阮一峰的网络日志
N
News and Events Feed by Topic
GbyAI
GbyAI
B
Blog
O
OpenAI News
博客园_首页
Cisco Talos Blog
Cisco Talos Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hacker News: Ask HN
Hacker News: Ask HN
TaoSecurity Blog
TaoSecurity Blog
腾讯CDC
MongoDB | Blog
MongoDB | Blog
M
MIT News - Artificial intelligence
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Webroot Blog
Webroot Blog
Simon Willison's Weblog
Simon Willison's Weblog
Y
Y Combinator Blog
C
Cisco Blogs
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
AI
AI
W
WeLiveSecurity
aimingoo的专栏
aimingoo的专栏
The Register - Security
The Register - Security
Project Zero
Project Zero
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
Blog — PlanetScale
Blog — PlanetScale

博客园 - JAVA是老婆

今天来给智商充值 关于Java8函数式编程你需要了解的几点 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现 【实战Java高并发程序设计 5】让普通变量也享受原子操作 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray 【转】成为Java顶尖程序员 ,看这10本书就够了 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference 【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference 一图搞定【实战Java高并发程序设计】 【实战Java高并发程序设计 1】Java中的指针:Unsafe类 如何提高Java并行程序性能?? 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了 看JVM就推荐这本书 实战Java虚拟机之四:提升性能,禁用System.gc() ? 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之一“堆溢出处理” 实战java虚拟机的学习计划图(看懂java虚拟机)
【Java】实战Java虚拟机之五“开启JIT编译”
JAVA是老婆 · 2015-04-28 · via 博客园 - JAVA是老婆

今天开始实战Java虚拟机之五“开启JIT编译”

总计有5个系列

     Java虚拟机有3种执行方式,分别是解释执行、混合模式和编译执行,默认情况下处于混合模式中。使用命令行java –version可以查看虚拟机的执行模式:

C:\Users\Administrator>java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,mixed mode)

     上面输出的“mixed mode”就表示混合模式。在混合模式中,部分函数会被解释执行,部分可能被编译执行。虚拟机决定函数是否需要编译执行的依据是判断该函数,是否为热点代码。如果函数的调用频率很高,被反复使用,那么就会被认为是热点,热点代码就会被编译执行。

     解释执行模式表示全部代码均解释执行,不做任何JIT编译,可以使用参数-Xint来开启解释执行模式: 

C:\Users\Administrator>java -Xint -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,interpreted mode)

   编译执行模式和解释执行模式相反,对于所有的函数,无论是否是热点代码,都会被编译执行,使用参数-Xcomp可以设置为编译模式:

C:\Users\Administrator>java -Xcomp -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,compiled mode)

一般来说,编译模式的执行效率会远远高于解释模式。更多的示例参考《实战Java虚拟机》一书。

 【示例11-36】下面的代码不停计算圆周率的数值,并给出了运行的耗时: 

public static double calcPi(){
         doublere=0;
         for(inti=1;i<10000;i++){
                   re+=((i&1)==0?-1:1)*1.0/(2*i-1);
         }
         returnre*4;
}
public static void main(String[] args) {
         longb=System.currentTimeMillis();
         for(inti=0;i<10000;i++)
                   calcPi();            
         longe=System.currentTimeMillis();
         System.out.println("spend:"+(e-b)+"ms");
}

使用虚拟机参数-Xint运行以上代码,输出:

 spend:2794ms

使用虚拟机参数-Xcomp运行以上代码,输出:

spend:1082ms

很明显,在本例中使用编译运行要比解释运行快大约3倍。

25612fm立体图

《实战java虚拟机》一书Q交流群:397196583