Java笔记:进程管理

一、进程

抽象类Process用来封装进程,即执行的进程。Process主要用作由Runtime的exec方法创建的对象类型或由ProcessBuilder的start方法创建的对象类型的超类。

 

二、运行时环境

Runtime封装了运行时环境,不能实例化Runtime对象,而是通过调用静态方法Runtime.getRuntime方法来获得当前Runtime对象的引用。一旦获得当前Runtime对象的引用,就可以调用一些控制Java虚拟机的状态和行为。

 

三、内存管理

尽管Java提供了自动的垃圾回收功能,但是有时需要了解对象堆的大小或剩余空间的大小,可以使用totalMemory方法和freeMemory方法。我们直到Java垃圾回收器周期性地运行,回收不再使用的对象。但是,有时会希望在垃圾回收器下次指定运行之前回收废弃的对象。可以调用gc方法来要求运行垃圾回收器。

class Solution {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        Double[] arr = new Double[100000];
        for (int i = 0; i < arr.length; i++)
            arr[i] = 0.0;
        arr = null;
        System.out.println(runtime.freeMemory());
        runtime.gc();
        System.out.println(runtime.freeMemory());
    }
}
View Code


四、执行其他进程

在安全环境中,可以在多任务操作系统下使用Java执行其他重量级的进程。有几种形式的exec方法运行命名希望运行的进程,并允许提供输入参数。exec方法返回Process对象,然后可以使用该对象控制Java进程与该新运行的进程的交互方式。因为Java进程可以运行各种平台和操作系统上,所以exec时环境独立的。

import java.io.IOException;

class Solution {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        Process process = null;
        try {
            process = runtime.exec("notepad");//运行记事本
            process.waitFor();//等待进程关闭
        } catch (IOException exc) {
            System.out.println("Cannot execute notepad");
        } catch (InterruptedException exc) {
            System.out.println("Process interrupted");
        }
        System.out.println(process.exitValue());
    }
}
View Code


五、进程创建类

import java.io.IOException;

class Solution {
    public static void main(String[] args) {
        try {
            ProcessBuilder builder = new ProcessBuilder("notepad.exe", "file.txt");
            builder.start();
        } catch (IOException exc) {
            System.out.println("Cannot execute notepad");
        }
    }
}
View Code


六、系统类

通过currentTimeMillis方法可获取自1970年1月1日午夜到当前时间的毫秒数。

class Solution {
    public static void main(String[] args) {
        long begin = System.currentTimeMillis();
        try {

            for (int i = 0; i < 10; i++) {
                Thread.sleep(1000);
                long end = System.currentTimeMillis();
                System.out.println(end - begin);
            }
        } catch (InterruptedException exc) {
            System.out.println("Thread interrupted");
        }
    }
}
View Code

复制数组,相较于普通循环更快。

class Solution {
    static int[] copyArray(int[] arr) {
        int[] cpy = new int[arr.length];
        System.arraycopy(arr, 0, cpy, 0, arr.length);
        return cpy;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int[] cpy = copyArray(arr);
        for (int i : cpy)
            System.out.println(i);
    }
}
View Code

环境属性。

class Solution {
    public static void main(String[] args) {
        System.out.println(System.getProperties());
    }
}
View Code

 

关键词:runtime system 进程 java 方法 对象 运行 system.out.println out println

相关推荐:

Java 中的四种引用类型

原 荐 Redis 数据结构-Bitmap 和 HyperLogLogs

Java笔记:流I/O

进程调度算法之短进程优先(Java)

Java笔记:反射

java 集合小练习 超市库存管理系统

Java笔记:网络

java基础20 StringBuffer缓冲类

20165230 《Java进程设计》实验一(Java开发环境的熟悉)实验报告

Java笔记:并发工具