Java System类、RunTime类、Object类、垃圾回收

System类

System类代表当前操作系统,System类提供了静态方法getProperty(String  key)获取指定的环境变量、系统属性。

System.in表示标准输入,通常是键盘

System.out表示标准输出,通常是显示器


Runtime类

Runtime类代表当前Java程序的运行时环境。每个Java程序都有一个与之对应的Runtime实例。

Runtime类可以获取JVM的相关信息:

//获取运行时对象
        Runtime rt=Runtime.getRuntime();
        //获取可用最大内存数,可用最大内存数远远大于总内存数
        System.out.println(rt.maxMemory());
        //获取总内存数
        System.out.println(rt.totalMemory());
        //空闲内存数
        System.out.println(rt.freeMemory());

以上信息均为JVM的信息,并非OS的信息。

Runtime类可以直接启动一个单独的进程,来执行一个程序:

//获取运行时对象
Runtime rt=Runtime.getRuntime();
//如果path环境变量中有该路径,直接写程序文件名即可(比如系统自带的记事本)
rt.exec("notepad.exe");
//如果path环境变量中没有该路径,则必须写绝对路径
rt.exec("C:\Program Files (x86)\360\360zip\360zip.exe");

Object类

Object类是所有类的基类。

Object类的方法:

boolean equals(Object obj)    判断两个对象是否相等,根据内存地址来判断,相当于==。String类重写了此方法,字符串相同,就认为两个对象相等。

int  hashCode()    返回该对象的hash码值,根据地址计算,地址相同(指向内存中的同一个对象)的hash码值才相同。引用型变量才有此方法。

但很多类都重写了hashCode()方法,只要两个对象的值相同,就认为hashCode相同,和String的equals()差不多。

Object类提供了一个clone()方法,用于clone对象。此方法是protected,只能被子类继承、重写。

实现对象的克隆:

//需要实现Cloneable接口

class Test implements Cloneable{
//.......其他成员

//实现clone方法,返回值为本类的对象
public Test clone() throws CloneNotSupportedException {
//调用基类的clone()实现克隆,但返回值是Object类型,需要强制类型转换
return (Test)super.clone();
}
}

class test1{
  Test test1=.......; //创建一个对象
  Test test2=test1.clone();
}

 这只是一种浅克隆,返回该对象的一个副本,简单地复制该实例变量的值,如果是引用类型,复制的是该引用,即指向内存中的同一个对象。比系统默认的clone方法效率要高得多。


强制系统进行垃圾回收的两种方式:

1、使用System类的静态方法:
System.gc();

2、先使用Runtime的静态方法getRuntime()获取实例对象,再使用Runtime实例的实例方法:gc()
Runtime.getRuntime().gc();

均只是通知系统进行垃圾回收,系统是否进行垃圾回收并不确定,但大部分时候都会有所效果。

原文地址:https://www.cnblogs.com/chy18883701161/p/10853471.html