• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 從基本結構到Java 7新特性(9)

    發表于:2013-01-05來源:ImportNew作者:朱偉杰點擊數: 標簽:java
    大部分Java程序的性能都是通過提升執行引擎的性能來達到的。正如JIT編譯器一樣,很多優化的技術都被引入進來使得JVM的性能一直能夠得到提升。最原始

      大部分Java程序的性能都是通過提升執行引擎的性能來達到的。正如JIT編譯器一樣,很多優化的技術都被引入進來使得JVM的性能一直能夠得到提升。最原始的JVM和最新的JVM最大的差別之處就是在于執行引擎。

      Hotspot編譯器在1.3版本的時候就被引入到Oracle Hotspot VM里了,JIT編譯技術在Anroid 2.2版本的時候被引入到Dalvik VM里。

      引入一種中間語言,例如字節碼,虛擬機執行字節碼,并且通過JIT編譯器來提升JVM的性能的這種技術以及廣泛應用在使用中間語言的編程語言上。例如微軟的.Net,CLR(Common Language Runtime 公共語言運行時),也是一種VM,它執行一種被稱作CIL(Common Intermediate Language)的字節碼。CLR提供了AOT編譯器和JIT編譯器。因此,用C#或者VB.NET編寫的源代碼被編譯后,編譯器會生成CIL并且CIL會執行在有JIT編譯器的CLR上。CLR和JVM相似,它也有垃圾回收機制,并且也是基于堆棧運行。

      Java 虛擬機規范,Java SE 第7版

      2011年7月28日,Oracle發布了Java SE的第7個版本,并且把JVM規也更新到了相應的版本。在1999年發布《The Java Virtual Machine Specification,Second Edition》后,Oracle花了12年來發布這個更新的版本。這個更新的版本包含了這12年來累積的眾多變化以及修改,并且更加細致地對規范進行了描述。此外,它還反映了《The Java Language Specificaion,Java SE 7 Edition》里的內容。主要的變化總結如下:

      來自Java SE 5.0里的泛型,支持可變參數的方法

      從Java SE 6以來,字節碼校驗的處理技術所發生的改變

      添加invokedynamic指令以及class文件對于該指令的支持

      刪除了關于Java語言概念的內容,并且指引讀者去參考Java語言規范

      刪除關于Java線程和鎖的描述,并且把它們移到Java語言規范里

      最大的改變是添加了invokedynamic指令。也就是說JVM的內部指令集做了修改,使得JVM開始支持動態類型的語言,這種語言的類型不是固定的,例如腳本語言以及來自Java SE 7里的Java語言。之前沒有被用到的操作碼186被分配給新指令invokedynamic,而且class文件格式里也添加了新的內容來支持invokedynamic指令。

      Java SE 7的編譯器生成的class文件的版本號是51.0。Java SE 6的是50.0。class文件的格式變動比較大,因此,51.0版本的class文件不能夠在Java SE 6的虛擬機上執行。

      盡管有了這么多的變動,但是Java方法的65535字節的限制還是沒有被去掉。除非class文件的格式徹底改變,否者這個限制將來也是不可能去掉的。

      值得說明的是,Oracle Java SE 7 VM支持G1這種新的垃圾回收機制,不過,它被限制在Oracle JVM上,因此,JVM本身對于垃圾回收的實現不做任何限制。也因此,在JVM規范里沒有對它進行描述。

      switch 語句里的String

      Java SE 7里添加了很多新的語法和特性。不過,在Java SE 7的版本里,相對于語言本身而言,JVM沒有多少的改變。那么,這些新的語言特性是怎么來實現的呢?我們通過反匯編的方式來看看switch語句里的String(把字符串作為switch()語句的比較對象)是怎么實現的?

      例如,下面的代碼:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // SwitchTest
    public class SwitchTest {
        public int doSwitch(String str) {
            switch (str) {
            case "abc":        return 1;
            case "123":        return 2;
            default:         return 0;
            }
        }
    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>