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