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