首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么javac不优化空的try-finally块?

为什么javac不优化空的try-finally块?
EN

Stack Overflow用户
提问于 2013-05-27 04:19:12
回答 1查看 196关注 0票数 7

我写了一个类

代码语言:javascript
复制
class test1 {

void foo() { }

}

还有另一个类,它有很多try语句--最后--什么也不做:

代码语言:javascript
复制
class test2 {

void foo() {
    try{} finally{} try{} finally{} try{} finally{} try{} finally{} try{} finally{}
}

}

使用javac (sun-jdk-1.6.0.37,linux-3.8.13-amd64)编译这些文件,并与od进行比较。

代码语言:javascript
复制
test1.class
    0000000 066143 071541 020163 062564 072163 020061 005173 073012
    0000020 064557 020144 067546 024157 020051 020173 005175 076412
    0000040

test2.class
    0000000 177312 137272 000000 031400 010400 000012 000003 003415
    0000020 007000 000007 000417 003000 064474 064556 037164 000001
    0000040 024003 053051 000001 041404 062157 000545 007400 064514
    0000060 062556 072516 061155 071145 060524 066142 000545 001400
    0000100 067546 000557 006400 072123 061541 046553 070141 060524
    0000120 066142 003545 010000 000001 051412 072557 061562 043145
    0000140 066151 000545 005000 062564 072163 027062 060552 060566
    0000160 000014 000004 000405 002400 062564 072163 000462 010000
    0000200 060552 060566 066057 067141 027547 061117 062552 072143
    0000220 000001 065023 073141 027541 060554 063556 052057 071150
    0000240 073557 061141 062554 020000 001000 001400 000000 000000
    0000260 001000 000000 002000 002400 000400 003000 000000 016400
    0000300 000400 000400 000000 002400 133452 000400 000261 000000
    0000320 000001 000007 000000 000006 000001 000000 000001 000000
    0000340 000010 000005 000001 000006 000000 000204 000001 000006
    0000360 000000 123443 003000 025514 123677 003000 026115 123677
    0000400 003000 026516 123677 004000 002072 002031 123677 004000
    0000420 002472 002431 130677 002400 001400 002000 001400 000000
    0000440 004400 005000 004400 000000 007400 010000 007400 000000
    0000460 012400 013400 012400 000000 016400 017400 016400 000000
    0000500 001000 003400 000000 003000 000400 000000 001400 004400
    0000520 000000 015400 005000 003503 005000 041002 000007 001012
    0000540 003502 005000 041002 000007 002012 003502 005000 000004
    0000560 000001 000013 000000 000002 000014
    0000571

为什么第二个类要大得多,尽管它们都不做任何事情?为什么javac不优化第二个代码呢?有什么原因吗?

EN

回答 1

Stack Overflow用户

发布于 2013-05-27 04:30:49

javac几乎不做任何优化。Java使用JIT,其思想是在运行时比在编译时有更多的信息来执行真正好的和有用的优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16763340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档