`
xly1981
  • 浏览: 146595 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java对象占用heap的大小

    博客分类:
  • java
 
阅读更多
一个对象占用的堆空间首先是和它有多少个成员变量直接相关
public class Sizeof
{
    public static void main (String [] args) throws Exception
    {
        // Warm up all classes/methods we will use
        runGC ();
        usedMemory ();
        // Array to keep strong references to allocated objects
        final int count = 100000;
        Object [] objects = new Object [count];        
        long heap1 = 0;
        // Allocate count+1 objects, discard the first one
        for (int i = -1; i < count; ++ i)
        {
            A object = null;
            // Instantiate your data here and assign it to object
             object = new A ();
            if (i >= 0)
                objects [i] = object;
            else
            {
                object = null; // Discard the warm up object
                runGC ();
                heap1 = usedMemory (); // Take a before heap snapshot
            }
        }
        runGC ();
        long heap2 = usedMemory (); // Take an after heap snapshot:        
        final int size = Math.round (((float)(heap2 - heap1))/count);
        System.out.println ("'before' heap: " + heap1 +
                            ", 'after' heap: " + heap2);
        System.out.println ("heap delta: " + (heap2 - heap1) +
            ", {" + objects [0].getClass () + "} size = " + size + " bytes");
        for (int i = 0; i < count; ++ i) objects [i] = null;
        objects = null;
    }
    private static void runGC () throws Exception
    {
        // It helps to call Runtime.gc()
        // using several method calls:
        for (int r = 0; r < 4; ++ r) _runGC ();
    }
    private static void _runGC () throws Exception
    {
        long usedMem1 = usedMemory (), usedMem2 = Long.MAX_VALUE;
        for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i)
        {
            s_runtime.runFinalization ();
            s_runtime.gc ();
            Thread.currentThread ().yield ();
            
            usedMem2 = usedMem1;
            usedMem1 = usedMemory ();
        }
    }
    private static long usedMemory ()
    {
        return s_runtime.totalMemory () - s_runtime.freeMemory ();
    }
    
    private static final Runtime s_runtime = Runtime.getRuntime ();
} // End of class

class A{
	private String a="abbfffffffff";
	private  String b;
	private  String d;
	private  String e;
	private  String d1;
	private  String e1;
	private  String d2;
	private  String e2;
	public String getA() {
		return a;
	}
	public void setA(String a) {
		this.a = a;
	}
	public String getB() {
		return b;
	}
	public void setB(String b) {
		this.b = b;
	}
	public String getD() {
		return d;
	}
	public void setD(String d) {
		this.d = d;
	}
	public String getE() {
		return e;
	}
	public void setE(String e) {
		this.e = e;
	}
	
}


下面执行的结果是:
'before' heap: 552496, 'after' heap: 4552496
heap delta: 4000000, {class A} size = 40 bytes

分享到:
评论

相关推荐

    java-sizeof-0.0.4:一个查看java对象占用内存大小

    了解对象占用的内存大小有助于我们优化资源使用,减少内存泄漏,并提高程序效率。 "java-sizeof-0.0.4"是一个用于分析Java对象内存占用的工具,它可以帮助开发者更好地理解对象在运行时的内存消耗。这个工具提供了...

    解决Java_heap_space问题

    当程序创建的对象过多或单个对象占用内存过大时,如果没有足够的空闲内存来分配新对象,JVM就会抛出“OutOfMemoryError: Java heap space”错误。这可能是由于以下原因造成的: 1. **初始堆大小设置不当**:默认...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    在Java开发与运维中,`java.lang.OutOfMemoryError: Java heap space`是一个常见的错误信息,它表明JVM(Java虚拟机)的堆内存已经耗尽,无法再分配新的对象。这通常发生在程序运行时创建了大量对象而没有及时释放,...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    - **Java heap space**: 堆是JVM管理的一部分内存,用于存储对象实例和数组。当堆内存无法满足新对象的分配需求时,就会抛出此异常。 **描述:“搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap ...

    Myeclipse下java.lang.OutOfMemoryError Java heap space的解决

    ### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...

    关于(java heap space)内存溢出的解决办法

    在Java编程中,"java heap space"内存溢出是一个常见的问题,它通常发生在应用程序尝试分配超过JVM堆内存限制的对象时。这个问题对于任何Java开发者来说都至关重要,因为如果不妥善处理,可能会导致程序崩溃。以下是...

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    这时需要使用内存分析工具,如VisualVM或MAT(Memory Analyzer Tool),来分析堆转储文件,找出哪些对象占用过多内存并查找泄漏源头。 3. **优化对象使用**:避免创建大量大对象,尤其是长时间存活的对象,因为它们...

    java heap space解决方法

    如果程序运行时创建了大量对象或者对象占用的空间超过了当前设置的堆内存大小,就会出现内存溢出错误。 #### 三、调整Java堆内存的方法 根据题目中的内容,我们可以总结出两种常见的调整Java堆内存的方式:通过...

    java 内存溢出分析工具 HeapAnalyzer

    HeapAnalyzer是一款Java内存分析工具,由IBM开发,它可以帮助开发者检查和分析Java堆内存的状态,找出可能存在的内存泄漏或者过度占用内存的对象。通过分析heap dump文件,HeapAnalyzer可以展示对象的分布情况,识别...

    tomcat 解决Java heap space问题

    当堆空间不足以满足新对象的创建或已存在对象的升级时,就会抛出“Java heap space”异常。 解决这个问题有以下几种策略: 1. 增加JVM堆大小:可以通过调整JVM启动参数 `-Xms` 和 `-Xmx` 来设定初始堆大小和最大堆...

    编译时出现java.lang.OutOfMemoryError Java heap space异常

    1. **项目规模过大**:如果项目中的类文件数量过多或者单个对象占用内存较大时,很容易超出默认的堆内存限制。 2. **内存分配不合理**:某些情况下,由于配置不当导致JVM启动时分配的堆内存过小。 3. **内存泄漏**:...

    java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法

    - 及时释放不再使用的对象引用,以便垃圾回收器可以尽早回收这些对象占用的内存。 - 使用弱引用、软引用或虚引用来替代强引用,在适当情况下减少内存占用。 3. **定位并修复内存泄漏**: - 使用内存分析工具如...

    记录java.lang.OutOfMemoryErrorJava heap space的情况.docx

    这个错误通常发生在创建大量对象或者单个对象占用过多内存时。 一、问题描述与原因分析: 当JVM在执行垃圾收集(Garbage Collection, GC)过程中,如果98%的时间用于GC,并且剩余的堆内存不足以满足2%的需要,就会...

    ibm-java-堆内存分析工具-heapanalyzer

    IBM Java堆内存分析工具——HeapAnalyzer,是一款专为IBM J9 VM设计的强大内存分析工具,它可以帮助开发者深入理解Java应用程序的内存使用情况,检测并解决内存泄漏问题,从而提升应用性能。本文将详细介绍Heap...

    ibm HeapAnalyzer java内存分析工具 ha457.jar

    这款工具通过对Java堆内存的深入分析,帮助开发者定位那些占用过多内存的对象,从而优化应用性能。在Java开发过程中,内存管理是关键的一环,尤其是对于长时间运行的服务,内存泄漏可能导致系统性能下降,甚至崩溃。...

    An internal error occurred during: \"Building workspace\". Java heap space

    当程序创建过多的对象或单个对象占用过大内存,以至于超过了JVM分配的堆内存大小时,就会抛出“Java heap space”异常。 在Eclipse中,"Building workspace"是Eclipse自动构建项目的过程,它包括编译、索引更新等...

    Java对象内存布局 - 小分析

    1. **堆内存(Heap)**:这是Java对象的主要存储区域,所有通过`new`关键字创建的对象都会被分配到堆上。堆内存被所有线程共享,且在JVM启动时创建。堆内存分为新生代(Young Generation)、老年代(Tenured ...

    heap_java_heap_

    GC主要负责自动回收不再使用的对象所占用的内存空间,以防止内存泄漏。Java提供了多种垃圾收集器,如Serial GC、Parallel GC、CMS(Concurrent Mark Sweep)和G1(Garbage-First)等,每种GC策略都有其适用场景和优...

Global site tag (gtag.js) - Google Analytics