zoukankan      html  css  js  c++  java
  • java的清理

    java的创建

    http://www.cnblogs.com/maying3010/p/5866128.html

    java的作用域

    作用域一般是最近的一个花括号内部出了作用域,该对象仍继续占据内存空间,但我们无法访问该对象

    java的回收

    1. 当一个对象离开了作用域或者为null时,java的垃圾回收机制会认为该对象可以回收(不一定回收)。

    2. 垃圾回收器准备释放内存的时候,会先调用finalize()并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存

    3. System.gc()方法:该方法只是向垃圾回收器建议回收内存,不一定会真正回收内存。

    test1:

    public class TestClass {
        int flage = 0;
        TestClass(int flage){
            System.out.println("new Object TestClass");
            this.flage = flage;
        }
        @Override
        protected void finalize() {
            System.out.println("run this method:finalize() And this flag is " + flage);
        }
        public static void main(String[] args) {
            TestClass t = new TestClass(2);
            System.gc();
        }
    }output:
    new Object TestClass

    test2:

    public class TestClass {
        int flage = 0;
        TestClass(int flage){
            System.out.println("new Object TestClass");
            this.flage = flage;
        }
        @Override
        protected void finalize() {
            System.out.println("run this method:finalize() And this flag is " + flage);
        }
        public static void main(String[] args) {
            TestClass t = new TestClass(2);
            t = null;
            System.gc();
        }
    }output:
    new Object TestClass
    run this method:finalize() And this flag is 2

    test3:

    public class TestClass {
        int flage = 0;
        TestClass(int flage){
            System.out.println("new Object TestClass");
            this.flage = flage;
        }
        @Override
        protected void finalize() {
            System.out.println("run this method:finalize() And this flag is " + flage);
        }
        static void test(){
            TestClass t = new TestClass(3);
        }
        public static void main(String[] args) {
            TestClass t = new TestClass(2);
            test();
            System.gc();
        }
    }output:

    new Object TestClass
    new Object TestClass
    run this method:finalize() And this flag is 3

    垃圾回收机制触发的条件

    JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC:

    ①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。

    ②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。

    由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。

    原理

    先立一个flag在这里,等看了jvm后再写

    reference

    http://www.blogjava.net/wilesun/archive/2007/10/08/150955.html

  • 相关阅读:
    LINUX系列:Shell命令
    java程序猿必须掌握的4种线程池
    JAVA编程:Lock线程锁
    Spring框架之IOC的基本配置
    浅谈Java中的内部类
    [XDFZDay2]NOIP模拟
    [XDFZ集训Day1]NOI2020模拟1
    CSP2019游记
    11.11-11.12 CSP模拟总结
    [BJOI2019]排兵布阵
  • 原文地址:https://www.cnblogs.com/maying3010/p/5866270.html
Copyright © 2011-2022 走看看