java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法
本文向各位介紹一下Java性能監(jiān)控小技巧:“JDK附帶分析器、遠(yuǎn)程連接進(jìn)程、跟蹤統(tǒng)計(jì)、為離線(xiàn)分析創(chuàng)建一個(gè)堆轉(zhuǎn)儲(chǔ)、JConsole并不是高深莫測(cè)的。”
現(xiàn)在,許多 Java 開(kāi)發(fā)人員都喜歡在 Java 平臺(tái)中使用腳本語(yǔ)言,但是使用編譯到 Java 字節(jié)碼中的動(dòng)態(tài)語(yǔ)言有時(shí)是不可行的。在某些情況中,直接編寫(xiě)一個(gè) Java 應(yīng)用程序的腳本部分 或者在一個(gè)腳本中調(diào)用特定的 Java 對(duì)象是更快捷、更高效的方法。
這就是 javax.script 產(chǎn)生的原因了。Java Scripting API 是從 Java 6 開(kāi)始引入的,它填補(bǔ)了便捷的小腳本語(yǔ)言和健壯的 Java 生態(tài)系統(tǒng)之間的鴻溝。通過(guò)使用 Java Scripting API,您就可以在您的 Java 代碼中快速整合幾乎所有的腳本語(yǔ)言,這使您能夠在解決一些很小的問(wèn)題時(shí)有更多可選擇的方法。
1. 使用 jrunscript 執(zhí)行 JavaScript
每一個(gè)新的 Java 平臺(tái)發(fā)布都會(huì)帶來(lái)新的命令行工具集,它們位于 JDK 的 bin 目錄。Java 6 也一樣,其中 jrunscript 便是 Java 平臺(tái)工具集中的一個(gè)不小的補(bǔ)充。
設(shè)想一個(gè)編寫(xiě)命令行腳本進(jìn)行性能監(jiān)控的簡(jiǎn)單問(wèn)題。這個(gè)工具將借用 jmap(見(jiàn)本系列文章 前一篇文章 中的介紹),每 5 秒鐘運(yùn)行一個(gè) Java 進(jìn)程,從而了解進(jìn)程的運(yùn)行狀況。一般情況下,我們會(huì)使用命令行 shell 腳本來(lái)完成這樣的工作,但是這里的服務(wù)器應(yīng)用程序部署在一些差別很大的平臺(tái)上,包括 Windows? 和 Linux?。系統(tǒng)管理員將會(huì)發(fā)現(xiàn)編寫(xiě)能夠同時(shí)運(yùn)行在兩個(gè)平臺(tái)的 shell 腳本是很痛苦的。通常的做法是編寫(xiě)一個(gè) Windows 批處理文件和一個(gè) UNIX? shell 腳本,同時(shí)保證這兩個(gè)文件同步更新。
但是,任何閱讀過(guò) The Pragmatic Programmer 的人都知道,這嚴(yán)重違反了 DRY (Don‘t Repeat Yourself) 原則,而且會(huì)產(chǎn)生許多缺陷和問(wèn)題。我們真正希望的是編寫(xiě)一種與操作系統(tǒng)無(wú)關(guān)的腳本,它能夠在所有的平臺(tái)上運(yùn)行。
當(dāng)然,Java 語(yǔ)言是平臺(tái)無(wú)關(guān)的,但是這里并不是需要使用 “系統(tǒng)” 語(yǔ)言的情況。我們需要的是一種腳本語(yǔ)言 — 如,JavaScript。
清單 1 顯示的是我們所需要的簡(jiǎn)單 shell 腳本:
清單 1. periodic.js
1.
2.
3. while (true)
4. {
5. echo(“Hello, world!”);
6. }
由于經(jīng)常與 Web 瀏覽器打交道,許多 Java 開(kāi)發(fā)人員已經(jīng)知道了 JavaScript(或 ECMAScript;JavaScript 是由 Netscape 開(kāi)發(fā)的一種 ECMAScript 語(yǔ)言)。問(wèn)題是,系統(tǒng)管理員要如何運(yùn)行這個(gè)腳本?
當(dāng)然,解決方法是 JDK 所帶的 jrunscript 實(shí)用程序,如清單 2 所示:
清單 2. jrunscript
7.
8.
9. C:\developerWorks\5things-scripting\code\jssrc》jrunscript periodic.js
10. Hello, world!
11. Hello, world!
12. Hello, world!
13. Hello, world!
14. Hello, world!
15. Hello, world!
16. Hello, world!
17. 。..
注意,您也可以使用 for 循環(huán)按照指定的次數(shù)來(lái)循環(huán)執(zhí)行這個(gè)腳本,然后才退出。基本上,jrunscript 能夠讓您執(zhí)行 JavaScript 的所有操作。惟一不同的是它的運(yùn)行環(huán)境不是瀏覽器,所以運(yùn)行中不會(huì)有 DOM。因此,最頂層的函數(shù)和對(duì)象稍微有些不同。
因?yàn)?Java 6 將 Rhino ECMAScript 引擎作為 JDK 的一部分,jrunscript 可以執(zhí)行任何傳遞給它的 ECMAScript 代碼,不管是一個(gè)文件(如此處所示)或是在更加交互式的 REPL(“Read-Evaluate-Print-Loop”)shell 環(huán)境。運(yùn)行 jrunscript 就可以訪(fǎng)問(wèn) REPL shell。
2. 從腳本訪(fǎng)問(wèn) Java 對(duì)象
能夠編寫(xiě) JavaScript/ECMAScript 代碼是非常好的,但是我們不希望被迫重新編譯我們?cè)?Java 語(yǔ)言中使用的所有代碼 — 這是違背我們初衷的。幸好,所有使用 Java Scripting API 引擎的代碼都完全能夠訪(fǎng)問(wèn)整個(gè) Java 生態(tài)系統(tǒng),因?yàn)楸举|(zhì)上一切代碼都還是 Java 字節(jié)碼。所以,回到我們之前的問(wèn)題,我們可以在 Java 平臺(tái)上使用傳統(tǒng)的 Runtime.exec() 調(diào)用來(lái)啟動(dòng)進(jìn)程,如清單 3 所示:
清單 3. Runtime.exec() 啟動(dòng) jmap
18.
19.
20. var p = java.lang.Runtime.getRuntime().exec(“jmap”, [ “-histo”, arguments[0] ])
21. p.waitFor()
數(shù)組 arguments 是指向傳遞到這個(gè)函數(shù)參數(shù)的 ECMAScript 標(biāo)準(zhǔn)內(nèi)置引用。在最頂層的腳本環(huán)境中,則是傳遞給腳本本身的的參數(shù)數(shù)組(命令行參數(shù))。所以,在清單 3 中,這個(gè)腳本預(yù)期接收一個(gè)參數(shù),該參數(shù)包含要映射的 Java 進(jìn)程的 VMID。
除此之外,我們可以利用本身為一個(gè) Java 類(lèi)的 jmap,然后直接調(diào)用它的 main() 方法,如清單 4 所示。有了這個(gè)方法,我們不需要 “傳輸” Process 對(duì)象的 in/out/err 流。
清單 4. JMap.main()
22.
23.
24. var args = [ “-histo”, arguments[0] ]
25. Packages.sun.tools.jmap.JMap.main(args)
Packages 語(yǔ)法是一個(gè) Rhino ECMAScript 標(biāo)識(shí),它指向已經(jīng) Rhino 內(nèi)創(chuàng)建的位于核心 java.* 包之外的 Java 包。
總結(jié)
以上是生活随笔為你收集整理的java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 台式计算机系统错误,Bios设置错误导致
- 下一篇: Java之滑动窗口详解