Java与运行环境交互

来源:互联网 发布:unity3d建模 衣服褶皱 编辑:程序博客网 时间:2024/05/17 02:12

1. 垃圾回收

  • 垃圾回收机制只负责回收堆内存中的对象,不回收任何物理资源,如数据库连接,网络IO等;
  • 在垃圾回收机制回收对象之前,总会先调用它的finalize()方法,该方法可能使对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收;
  • 对象在内存中的状态:

    a. 可达状态:当一个对象被创建后,若有一个以上的引用变量引用它,则这个对象在程序中处于可达状态,程序可以调用该对象的属性和方法;
    b. 可恢复状态:当一个对象没有任何引用变量引用它时,就进入可恢复状态;
    c. 不可达状态:没有任何引用,且调用了finalize方法后依然没有使该对象变成不可达状态,此时这个对象将永久性地失去引用,最后变成 不可达状态;只有一个对象处于不可达状态时,系统才会真正回收该对象所占有的资源;

  • 强制垃圾回收:
    a. 两个方法:
    i. System的静态方法:System.gc();
    ii. Runtime对象的实例方法:Runtime.getRuntime().gc();
    b. 查看垃圾回收后的提示信息:
    i. Java -verbose:gc 类名
  • 获取键盘输入
    : a. Scanner类
    : b. BufferedReader类

    i. BufferedReader不能读取基本类型的输入项,总是读取String对象;
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    try {
    while ((line = bufferedReader.readLine()) != null) {
    System.out.println(line);
    }
    } catch (IOException e) {
    e.printStackTrace();
    }

    1. 在Java中使用C语言
      a. 对于一些特殊的功能,如访问操作系统底层硬件设备等,Java程序无法实现,必须借助C语言来完成;
      b. 步骤:
      i. Java程序中声明native()方法,类似于abstract方法,只有方法签名,没有实现。编译该Java程序,生成一个class文件;
      ii. 用javah编译第一步生成的class文件,将产生一个.h文件;
      iii. 写一个.cpp文件实现native方法,其中需要包含第2步产生的.h文件(.h文件中又包含了JDK带的jni.h文件);
      iv. 将第三步的.cpp文件编译成动态链接库文件;
      v. 在Java中用System类的loadLibrary..()方法或Runtime类的loadLibrary()方法加载第四步产生的动态链接库文件,Java程序中就可以调用这个native文件了;
    2. System类
      a. getenv、getProperties、getProperty等方法来访问程序所在平台的环境变量和系统属性;
      b. gc方法通知系统进行垃圾回收;
      c. runFinalization()通知系统进行资源清理;
      d. 获取时间:currentTimeMillis()和nanoTime();都返回一个long型整数,都是与UTC1970年1月1日午夜的时间差;前者以毫秒为单位,后者以纳秒为时间单位;
      e. identityHashCode(Object x)方法,返回指定对象的精确hashcode值,也就是根据该对象的地址计算得到的hashcode值。即使类的hashcode()被重写后,依然是根据对象的地址计算得到hashcode值;
      f. 获取环境变量
      // 获取系统所有的环境变量
      Map
原创粉丝点击