【Java学习日志3.21】Runtime类的简单了解、AutoCloseable接口的使用、使用AutoCloseable对对象进行回收释放

 一 Runtime类的简单了解

Runtime 描述的是运行时的状态,也就是说在整个JVM之中,Runtime类是唯一一个与JVM运行状态有关的类,并且都会默认提供一个实例化对象

由于在每一个JVM进程里面只允许提供一个Runtime类对象,所以该类为单例设计模式,构造方法私有化,有一个static 方法(getRuntime)获得唯一的实例

案例:通过Runtime类获取Cpu、进程、内存等的相关信息

public class RuntimeDemo {

	public static void main(String[] args) {
		Runtime run = Runtime.getRuntime(); // 获取实例化对象
		System.out.println(run.availableProcessors());// 可使用的进程数,本人电脑16核
		System.out.println("单位是字,默认配置为本机系统的内存1/4:" + run.maxMemory()); // 获取最大可用内存空间
		System.out.println("默认配置为本机系统的内存1/64:" + run.totalMemory()); // 获取可用内存空间
		System.out.println("可用内存-已使用内存:" + run.freeMemory()); //获取空闲内存空间
		run.gc();// 手工进行GC处理
	}

}

 提问:请问什么是GC?如何处理?

GC(Garbage Collector) 垃圾收集器,是可以由系统自动调用的垃圾释放功能,或者使用Runtime类中的gc方法手工调用

二 AutoCloseable接口的使用

AutoCloseable 是一个自动关闭资源的接口,资源使用完毕后不关闭资源会造成资源的浪费,下面是一个简单的案例

public class AutoCloseableDemo {

	public static void main(String[] args)throws Exception {
		try(IMessage nm = new NetMessage("kakazhe")){
			nm.send();
		}catch(Exception e) {
			
		}
	}

}
interface IMessage extends AutoCloseable{
	public void send(); // 消息发送
}
class NetMessage implements IMessage {

	private String msg;
	public NetMessage(String msg) {
		this.msg = msg;
	}
	public boolean open() { // 获取资源连接
		System.out.println("【OPEN】获取消息发送连接资源");
		return true;
	}
	@Override
	public void send() {
		if(this.open()) {
			System.out.println("【***发送消息***】" + this.msg );
		}
	}

	@Override
	public void close() throws Exception {
		System.out.println("【CLOSE】关闭消息发送通道");
	}
	
}

值得注意的一点是,AutoCloseable的close函数有异常需要抛出,不然无法使用

 三 使用AutoClose对对象进行回收释放

在jdk9之后,对对象的回收处理过程之中更多的情况下考虑的是多线程的使用,即:多对象回收前的处理都是单独通过一个线程完成的。这样能提高整体性能

import java.lang.ref.Cleaner;

class Member implements Runnable{
	public Member() {
		System.out.println("【构造】对象产生");
	}

	@Override
	public void run() {// 执行清除的时候执行的是此操作
		System.out.println("【回收】对象回收");
	}
}
class MemberCleaning implements AutoCloseable{// 实现清除的处理
	private static final Cleaner cleaner = Cleaner.create();// 创建一个清除处理
	private  Member member;
	private  Cleaner.Cleanable cleanable;
	public MemberCleaning() {
		this.member = new Member();//创建新对象
		this.cleanable=this.cleaner.register(this, this.member); //注册使用的对象
	}
	@Override
	public void close() throws Exception {
		this.cleanable.clean();// 启动多线程
	}
	
}

public class MemberCleaningDemo {

	public static void main(String[] args) {
		try(MemberCleaning mc = new MemberCleaning()){
			// 中间可以执行的一些相关代码
		}catch(Exception e) {
			
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值