System和RunTime

System

System
public static void exit(int status)终止当前运行的虚拟机
public static void gc()回收虚拟机无用资源
public static native long currentTimeMillis()返回系统当前时间的毫秒值
public static native void arraycopy()数组拷贝

System.exit(int status)

  调用该方法可以马上终止虚拟机运行,那么由此向下的程序就无法被执行,他需要传入一个状态码作为参数,当状态码为0时代表正常结束虚拟机运行,其他值代表异常结束虚拟机运行

1
2
3
public static void main(String[] args) {
System.exit(0);
}

System.gc()

  主动调用java虚拟机回收垃圾,将会回收没有意义的对象等

1
2
3
public static void main(String[] args) {
System.gc();
}

System.currentTimeMillis();

  返回当前时间的毫秒值,也就是常说的时间戳了,它是一个long类型的值

1
2
3
4
public static void main(String[] args) {
long timeStamp = System.currentTimeMillis();
System.out.println("时间戳 = " + timeStamp);
}

System.arraycopy()

  使用该方法可以对数组进行拷贝,方法需要5个参数,分别代表:原数组,原数组被拷贝的起始元素下标,目标数组,拷贝到目标数组的起始元素下标,拷贝长度

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
int[] arr1 = new int[]{1,2,3,4,5,6,7,8,9};
int[] arr2 = new int[5];

// 如下,代表将arr1数组从下标0开始的连续3个元素拷贝到arr2,拷贝到arr2中从元素下标1开始的3个连续元素
System.arraycopy(arr1, 0, arr2, 1, 3);
for (int i : arr2) {
// 将会输出:0,1,2,3,0
System.out.println(i);
}
}

RunTime

  RunTime对象无法创建,但是可以通过getRuntime()方法获取

RunTime
public void exit(int status)终止当前运行的虚拟机
public native int availableProcessors()获得CPU线程数
public native long maxMemory()虚拟机能从系统中获取总内存大小
public native long totalMemory()虚拟机已经从系统中获取的内存大小
public native long freeMemory()系统剩余内存大小
public Process exec()执行cmd命令

Runtime.getRuntime().exit()

  其实这个方法和System.exit(0)是一模一样的

1
2
3
public static void main(String[] args) {
Runtime.getRuntime().exit(0);
}

Runtime.getRuntime().availableProcessors()

  电脑CPU的线程数,例如4核8线程,那获取到的就是8,8核16线程获取到的就是16

1
2
3
4
public static void main(String[] args) {
int progressNum = Runtime.getRuntime().availableProcessors();
System.out.println("CPU线程数 = " + progressNum);
}

Runtime.getRuntime().maxMemory()

  表示虚拟机能从系统中获取到的内存大小

1
2
3
4
public static void main(String[] args) {
long maxMemory = Runtime.getRuntime().maxMemory();
System.out.println("虚拟机能获取到的最大内存大小 = " + (maxMemory / 1024 / 1024) + "M");
}

Runtime.getRuntime().totalMemory()

  表示虚拟机已经从系统中获取到的内存大小

1
2
3
4
public static void main(String[] args) {
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("虚拟机已经获取到的最大内存大小 = " + (totalMemory / 1024 / 1024) + "M");
}

Runtime.getRuntime().freeMemory()

  表示虚拟机获取到的内存中,并未使用的内存的大小

1
2
3
4
public static void main(String[] args) {
long freeMemory = Runtime.getRuntime().freeMemory();
System.out.println("虚拟机空闲内存大小 = " + (freeMemory / 1024 / 1024) + "M");
}

  那么已经获取到的内存大小减去空闲内存大小就等于已经使用的内存大小了

1
2
3
4
5
public static void main(String[] args) {
long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();
System.out.println("已经使用的内存大小 = " + ((totalMemory - freeMemory) / 1024 / 1024) + "M");
}

Runtime.getRuntime().exec()

  执行cmd命令,该方法需要捕获异常

1
2
3
4
5
6
7
public static void main(String[] args) {
try {
Runtime.getRuntime().exec("notepad");
} catch (IOException e) {
e.printStackTrace();
}
}