二、Runtime类
含义:代表着Java的运行环境(JRE、JVM)
常用方法:
- availableProcessors():获取处理数
- maxMemory():获取最大内存数,单位为字节单位
- freeMemory():获取闲置内存数(字节)
public static void main(String[] args) { //获取运行时类的对象 Runtime run = Runtime.getRuntime(); System.out.println("获取处理数:" + run.availableProcessors());//8 System.out.println("获取最大内存数(字节):" + run.maxMemory()); System.out.println("获取闲置内存数(字节):" + run.freeMemory()); }
2.1消耗时长和消耗内存 考虑一段代码的效率
public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); long startMemory = runtime.freeMemory(); long startTime = System.currentTimeMillis(); String str = "甜甜"; for (int i = 0; i < 10000; i++){ str += "的冰激凌"; //str = new StringBuilder(str).append("拍电影").toString(); } long endMemory = runtime.freeMemory(); long endTime = System.currentTimeMillis(); System.out.println("消耗时长:" + (endTime - startTime)); System.out.println("消耗内存:" + (startMemory - endMemory)); System.out.println("-------------------"); long startMemory1 = runtime.freeMemory(); long startTime1 = System.currentTimeMillis(); StringBuilder stringBuilder = new StringBuilder("苦苦"); for (int i = 0; i < 10000; i++){ stringBuilder.append("的巧克力"); } long endMemory1 = runtime.freeMemory(); long endTime1 = System.currentTimeMillis(); System.out.println("消耗时长:" + (endTime1 - startTime1)); System.out.println("消耗内存:" + (startMemory1 - endMemory1)); }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2w6cRfB0-1652098343862)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509185056570.png)]
2.2设计模式之单例模式
前言:new对象的过程叫做实例化
理解:该类的对象只有一个
单例模式:
- 私有化构造方法
- 创建静态常量:private static final A a = new A();
- 添加静态的get方法
public class A { /** * 为什么使用private修饰: * 私有化属性,并且添加get方法让外界获取a对象 * 为什么使用static修饰: * 使用到该类,该类的class文件加载到方法区时(类加载机制),就会在静态区中创建A类的对象 * getInstance方法是静态方法,静态方法只能调用静态属性 * 为什么使用final修饰: * 应该该对象创建后,不允许外界改变 */ private static final A a = new A(); private A() { } public static A getInstance(){ return a; } }
**问题1:**为什么使用private修饰:
- 私有化属性,并且添加get方法让外界获取a对象
**问题2:**为什么使用static修饰:
- 使用到该类,该类的class文件加载到方法区时(类加载机制),就会在静态区中创建A类的对象
- getInstance方法是静态方法,静态方法只能调用静态属性
问题3: 为什么使用final修饰:
- 应该该对象创建后,不允许外界改变
public static void main(String[] args) { //单例模式 Runtime run = Runtime.getRuntime(); Calendar calendar = Calendar.getInstance(); A a = A.getInstance(); }