|
1 | 1 | package com.yale.test.run; |
2 | 2 |
|
| 3 | +/** |
| 4 | + * Runtime描述的是运行时的状态,也就是说在整个的JVM之中,Runtime类是唯一一个与JVM运行状态有关的类, |
| 5 | + * 并且都会默认提供有一个该类的实例化对象。 |
| 6 | + * 由于在每一个JVM进程里面只允许提供一个Runtime类的对象,所以这个类的构造方法被默认私有化了,那么就证明该类 |
| 7 | + * 使用的是单例设计模式 |
| 8 | + * 阿里云 魔乐科技的JAVA教程视频 |
| 9 | + * https://edu.aliyun.com/lesson_36_446?spm=5176.8764728.0.0.3ead521ct2pu1e#_446 |
| 10 | + * https://edu.aliyun.com/course/explore/gentech?spm=5176.10731491.category.12.78904d8aB9zl2v&subCategory=java&filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum&title= |
| 11 | + * @author dell |
| 12 | + */ |
3 | 13 | public class RunntimeTest { |
4 | 14 |
|
5 | | - public static void main(String[] args) { |
| 15 | + public static void main(String[] args) throws InterruptedException { |
| 16 | + RunntimeTest sdf = new RunntimeTest(); |
| 17 | + sdf = null;//等待垃圾回收 |
6 | 18 | Runtime run = Runtime.getRuntime(); |
7 | | - System.out.println("最大内存:" + run.maxMemory()); |
8 | | - System.out.println("可用内存:" + run.totalMemory()); |
9 | | - System.out.println("空余内存:" + run.freeMemory()); |
10 | | - |
| 19 | + System.out.println("获取最大可用内存空间:" + run.maxMemory() + "字节,默认的配置为本机系统内存的4分之1"); |
| 20 | + System.out.println("获取可用内存空间:" + run.totalMemory() + "字节,默认的配置为本机系统内存的64分之1"); |
| 21 | + System.out.println("获取空余内存空间:" + run.freeMemory() + "字节"); |
| 22 | + System.out.println("availableProcessors方法可以获取本机的CPU内核数:" + run.availableProcessors()); |
| 23 | + String str = "垃圾空间"; |
| 24 | + for (int i=0;i <30000; i++) { |
| 25 | + str = str + i; |
| 26 | + } |
| 27 | + System.out.println("[2]获取最大可用内存空间:" + run.maxMemory() + "字节,默认的配置为本机系统内存的4分之1"); |
| 28 | + System.out.println("[2]获取可用内存空间:" + run.totalMemory() + "字节,默认的配置为本机系统内存的64分之1"); |
| 29 | + System.out.println("[2]获取空余内存空间:" + run.freeMemory() + "字节"); |
| 30 | + System.out.println("availableProcessors方法可以获取本机的CPU内核数:" + run.availableProcessors()); |
| 31 | + Thread.sleep(2000); |
11 | 32 | run.gc();//手工调用垃圾回收 |
12 | | - System.gc(); |
| 33 | + System.gc();//System.gc内部调用的就是run.gc() |
13 | 34 |
|
14 | | - RunntimeTest sdf = new RunntimeTest(); |
15 | | - try { |
16 | | - sdf.finalize(); |
17 | | - } catch (Throwable e) { |
18 | | - e.printStackTrace(); |
19 | | - } |
| 35 | + System.out.println("[3]获取最大可用内存空间:" + run.maxMemory() + "字节,默认的配置为本机系统内存的4分之1"); |
| 36 | + System.out.println("[3]获取可用内存空间:" + run.totalMemory() + "字节,默认的配置为本机系统内存的64分之1"); |
| 37 | + System.out.println("[3]获取空余内存空间:" + run.freeMemory() + "字节"); |
| 38 | + System.out.println("availableProcessors方法可以获取本机的CPU内核数:" + run.availableProcessors()); |
| 39 | + |
| 40 | +// RunntimeTest sdf = new RunntimeTest(); |
| 41 | +// try { |
| 42 | +// sdf.finalize(); |
| 43 | +// } catch (Throwable e) { |
| 44 | +// e.printStackTrace(); |
| 45 | +// } |
20 | 46 |
|
21 | 47 | } |
22 | 48 |
|
23 | 49 | @Override |
24 | 50 | protected void finalize() throws Throwable { |
25 | | - System.out.println("finalize方法会在JAVA进行垃圾回收前,被自动调用" ); |
| 51 | + /** |
| 52 | + * 但是从JDK1.9开始,这一操作已经不建议使用了,而对于对象回收释放.从JDK |
| 53 | + * 或者使用java.lang.ref.Cleaner类进行回收(Cleaner也支持有AutoCloseable处理). |
| 54 | + */ |
| 55 | + System.out.println("finalize方法会在JAVA进行垃圾回收前,被自动调用,这个方法抛出的异常类型为Throwable,但是这个类即使抛出异常了,也不影响后面代码的执行" ); |
| 56 | + throw new Exception("我不影响后面代码的继续运行,因为我这个类马上就死了"); |
26 | 57 | } |
27 | 58 | } |
0 commit comments