fianl属性 java_在Java中使用Final关键字可以提高性能吗?
是的可以。下面是一個(gè)最終可以提高性能的實(shí)例:
條件編譯是一種技術(shù),在這種技術(shù)中,代碼行不會(huì)根據(jù)特定條件編譯到類文件中。這可用于刪除生產(chǎn)生成中的大量調(diào)試代碼。
考慮以下幾點(diǎn):public?class?ConditionalCompile?{
private?final?static?boolean?doSomething=?false;
if?(doSomething)?{
//?do?first?part.
}
if?(doSomething)?{
//?do?second?part.
}
if?(doSomething)?{
//?do?third?part.
}
if?(doSomething)?{
//?do?finalization?part.
}}
通過將DoSomething屬性轉(zhuǎn)換為最終屬性,您已經(jīng)告訴編譯器,每當(dāng)它看到DoSomething時(shí),它應(yīng)該按照編譯時(shí)替換規(guī)則用false替換它。編譯器的第一次傳遞將代碼更改為某物就像這樣:public?class?ConditionalCompile?{
private?final?static?boolean?doSomething=?false;
if?(false){
//?do?first?part.
}
if?(false){
//?do?second?part.
}
if?(false){
//?do?third?part.
}
if?(false){
//?do?finalization?part.
}}
一旦完成,編譯器將再次查看它,并看到代碼中有一些不可訪問的語句。由于您使用的是高質(zhì)量的編譯器,所以它不喜歡所有那些無法訪問的字節(jié)碼。所以它移除了它們,你就得到了這樣的結(jié)果:public?class?ConditionalCompile?{
private?final?static?boolean?doSomething=?false;
public?static?void?someMethodBetter(?)?{
//?do?first?part.
//?do?second?part.
//?do?third?part.
//?do?finalization?part.
}}
從而減少了任何過多的代碼,或任何不必要的有條件檢查。
編輯:作為一個(gè)示例,讓我們使用以下代碼:public?class?Test?{
public?static?final?void?main(String[]?args)?{
boolean?x?=?false;
if?(x)?{
System.out.println("x");
}
final?boolean?y?=?false;
if?(y)?{
System.out.println("y");
}
if?(false)?{
System.out.println("z");
}
}}
在用Java 8編譯此代碼和用javap -c Test.class我們得到:public?class?Test?{
public?Test();
Code:
0:?aload_0???????1:?invokespecial?#8??????????????????//?Method?java/lang/Object."":()V
4:?return
public?static?final?void?main(java.lang.String[]);
Code:
0:?iconst_0???????1:?istore_1???????2:?iload_1???????3:?ifeq??????????14
6:?getstatic?????#16?????????????????//?Field?java/lang/System.out:Ljava/io/PrintStream;
9:?ldc???????????#22?????????????????//?String?x
11:?invokevirtual?#24?????????????????//?Method?java/io/PrintStream.println:(Ljava/lang/String;)V
14:?iconst_0??????15:?istore_2??????16:?return}
我們可以注意到,編譯后的代碼只包含非最終變量。x..這表明最終變量對(duì)性能有影響,至少在這個(gè)簡(jiǎn)單的情況下是這樣的。
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的fianl属性 java_在Java中使用Final关键字可以提高性能吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会议室时间预约前端_号外!会议室预约流程
- 下一篇: 坐地铁可以刷学生卡吗_在沈阳办的公交卡能