java动态语言_探秘Java 7:JVM动态语言支持详解
JDK 7 增加了對 JSR 292 的支持,在 JVM 中動態類型語言的運行速度將變得更快。這一支持的關鍵在于增加了新的 Java 字節碼,invokedynamic,它用于方法調用,還有新的連接機制,其中包含了一個新的構造:方法句柄(method handle)。此次JDK 7在動態語言支持上的更新是Java平臺發展的重要趨勢之一,在今年6月的JavaOne大會上,這些基于Java平臺的動態語言也十分的活躍。
動態類型語言和 JVM
JVM 可以執行 Java 程序,將其編譯機器獨立的字節碼。事實上,任何可以使用有效 class 文件表述的功能性語言,都可以運行在 JVM 上。
多年來,運作在 JVM 上語言一直在增加,從 armed Bear for Common Lisp 到Yoix.動態語言的 JVM 實現也越來越多,比如 JRuby 和 Jython,以及 Groovy 腳本語言。
動態語言的靈活性,尤其是腳本語言,對于實驗性、原型應用程序以及需頻繁更新的程序,都具有獨特的吸引力。這種靈活性源自動態類型。動態類型語言中運行時(runtime)驗證程序中的值是否與預期類型一致,相對的,靜態類型語言,如 Java,是在編譯期間檢查變量類型,而不是值類型。值得一提的是,Java 平臺上另一個前景很被看好的靜態語言就是Scala:包括Java之父和Groovy創始人在內的很多開發者都很看好Scala這個強類型的、可擴展性良好的靜態語言。
通常,動態類型比靜態類型更具靈活性,因為前者允許程序根據運行時的數據生成類型。不過靜態類型語言的執行更為高效,因為它能夠在編譯期間排除錯誤。
動態類型固有的靈活性與 JVM 的執行效率,合二為一。很明顯,這就是它能夠吸引動態編程語言創建者以及使用這些語言構建應用程序的開發者的原因。
JSR 223 動態語言支持的第一步
JSR 223: Scripting for the Java Platform 是將動態語言引入 JVM 的第一步,它是一個規范,定義了從動態腳本語言代碼訪問 Java 代碼的 API 接口。它還指定了一個 framework 框架,用戶在 Java 應用程序中運行腳本引擎。該規范及其實現使得包含 Java 和腳本代碼的應用程序的創建更為容易。
動態類型語言的問題
為運行在 JVM 上的動態類型語言開發引擎,必須滿足 JVM 所執行的 Java 字節碼的要求,而字節碼專為靜態類型語言設計。對于引擎開發者,當生成字節碼用于方法調用,這種設計一直都是棘手的難點。
方法調用的字節碼要求
靜態類型語言中編譯時進行類型檢查,意味著方法調用,以及它生成的字節碼,需要知道該方法返回的值類型,以及調用中指定的參數類型。
下面為一段 Java 代碼:
String s="Hello World";
System.out.println(s);
這里參數類型是已知的。System.out.println()并不返回值,如果方法返回值,需要指定返回值的類型。
以上代碼相應的字節碼如下:
ldc #2astore_1
getstatic #3aload_1 invokevirtual #4//Method java/io/PrintStream.println:(I)V
JVM 中字節碼的執行通常包含對操作對象棧(operand stack)中值的操作。操作棧是一個相當于硬件寄存器的虛擬機。通常,字節碼會指示 JVM 局部值壓入操作對象棧,將值從棧中取出放進局部變量中,復制或交換棧中的值,或者執行生成或使用值的操作。
總結
以上是生活随笔為你收集整理的java动态语言_探秘Java 7:JVM动态语言支持详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java重定向cookie_respon
- 下一篇: linux删除副本文件,RMAN不能删除