`
macken
  • 浏览: 346760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Runtime类研究

    博客分类:
  • Java
 
阅读更多

转载:http://lavasoft.blog.51cto.com/62575/15565

一、概述

Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。Runtime采用了单例模式,因此不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。

一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。 

当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。

私有构造函数,私有private静态成员类实例;

二、API预览

    addShutdownHook(Thread hook) 

      注册新的虚拟机来关闭挂钩。 

    availableProcessors() 

      向 Java 虚拟机返回可用处理器的数目。 native方法

    exec(String command) 

      在单独的进程中执行指定的字符串命令。 

    exec(String[] cmdarray) 

      在单独的进程中执行指定命令和变量。 

    exec(String[] cmdarray, String[] envp) 

      在指定环境的独立进程中执行指定命令和变量。 

    exec(String[] cmdarray, String[] envp, File dir) 

      在指定环境和工作目录的独立进程中执行指定的命令和变量。 

    exec(String command, String[] envp) 

      在指定环境的单独进程中执行指定的字符串命令。 

    exec(String command, String[] envp, File dir) 

      在有指定环境和工作目录的独立进程中执行指定的字符串命令。 

    exit(int status) 

      通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。 

    freeMemory() 

      返回 Java 虚拟机中的空闲内存量。 native方法

    gc() 

      运行垃圾回收器。 native方法

    InputStream getLocalizedInputStream(InputStream in) 

      已过时。 从 JDK 1.1 开始,将本地编码字节流转换为 Unicode 字符流的首选方法是使用 InputStreamReader 和 BufferedReader 类。 

    OutputStream getLocalizedOutputStream(OutputStream out) 

      已过时。 从 JDK 1.1 开始,将 Unicode 字符流转换为本地编码字节流的首选方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 类。 

    getRuntime() 

      返回与当前 Java 应用程序相关的运行时对象。 

    halt(int status) 

      强行终止目前正在运行的 Java 虚拟机。 

    load(String filename) 

      加载作为动态库的指定文件名。 线程安全

    loadLibrary(String libname) 

      加载具有指定库名的动态库。 线程安全

    maxMemory() 

      返回 Java 虚拟机试图使用的最大内存量。 native方法

    removeShutdownHook(Thread hook) 

      取消注册某个先前已注册的虚拟机关闭挂钩。 

    runFinalization() 

      运行挂起 finalization 的所有对象的终止方法。 native方法

    runFinalizersOnExit(value) 

      已过时。 此方法本身具有不安全性。它可能对正在使用的对象调用终结方法,而其他线程正在操作这些对象,从而导致不正确的行为或死锁。 

    totalMemory() 

      返回 Java 虚拟机中的内存总量。 native方法

    traceInstructions(on) 

      启用/禁用指令跟踪。 native方法

    traceMethodCalls(on) 

      启用/禁用方法调用跟踪。native方法

 

三、常见的应用

1、内存管理:

Java提供了无用单元自动收集机制。通过totalMemory()和freeMemory()方法可以知道对象的堆内存有多大,还剩多少。

Java会周期性的回收垃圾对象(未使用的对象),以便释放内存空间。但是如果想先于收集器的下一次指定周期来收集废弃的对象,可以通过调用gc()方法来根据需要运行无用单元收集器。一个很好的试验方法是先调用gc()方法,然后调用freeMemory()方法来查看基本的内存使用情况,接着执行代码,然后再次调用freeMemory()方法看看分配了多少内存。下面的程序演示了这个构想。

 

public class MemoryDemo {
	public static void main(String[] args) {
		Runtime r = Runtime.getRuntime();
		long mem1, mem2;
		Integer someints[] = new Integer[1000];
		System.out.println("Total memory is :" + r.totalMemory());
		mem1 = r.freeMemory();
		System.out.println("Initial free is :" + mem1/1024/1024+"M");
		r.gc();
		mem1 = r.freeMemory();
		System.out.println("Free memory after garbage collection:" + mem1);
		for(int i=0;i<1000;i++)
			someints[i]=new Integer(i);
		mem2=r.freeMemory();
		System.out.println("Free memory after allocation:"+mem2);
		System.out.println("Memory used by allocation:"+(mem1-mem2));
		for(int i=0;i<1000;i++)
			someints[i]=null;
		r.gc();
		mem2=r.freeMemory();
		System.out.println("Free memory after collecting "+"discarded integers:"+mem2);
	}

}

 

 2、执行其他程序

      在安全的环境中,可以在多任务操作系统中使用Java去执行其他特别大的进程(也就是程序)。exec()方法有几种形式命名想要运行的程序和它的输入参数。exec()方法返回一个Process对象,可以使用这个对象控制Java程序与新运行的进程进行交互。exec()方法本质是依赖于环境。

下面的例子是使用exec()方法启动windows的记事本notepad。这个例子必须在Windows操作系统上运行。

 

public class ExecDemo {

	public static void main(String[] args) {
		Runtime r = Runtime.getRuntime();
		Process p = null;
		try {
			p = r.exec("notepad");
			//p.waitFor();
		} catch (Exception e) {
			System.out.println("Exception:" + e.getMessage());
		}
	}
}
 

     exec()还有其他几种形式,例子中演示的是最常用的一种。exec()方法返回Process对象后,在新程序开始运行后就可以使用Process的方法了。可以用destory()方法杀死子进程,也可以使用waitFor()方法等待程序直到子程序结束,exitValue()方法返回子进程结束时返回的值。如果没有错误,将返回0,否则返回非0。上述代码中被注释的代码 p.waitFor()函数即是如上的作用;

 

Process和ProcessBuilder类研究

http://lavasoft.blog.51cto.com/62575/15599

http://lavasoft.blog.51cto.com/62575/15662

分享到:
评论

相关推荐

    深入研究java.lang.Runtime类.doc

    "深入研究java.lang.Runtime类" java.lang.Runtime 类是 Java 语言中一个非常重要的类,它提供了访问当前 Java 应用程序的 Runtime 环境的能力。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其...

    java 异常类处理

    首先,Java中的异常分为检查型异常(Checked Exceptions)和运行时异常(Runtime Exceptions)。检查型异常是那些在编译阶段就需要被处理的异常,如IOException、SQLException等。它们通常与方法的契约相关,调用者...

    JAVA基础入门教程

    JRE (Java Runtime Environment),即Java运行环境,通常已包含在 J2SDK中了。如果我们仅仅是为了运行Java程序,而不是从事Java开发 ,我们可以直接下载JRE ,在我们的系统上安装。 5 Java 的开发工具包(JDK ) z ...

    Java类加载原理解析

    【Java类加载原理解析】 Java 类加载机制是Java技术体系中的重要组成部分,它负责将类的字节码文件从磁盘、网络或其他数据源加载到...通过深入研究类加载机制,我们能够提升对Java虚拟机和Java程序运行时行为的理解。

    计算机软件开发中Java编程语言的应用研究.pdf

    Java程序代码首先会被编译成字节码(bytecode),这种字节码不是针对任何特定的机器运行,而是可以在任何装有Java运行时环境(Java Runtime Environment,JRE)的系统上执行。这种特性大大简化了跨平台开发的复杂性...

    深入研究java.lang.Process类.doc

    Java.lang.Process 类深入研究 Java.lang.Process 类是 Java 类库中的一个核心部分,它提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。下面将对 Process 类...

    Writing Optimized Applications for High-Performance Java ME Runtime Environments

    - **Oleg Pliss, Ph.D.**:Sun Microsystems客户端系统组高级员工工程师,主要研究方向为高性能Java ME虚拟机,特别专长于编译器和垃圾回收技术。 #### 二、本次讲座目标 本次讲座旨在让参与者了解高性能Java ...

    Java异常处理机制应用研究.pdf

    Java 异常可以分为两类:Checked Exception 和 Runtime Exception。Checked Exception 是编译器检查的异常,需要在编译期处理。Runtime Exception 是运行时异常,可以在运行时处理。Java 异常处理机制包括抛出异常、...

    Panoply5.3Window版本,需要jre11及以上

    2. **JRE (Java Runtime Environment)**:是Java应用程序运行的必要环境,包括Java虚拟机(JVM)和Java类库。Panoply基于Java编写,因此需要JRE才能运行。JRE 11及以上版本是Panoply 5.3的最低需求,确保了软件的兼容...

    JAVA经典教材笔记.pdf

    Java常用类库章节涵盖了StringBuffer、Runtime、System、Math、Random、NumberFormat、BigDecimal等类的使用,以及日期操作类、正则表达式、定时调度等。这些类库为Java编程提供了丰富的工具和方法,可以提高开发...

    java rt包源代码

    Java RT包,全称为Runtime Library Package,是Java标准版(Java SE)的核心库,包含了运行Java应用程序所必需的基础类库。这些类库构成了Java平台的基础,提供了系统操作、内存管理、网络通信、I/O流、多线程、集合...

    Java开发详解.zip

    031102_【第11章:Java常用类库】_Runtime类笔记.pdf 031103_【第11章:Java常用类库】_国际化程序笔记.pdf 031104_【第11章:Java常用类库】_System类笔记.pdf 031105_【第11章:Java常用类库】_日期操作类(Date、...

    appinventor内置组件底层java源码

    在Java中,包是一种组织类的方式,"com"通常表示商业(commercial)组织的顶级包,而App Inventor的源码可能被组织在一系列子包下,如`com.appinventor.components`或`com.appinventor.components.runtime`等,这些...

    java做的世界杯程序

    而“直接运行”表明程序是可执行的,用户下载后无需编译即可启动,这通常得益于Java的“写一次,到处运行”的理念,通过JRE(Java Runtime Environment)就能在各种操作系统上运行。 “画面漂亮”可能暗示这个程序...

    java写的java虚拟机

    `com.tool.javavm.rt`可能是运行时库(Runtime Library)的实现,Java运行时环境中的核心类库,包括基础数据类型、集合、I/O、网络、多线程等Java API的实现。在标准Java虚拟机中,这部分通常包含在rt.jar中,但对于...

    Java帮助文档大全

    3. **Java Runtime Environment (JRE)**:运行Java应用程序所需的基本环境,不包含开发工具。 Java EE则扩展了Java SE,增加了企业级开发所需的组件和服务,如: 1. **Servlets**:用于处理HTTP请求,创建动态Web...

    深入研究java.lang.ProcessBuilder类.doc

    在深入研究这个类之前,我们首先了解其主要功能和特性。 1. **命令与参数**: `ProcessBuilder`类的核心是命令列表,这是一个字符串数组,用于指定要执行的外部程序及其参数。例如,如果你想要运行`ls`命令并传入...

    【文献综述】基于JAVA的俄罗斯方块游戏设计与实现.pdf

    Java Runtime Environment(JRE)包含了JVM和标准类库,确保了程序的可移植性。虽然早期的JAVA程序因为解释器的存在在性能上稍逊色于C++等编译型语言,但随着Just-In-Time(JIT)编译器的发展,JAVA程序的运行效率...

Global site tag (gtag.js) - Google Analytics