本文向各位介绍一下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平台上更简单的脚本编写方法相关推荐

  1. java按键手机游戏51_开发基于Java语言的手机游戏

    HardDriveMIDlet 像一个容器服务于所有canvases,它是表现出一个平面供在手机屏幕上画画.这里midlet包括HardDriveCanvas, 可以扩展javax.microedit ...

  2. java me手机版,一个经典的 JAVA ME 手机程序入门级源码

    一个经典的 JAVA ME 手机程序入门级源码 一个由 Carol Hamer 写的比较有代表性的源码,作者全力推荐,尤其是对于没有 J2ME 开发经验的朋友.自己动手敲出以下贴出的 Hello.ja ...

  3. 64位ie加载java失败_java-无法在AMD 64位平台上加载IA 32位.dll

    java-无法在AMD 64位平台上加载IA 32位.dll 我正在尝试通过此页面上的JNI包装器使用Java中的SVMLight: static { System.loadLibrary(" ...

  4. java设置手机后台进程限制_让java程序在后台一直执行(例如putty关闭后后台程序继续运行)...

    如果在终端中执行java -jar xxx.jar&命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar&命令,则程序会在后台 ...

  5. 在SAE(新浪云平台)上使用 python django库编写网站

    2015年4月18日02:16:23 网站开发前的步骤 作者:赵昊 0.svn小乌龟版本控制器的使用,参考http://sae.sina.com.cn/doc/tutorial/code-deploy ...

  6. SUN认证JAVA程序员(SCJP)招生简章

    <script type="text/javascript"> google_ad_client = "pub-8800625213955058"; ...

  7. Java项目:手机商城管理系统(java+JSP+bootstrap+servlet+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台: 管理员角色包含以下功能: 管理员登录,订单 ...

  8. 为啥JAVA虚拟机不开发系统_理解Java虚拟机体系结构

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  9. [附源码]JAVA+ssm计算机毕业设计安庆师范大学校园互助平台(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. Color the ball----HDOJ1556
  2. win8 查看 linux硬盘大小,如何查看显存大小_win8如何查看显存大小
  3. linux命令之查看程序动态库依赖-ldd
  4. 1031 Hello World for U
  5. highcharts 绘制图标的JAVASCRIPT 类库 收藏
  6. 测试——设计思维之获取反馈
  7. 2018-11-17 js的this引起的血案
  8. linux内核:__user,__kernel,__safe,__force,__iomem
  9. K-means聚类分析算法(二)
  10. 8.最大滑动窗口问题
  11. Kali-Linux windows 双系统的安装
  12. html中怎么写行内样式,css行内样式是什么?
  13. 凉宫春日的忧郁第二章
  14. 面试心得与总结---BAT、网易、蘑菇街等
  15. php让浏览器全屏,js实现各浏览器全屏代码
  16. 计算机科学 杨保海,基于视差空间采样的区域增长稠密立体匹配算法
  17. chrome:initiator为other
  18. 计算天数c语言实验报告,c语言实例--计算天数
  19. 重装系统“无法创建新的分区也找不到现有分区”
  20. 再一次打破局限:“华为云会议”和“畅连”到底连接了什么?

热门文章

  1. STC15F2K60S2芯片A/D转换器的应用
  2. DetectoRS-最强目标检测网络 54.7AP | Detecting Objects with Recursive Feature Pyramid and Switchable Atrous
  3. python逻辑值是什么_Python 中的逻辑值
  4. 得力干将多是有“体系”的人
  5. 为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读
  6. 基于python 的电影推荐算法_基于python语言编程的矩阵分解电影推荐算法
  7. 只要一个软件让电脑硬盘瞬间扩容10T空间 | 阿里云盘变本地硬盘。
  8. 生态系统服务(InVEST模型)土壤保持、水源涵养、氮磷输出、生态保护、生物多样性、碳固
  9. 多核cpu应用场景_多核?高频?不同需求哪种CPU最适合自己呢?
  10. 网络数据采集-免费全网数据采集软件