`

Java 垃圾回收测试

    博客分类:
  • java
 
阅读更多

测试用例

ObjA

public class ObjA {
    
    private int idx;
    
    public ObjA(int i){
        idx = i;
        System.out.println("创建对象:ObjA("+i+")");
    }
 
    protected void finalize() throws Throwable{
        super.finalize();
        System.out.println("回收对象:ObjA("+idx+")");
    }
    
    public ObjB getObjB(int i){
        ObjB b = new ObjB(i);
        return b;
    }
}

 

ObjB

public class ObjB {
 
    private int idx;
 
    public ObjB(int i) {
        idx = i;
        System.out.println("创建对象:ObjB("+i+")");
    }
 
    protected void finalize() throws Throwable{
        super.finalize();
        System.out.println("回收对象:ObjB("+idx+")");
    }
 
    public String getStr(){
        System.out.println("调用 ObjB"+idx+".getStr();");
        return "getStr()";
    }
}

 

测试

测试1

代码

public class Main {
    public static void main(String[] args) {
 
        for (int i = 0; i < 10; i++) {
            ObjA obja = new ObjA(i);
            obja.getObjB(i).getStr();
            obja = null;
        }
        System.gc();
    }
}

 

运行结果

创建对象:ObjA(0)
创建对象:ObjB(0)
调用 ObjB0.getStr();
创建对象:ObjA(1)
创建对象:ObjB(1)
调用 ObjB1.getStr();
创建对象:ObjA(2)
创建对象:ObjB(2)
调用 ObjB2.getStr();
创建对象:ObjA(3)
创建对象:ObjB(3)
调用 ObjB3.getStr();
创建对象:ObjA(4)
创建对象:ObjB(4)
调用 ObjB4.getStr();
创建对象:ObjA(5)
创建对象:ObjB(5)
调用 ObjB5.getStr();
创建对象:ObjA(6)
创建对象:ObjB(6)
调用 ObjB6.getStr();
创建对象:ObjA(7)
创建对象:ObjB(7)
调用 ObjB7.getStr();
创建对象:ObjA(8)
创建对象:ObjB(8)
调用 ObjB8.getStr();
创建对象:ObjA(9)
创建对象:ObjB(9)
调用 ObjB9.getStr();
回收对象:ObjB(9)
回收对象:ObjA(9)
回收对象:ObjB(8)
回收对象:ObjA(8)

测试2

代码

public class Main {
    public static void main(String[] args) {
 
        for (int i = 0; i < 10; i++) {
            ObjA obja = new ObjA(i);
            obja.getObjB(i).getStr();
            obja = null;
            if (i % 2 ==0){
                System.gc();
            }
        }
    }
}

 

运行结果

创建对象:ObjA(0)
创建对象:ObjB(0)
调用 ObjB0.getStr();
创建对象:ObjA(1)
创建对象:ObjB(1)
调用 ObjB1.getStr();
创建对象:ObjA(2)
创建对象:ObjB(2)
调用 ObjB2.getStr();
回收对象:ObjB(0)
回收对象:ObjB(2)
回收对象:ObjA(2)
回收对象:ObjB(1)
回收对象:ObjA(1)
回收对象:ObjA(0)
创建对象:ObjA(3)
创建对象:ObjB(3)
调用 ObjB3.getStr();
创建对象:ObjA(4)
创建对象:ObjB(4)
调用 ObjB4.getStr();
创建对象:ObjA(5)
创建对象:ObjB(5)
调用 ObjB5.getStr();
创建对象:ObjA(6)
创建对象:ObjB(6)
调用 ObjB6.getStr();
回收对象:ObjB(4)
回收对象:ObjB(6)
回收对象:ObjA(6)
回收对象:ObjB(5)
回收对象:ObjA(5)
回收对象:ObjA(4)
回收对象:ObjB(3)
回收对象:ObjA(3)
创建对象:ObjA(7)
创建对象:ObjB(7)
调用 ObjB7.getStr();
创建对象:ObjA(8)
创建对象:ObjB(8)
调用 ObjB8.getStr();
创建对象:ObjA(9)
创建对象:ObjB(9)
调用 ObjB9.getStr();
回收对象:ObjB(8)
回收对象:ObjA(8)
回收对象:ObjB(7)
回收对象:ObjA(7)

总结分析

     从以上测试分析得知,在循环语句中,如果有大量对象创建,需要显示地执行System.gc();方法。 否则等JVM自己去处理垃圾的时候,可能已经造成OutOfMemory错误了。

     GC也不能执行得太频繁,所以建议,根据对象的内存占用情况决定循环多少次,显示地调用一次GC方法。

分享到:
评论
1 楼 xcg992224 2015-06-26  
大哥 不需要手动调用回收 是你在for的里面不应该每次都去new 外面new一次 里面每次赋值就ok了

相关推荐

    Java垃圾回收(二)老年代垃圾收集器(csdn)————程序.pdf

    Java垃圾回收机制是Java平台中一个非常重要的特性,它的主要任务是自动管理程序运行过程中的内存,自动识别并释放不再使用的对象,以避免内存泄漏。本篇将详细讲解老年代垃圾收集器,主要包括SerialOld、ParallelOld...

    java测试Linux服务器内存使用、回收情况

    通过简单的java程序测试Linux服务器内存使用、回收情况,排查Linux服务器内存使用异常的情况

    Java应用的垃圾回收优化

    Java应用的垃圾回收(Garbage Collection, GC)是优化高性能应用的关键环节,特别是对于追求高吞吐量和低延迟的服务,如LinkedIn的动态信息数据平台。优化GC涉及到多个层面,包括选择合适的垃圾回收器,调整参数,...

    高吞吐低延迟Java应用的垃圾回收优化.docx

    Java 应用垃圾回收优化 垃圾回收优化是 Java 应用的关键性能指标之一。对高吞吐低延迟 Java 应用的垃圾回收优化是确保用户体验的重要一步。LinkedIn 的高吞吐量服务需要低延迟地响应用户请求,动态信息数据平台作为...

    Java中内存泄露及垃圾回收机制.pdf

    ### Java中内存泄露及垃圾回收机制 #### 一、内存泄露概述 在计算机科学领域,内存泄露是指在程序运行过程中,不再使用的内存未被及时释放,导致这部分内存无法被重复利用,进而影响程序性能甚至导致程序崩溃的...

    java项目之垃圾分类微信小程序的设计与实现(源码+说明文档).zip

    java项目之垃圾分类微信小程序的设计与实现(源码+说明文档) 具体功能实现:可以分为前台功能和后台功能两大部分: 1. 前台功能模块: a.文字搜索功能模块:用户可以根据文本搜索物品,对垃圾进行分类; b.拍照识别...

    Java垃圾回收调优实战

    Java垃圾回收调优是优化Java应用程序性能的关键环节,特别是对于那些需要处理大量数据或执行高并发操作的应用。垃圾回收(Garbage Collection, GC)的主要任务是自动管理内存,释放不再使用的对象,避免内存泄漏,...

    Java垃圾回收机制的finalize方法实例分析

    Java垃圾回收机制的finalize方法实例分析 Java垃圾回收机制的finalize方法是垃圾回收机制中一个非常重要的概念,它可以帮助开发者更好地理解和掌握垃圾回收机制的工作机理。本文将通过实例形式分析finalize方法的...

    使用java编写的测试类

    它的语法与C++和C#有诸多相似之处,但Java引入了垃圾回收机制,自动处理内存管理,从而减轻了程序员的负担。Java的核心概念包括类、对象、接口、包、异常处理、多线程等。类是对象的蓝图,对象则是类的实例,它们...

    jdk垃圾回收介绍

    Java开发工具包(JDK)中的垃圾回收(Garbage Collection, 简称GC)是Java虚拟机(JVM)管理内存的一种自动化机制。在JDK 7中,G1(Garbage-First)垃圾回收器引入了一种新的内存管理策略,旨在提供可预测的暂停时间...

    Java的垃圾回收机制详解和调优大全

    Java的垃圾回收(GC)机制是Java编程中一个至关重要的概念,它负责自动管理内存,回收不再使用的对象,以防止内存泄漏。理解GC的工作原理和优化策略对于开发高性能的Java应用至关重要。 首先,GC的基本目标是识别并...

    关于Java垃圾回收开销降低的几条建议

    Java垃圾回收机制是Java编程中的核心部分,它自动管理程序的内存,回收不再使用的对象所占用的内存,以防止内存泄漏。然而,垃圾回收过程并非总是无缝进行的,尤其是在大型应用或高并发环境中,垃圾回收可能导致显著...

    Java groovy内存回收测试步骤解析

    Java Groovy 内存回收测试步骤解析 Java Groovy 内存回收测试步骤解析是指通过 Groovy 语言编写的 Java 应用程序中内存回收的测试步骤。该测试步骤旨在解决在使用 Groovy 语言编写的 Java 应用程序中出现的内存回收...

    SSM的垃圾分类回收平台.zip

    3. 垃圾投放点查询:显示附近的垃圾回收站位置,方便用户找到最近的投放点。 4. 回收预约:用户可以预约上门回收服务,减少不必要的出行。 5. 积分系统:根据用户投放垃圾的数量和质量,给予积分奖励,激励用户积极...

    垃圾回收系统

    在IT行业中,垃圾回收系统通常指的是编程语言中的内存管理机制,而非字面意义上的垃圾收集服务。这个系统主要用于自动管理程序中的内存,确保无用的对象能够被有效地释放,从而避免内存泄漏。在本项目中,"垃圾回收...

    C++ JAVA 软件测试面试题汇总

    - **JVM(Java Virtual Machine)**:Java程序的运行平台,理解垃圾回收机制、类加载器和JVM内存模型对优化Java程序很重要。 - **多线程**:Java提供了丰富的并发工具,如Thread类、Runnable接口、synchronized...

    单例模式与垃圾回收机制

    然而,在实际应用中,人们往往会关心这样一个问题:当单例对象长时间未被使用时,它是否会被Java虚拟机(JVM)的垃圾回收机制回收?本文将深入探讨这一问题,并基于HotSpot虚拟机的特性来分析答案。 #### 二、单例...

    Java 编程能力测试系统

    1. **编程题目**:Java编程能力测试系统的核心是它的题库,这些题目覆盖了Java语言的不同方面,包括基础语法、面向对象编程、集合框架、异常处理、多线程、IO流、网络编程、反射、注解、垃圾回收等。通过这些题目,...

Global site tag (gtag.js) - Google Analytics