`

jdk6.0从入门到精通-----chapter2--参数传递,强弱引用

JVM 
阅读更多
...用于不定参数

package uncertainParameter;

public class Testparameter {
public void argtest(Object ...objects ){//...表示不定参数个数
	for(int i=0;i<objects.length;i++){
		System.out.println(objects[i]);
	}
}
	public static void main(String[] args) {

	new Testparameter().argtest(23,"hello",true);
	
	}

}


java的引用例子,强引用,弱引用,虚引用

package reference;
import java.lang.ref.SoftReference; 
import java.lang.ref.WeakReference;
import java.lang.ref.PhantomReference;//虚引用
import java.lang.ref.ReferenceQueue; 
import java.util.Set;
import java.util.HashSet;

public class TestReferences 
{ 
    public static void main(String[] args) 
    {
        int length=3;
        
        //创建length个MyObject对象的强引用
        Set<MyObject> a = new HashSet<MyObject>();
        for(int i = 0; i < length; i++) 
        {
            MyObject ref=new MyObject("Hard_" + i);
            System.out.println("创建强引用:" +ref);
            a.add(ref);
        }
        a=null; //强引用对象,除非显示调用对象=null,否则不会立刻回收空间
        System.gc();
        
        //创建length个MyObject对象的软引用
        Set<SoftReference<MyObject>> sa = new HashSet<SoftReference<MyObject>>();
        for(int i = 0; i < length; i++) 
        {
            SoftReference<MyObject> ref=new SoftReference<MyObject>(new MyObject("Soft_" + i));
            System.out.println("创建软引用:" +ref.get());
            sa.add(ref);
        }
        System.gc(); // 空间足够,不回首,空间不足,回收对象

        //创建length个MyObject对象的弱引用
        Set<WeakReference<MyObject>> wa = new HashSet<WeakReference<MyObject>>();
        for(int i = 0; i < length; i++) 
        {
            WeakReference<MyObject> ref=new WeakReference<MyObject>(new MyObject("Weak_" + i));
            System.out.println("创建弱引用:" +ref.get());
            wa.add(ref); 
        }
        System.gc();  //一旦发现被弱引用的对象,立即回收,不管空间足够与否

        //创建length个MyObject对象的虚引用
        ReferenceQueue<MyObject> rq = new ReferenceQueue<MyObject>();
        Set<PhantomReference<MyObject>> pa = new HashSet<PhantomReference<MyObject>>();
        for(int i = 0; i < length; i++) 
        {
            PhantomReference<MyObject> ref = new PhantomReference<MyObject>(new MyObject("Phantom_" + i), rq);
            System.out.println("创建虚引用:" +ref.get());
            pa.add(ref);
        }
        System.gc();
    }
}

class MyObject
{
    private String id;

    public MyObject(String id) 
    { 
        this.id = id; 
    }

    public String toString() 
    { 
        return id; 
    }
//    JVM保证在一个对象所占用的内存被回收之前,如果它实现了finalize方法,则该方法一定会被调用
    public void finalize() 
    {
        System.out.println("回收对象:" + id);
    }
}


执行结果:
创建强引用:Hard_0
创建强引用:Hard_1
创建强引用:Hard_2
回收对象:Hard_2
回收对象:Hard_1
回收对象:Hard_0
创建软引用:Soft_0
创建软引用:Soft_1
创建软引用:Soft_2
创建弱引用:Weak_0
创建弱引用:Weak_1
创建弱引用:Weak_2
回收对象:Weak_2
回收对象:Weak_1
回收对象:Weak_0
创建虚引用:null
创建虚引用:null
创建虚引用:null
回收对象:Phantom_2
回收对象:Phantom_1
回收对象:Phantom_0


finalize的用法

package reference;

class A {
	B b;

	public void finalize() {
		System.out.println("method A.finalize at " + System.nanoTime());
	}
}

class B {
	public void finalize() {
		System.out.println("method B.finalize at " + System.nanoTime());
	}
}

public class Test {

	public static void main(String[] args) {
		A a = new A();
		a.b = new B();
		a = null;
		System.gc();
	}
}

method B.finalize at 12487493406564
method A.finalize at 12487493840976




分享到:
评论

相关推荐

    jdk6.0从入门到精通-----chapter17动态编程

    《JDK 6.0从入门到精通——Chapter 17 动态编程》 在Java编程领域,JDK 6.0版本引入了许多新特性,其中动态编程是提升开发效率和灵活性的重要方面。本章将深入探讨动态编程的概念、用途以及如何在JDK 6.0中利用这些...

    jdk6.0从入门到精通-----chapter18与动态语言结合

    标题中的“jdk6.0从入门到精通-----chapter18与动态语言结合”指的是Java开发工具包(JDK)6.0版本中的一个章节,主要探讨了如何将Java与动态编程语言集成。在Java 6中,引入了一个重要的特性,即Java平台标准版6...

    (源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象

    标题 "(源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象" 提供了我们要探讨的主题,即Java中的输入输出流(I/O Stream)和对象克隆。在这个章节中,我们将深入理解这两个关键概念。 **输入输出流...

    jdk6.0从入门到精通-----chapter7线程

    《JDK 6.0线程入门到精通——Chapter 7》 在Java开发中,线程是程序执行的最小单元,它使得一个程序能够同时处理多个任务,从而提高了程序的效率和响应性。在JDK 6.0中,线程的管理和使用有了更加完善的特性,对于...

    jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)

    在Java编程领域,JDK(Java Development Kit)是开发和运行Java应用程序的...总的来说,"JDK6.0从入门到精通-----chapter5网络编程 新I/O"是一个极好的学习资源,无论你是初学者还是有经验的开发者,都能从中获益良多。

    jdk6.0从入门到精通-----chapter8并发多线程(1)(源码下载)

    本章“jdk6.0从入门到精通-----chapter8并发多线程(1)”着重讲解了Java 6中关于多线程的基本知识和实践技巧。通过源码下载,读者可以更直观地理解多线程的实现方式。 首先,我们要理解什么是多线程。在单线程环境...

    jdk6.0从入门到精通-----chapter4--文件目录操作

    本章节将深入探讨JDK 6.0中的文件和目录操作,这对于任何Java开发者来说都是必备的知识点。在实际项目中,我们需要频繁地与文件系统交互,例如读取、写入、移动或删除文件和目录,因此理解这部分内容至关重要。 ...

    jdk6.0从入门到精通-----chapter16反射机制-spring AOP

    在Java编程领域,JDK6.0是一个重要的版本,它为开发者提供了丰富的特性和改进。本章我们将深入探讨“反射机制”以及如何结合Spring AOP(面向切面编程)进行应用。反射是Java中的一种强大工具,允许程序在运行时检查...

    jdk 6.0 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008(微信开发平台开发JDK)

    微信开发平台开发工具 JDK jdk 6.0 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008

    jdk-7u80-windows-x64安装包

    jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...

    JDK6.0+中文文档-lytim24.part1.rar

    java6.0文档chm版,分成三部分,分别为JDK6.0+中文文档-lytim24.part1.rar、JDK6.0+中文文档-lytim24.part2.rar、JDK6.0+中文文档-lytim24.part3.rar

    官方JDK6.0中文版

    - 首先,从官方或可信渠道下载JDK 6.0的安装程序。 - 运行安装程序,按照提示完成安装过程。 - 配置环境变量,如JAVA_HOME指向JDK安装目录,PATH添加bin子目录,确保系统能够找到Java命令。 - 检验安装是否成功,...

    开发工具 jdk-8u121-windows-i586

    开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8...

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    JDK6.0u10b32-windows-

    这个是安装开发工具java jdk 有很多用途

    jdk-8u131-windows-x64

    jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-...

    jdk-8u311-windows-x64.exe

    jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...

    jdk-8u60-windows-i586-JDK1.8-32位

    jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586

    jdk1.8 jdk-8u5-windows-i586 32位官方正式版

    jdk1.8 jdk-8u5-windows-i586 32位官方正式版 jdk1.8 jdk-8u5-windows-i586 32位官方正式版

    JDK6.0+中文文档-lytim24.part2.rar

    java6.0文档chm版,分成三部分,分别为JDK6.0+中文文档-lytim24.part1.rar、JDK6.0+中文文档-lytim24.part2.rar、JDK6.0+中文文档-lytim24.part3.rar

Global site tag (gtag.js) - Google Analytics