专栏首页理想二旬不止第三阶段-Java常见对象:【第八章 System类】

第三阶段-Java常见对象:【第八章 System类】

(一)

System类

System类包含一些有用的字段和方法,他不能被实例化

  //用于垃圾回收
  public static void gc()
  
  //终止正在运行的java虚拟机。参数用作状态码,根据惯例,非0表示异常终止
  public static void exit(int status)
  
  //System.out.println(System.currentTimeMillis());
  //返回从1970年1月1日到现在时间的毫秒数(协调时间)
  public static currentTimeMills()
  
  public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  //src - 源数组。 
  //srcPos - 源数组中的起始位置。 
  //dest - 目标数组。 
  //destPos - 目的地数据中的起始位置。 
  //length - 要复制的数组元素的数量。 

arraycopy方法的使用案例

  int[] arr = {11, 22, 33, 44, 55};
  int[] arr2 = {6, 7, 8, ,9 ,10};
  System.arraycopy(arr, 1, arr2, 2, 2);
  System.out.println(Arrays.toString(arr));
  System.out.println(Arrays.toString(arr2));
  
  //运行结果
  [11, 22, 33, 44, 55]
  [6, 7, 22, 33, 10]

currentTimeMills()使用案例

  package cn.bwh_02_currenTimeMillis;
  
  public class SystemDemo {
      public static void main(String[] args) {
  //统计这段程序运行时间
          long start = System.currentTimeMillis();
          for (int x = 0; x < 10000; x++){
              System.out.println("Hello" + x);
          }
          long end = System.currentTimeMillis();
          System.out.println("共耗时" + (end - start) + "毫秒");
      }
  }
  
  //运行结果
  Hello9997
  Hello9998
  Hello9999
  共耗时79毫秒

System.gc() 可用于垃圾回收.当使用System.gc() 回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源,在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用object类的finalize()方法,finalize()方法的作用是释放一个对象占用的内存空间时会被JVM调用.而子类重写该方法, 就可以清理对象占用的资源,该方法没有链式调用, 所以必须手动实现。

从程序结果上可以发现执行system.gc() 前系统会自动调用finalize() 方法清除对象占有的资源。通过super.finalize()可以实现从下到上的方法调用,即先释放自己的资源,再释放父类的资源。

但是不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收jvm都会强制启动垃圾回收器运行,就会耗费更多的系统资源会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放才调用垃圾回收最好。

  package cn.bwh_01_gc;
  
  public class Student {
      private String name;
      private int age;
  
      public Student() {
      }
  
      public Student(String name, int age) {
          this.name = name;
          this.age = age;
      }
  
  @Override
      protected void finalize() throws Throwable {
          System.out.println("当前对象被回收了" + this);
          super.finalize();
      }
  }
  package cn.bwh_01_gc;
  
  public class GcDemo {
      public static void main(String[] args) {
          Student s = new Student("admin", 20);
          System.out.println(s);
  
  //让s不再指定堆内存,成为了垃圾
          s = null;
          System.gc();
      }
  }
  
  //运行结果
  cn.bwh_01_gc.Student@1b6d3586
  当前对象被回收了cn.bwh_01_gc.Student@1b6d3586

本文分享自微信公众号 - 理想二旬不止(ideal-20)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三阶段-Java常见对象:【第十一章 Date、DateFormat和Calendar类】

    可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。

    BWH_Steven
  • 第二阶段-Java面向对象:【第五章 接口】

    2. 接口中一般不定义变量,因为接口中的变量会被默认指定为 public static final 变量(只能是)

    BWH_Steven
  • 第二阶段-Java面向对象:【第七章 内部类】

    如果我们的内部类不想轻易被任何人访问,可以选择使用private修饰内部类,这样我们就无法通过创建对象的方法来访问,想要访问只需要在外部类中定义一个public...

    BWH_Steven
  • 那些年我们用Java写过的小游戏 --- 快速击键系统

    训练技能点 面向对象设计的思想 使用类图理解类的关系 类的封装 构造方法的使用 this、static关键字的使用 需求概述 根据输入速率和正确率将玩家分为不同...

    房上的猫
  • Java 大神的十个私藏避坑绝技

    答案是: No! 看似正确的判断奇数, 但是如果 i 是负数, 那么它返回值都是false 造成这种现象的是 => 从思想上固化, 认为奇数只在正数范围, 故...

    大蕉
  • Java逻辑

    用户1112962
  • Kafka之拦截器Interceptor

        使用场景:我们可以在Producer端统一拦截,加上处理时间,再在consumer端统一拦截统计端到端的处理时间,这也是一种监控方式。

    克虏伯
  • 曾经做过的40道程序设计课后习题总结(四)

    曾经做过的40道程序设计课后习题总结(四) 课后习题目录 1 斐波那契数列 2 判断素数 3 水仙花数 4 分解质因数 5 杨辉三角 6 学习成绩查询...

    闵开慧
  • 【编程题】Java编程题五(10道)

    【编程题】Java编程题六(10道) 【程序41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海...

    Java帮帮
  • 各种递归算法

    说故事的五公子

扫码关注云+社区

领取腾讯云代金券