Java高级技术第三章——Java的Runtime类详解
2018-02-12 10:38
513 查看
前言
前言点击此处查看:http://blog.csdn.net/wang7807564/article/details/79113195
Runtime类
Java的Runtime类可以用来获取当前Java进程的运行时信息,诸如内存使用情况,加载动态库,获取CPU核心数,以及一些虚拟机相关的功能。运行shell
利用Runtime类可以实现很多功能,例如执行shell,获取CPU的核心数等.下面这段代码可以用来获取shell执行结果:
import java.io.BufferedReader; import java.io.InputStreamReader; public class RunShell { public static void main(String[] args){ try { String shpath="/home/test.sh"; Process ps = Runtime.getRuntime().exec(shpath); ps.waitFor(); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } String result = sb.toString(); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
但是有人经过测试,Java在执行多行的shell时候,可能会比较消耗系统资源。
内存相关
Runtime类可以用来查看当前Java进程运行时的进程情况:public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); long free = runtime.freeMemory(); //返回JVM当前可用的内存数 long max = runtime.maxMemory(); //返回JVM尝试使用的最大内存数 long total = runtime.totalMemory(); //返回JVM的内存总数 System.out.println(free); System.out.println(max); System.out.println(total); }
下面的代码展示了内存垃圾回收和获取当前内存数量的方法:
public class Main { public static void main(String[] args) { Runtime r = Runtime.getRuntime(); long mem1,mem2; Integer someints[] = new Integer[1000]; System.out.println("Total memory is :" + r.totalMemory()); mem1 = r.freeMemory(); System.out.println("Initial free is : " + mem1); r.gc(); mem1 = r.freeMemory(); System.out.println("Free memory after garbage collection : " + mem1); //allocate integers for(int i=0; i<1000; i++) someints[i] = new Integer(i); mem2 = r.freeMemory(); System.out.println("Free memory after allocation : " + mem2); System.out.println("Memory used by allocation : " +(mem1-mem2)); //discard Intergers for(int i=0; i<1000; i++) someints[i] = null; r.gc(); //request garbage collection mem2 = r.freeMemory(); System.out.println("Free memory after collecting " + "discarded integers : " + mem2); } }
程序调试输出的结果是:
Total memory is :122683392
Initial free is : 120762296
Free memory after garbage collection : 122273296
Free memory after allocation : 121633600
Memory used by allocation : 639696
Free memory after collecting discarded integers : 122289672
虚拟机相关
1.addShutdownHook()当JVM虚拟机关闭的时候,执行相关动作。例如:
public class Main { public static void main(String[] args) { System.out.println("I am running"); Runtime r = Runtime.getRuntime(); r.addShutdownHook(new Thread( ()->{ System.out.println("hello world"); } )); } }
输出结果:
I am running.
hello world
2.halt()
强制停止虚拟机。
相关文章推荐
- Java高级技术第三章——Java核心类库
- Java高级技术第三章——Java的基本类型的包装类
- Java高级技术第三章——Java的String字符串类实现原理
- Java高级技术第三章——Java的System类详解
- Java高级技术第三章——Java处理时间的方法,详解Date,DateFormat,Calendar类
- Java高级技术第三章——java.net包中的TCP/UDP/HTTP及其代理的实现
- 高级Java程序员的技术进阶之路
- 《java核心技术_卷二:高级特性》(一)1-7章 思维导图
- java多线程核心技术 第三章线程间通信
- Java高级技术第四章——Java容器Collection之List详解
- Java高级技术第四章——Java容器类Map之快速的HashMap
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性)
- Java核心技术(高级Swing)三文本构件
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结——第三章垃圾收集器与内存分配策略
- java核心技术II:高级特性(第8版译文)下载链接--含参考源码
- Java核心技术(高级Swing)四进度指示器
- Java多线程与并发库高级应用-传统定时器技术回顾
- 黑马程序员 java高级技术1.5之内省和BeanUtils(1.7)(张孝祥)
- 《JAVA 核心技术 基础知识》第三章 笔记
- 领取JAVA高级架构进阶技术视频,书籍,自媒体运营攻略技术......