`

计算类大小

阅读更多
package com.taobao.matrix.tbtry;

import java.util.Date;

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;
        InviterBean[] objects = new InviterBean[count];

        long heap1 = 0;
        // Allocate count+1 objects, discard the first one
       
        for (int i = -1; i < count; ++i) {
            InviterBean object = null;

            // Instantiate your data here and assign it to object

            object = new InviterBean("nickkijiuyg"+i,124L,34,new Date());
            //object = new Integer (i);
            //object = new Long (i);
            //object = new String ();
            //object = new byte [128][1]

            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");
    }

    private static void runGC() throws Exception {
        // It helps to call Runtime.gc()
        // using several method calls:
        for (int r = 0; r < 4; ++r)
            _runGC();
    }

    @SuppressWarnings("static-access")
    private static void _runGC() throws Exception {
        try{
            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();
            }
        }catch(Exception e) {
            System.out.println(e);
        }
    }

    private static long usedMemory() {
        return s_runtime.totalMemory() - s_runtime.freeMemory();
    }

    private static final Runtime s_runtime = Runtime.getRuntime();
} // End of class

分享到:
评论

相关推荐

    计算文件大小的php代码类.zip

    1. **递归计算目录大小**:对于包含多个子目录和文件的目录,该类可能提供一个方法来递归遍历所有文件并累加它们的大小,从而得到整个目录的总大小。 2. **处理大文件**:如果文件过大,`filesize()`函数可能会遇到...

    计算java对象大小

    在Java编程语言中,计算一个对象的大小是一个相对复杂的过程,因为对象的内存布局涉及到多个因素,包括对象头、实例字段、对齐填充等。这个主题通常与性能优化和内存管理有关,尤其是在处理大规模数据结构时。这篇...

    文件夹大小计算类c#

    标题"文件夹大小计算类c#"表明我们将讨论如何创建一个自定义的C#类来实现这个功能。描述中的“自己写了个”暗示了我们将探讨如何编写这样一个类或方法。 首先,我们需要创建一个名为`LenDir`的类,它可以包含一个...

    iOS计算缓存大小工具类.zip

    "iOS计算缓存大小工具类.zip" 文件提供了一个封装好的工具类,用于帮助开发者便捷地计算iOS应用中的缓存大小。 首先,我们要理解iOS中的缓存类型。iOS系统提供了多种缓存机制,如SQLite数据库、UserDefaults、Core ...

    定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数

    定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数,利用该类及其派生类实现圆形、三角形、矩形和梯形等图形的周长和面积的计算;主函数完成基类和...

    java 通过sizeOf计算一个对象的大小

    为了计算对象大小,我们需要借助一些第三方库或者自行实现。 一个常见的第三方库是`DeepSizeOf`,它来自Eclipse Collections框架,提供了类似于C++中的`sizeof`操作。使用这个库,你可以很容易地计算出一个对象及其...

    C++矩阵计算类

    "C++矩阵计算类"的设计和实现旨在提供高效且灵活的矩阵运算,包括加法、减法、乘法、转置以及矩阵的逆运算。 首先,我们需要定义一个表示矩阵的类,它通常包含两个主要部分:数据存储和操作接口。数据存储可以使用...

    php计算页面执行时间的类.zip

    2. 调用类方法:在脚本开始处调用类的初始化方法,然后在脚本结束或适当位置调用计算和显示时间的方法。 例如: ```php require_once 'YourTimingClass.php'; // 初始化类,记录开始时间 YourTimingClass::start()...

    计算java对象的大小的方法

    本文将深入探讨如何计算Java对象的大小,以及这个知识点在实际开发中的应用。 首先,Java对象的大小不仅仅包括其字段的大小,还包括对象头(object header)的大小,对于HotSpot虚拟机,它包含了对齐填充、Mark ...

    用于计算效应大小 测量的Matlab函数 集合_MATLAB_代码_相关文件_下载

    效应量测量 (MES) 工具箱是一组 Matlab 函数,可计算各种效应量统计数据。四个主要工具箱功能涵盖了常见的分析设计,包括双样本、...二项式效应大小显示 克莱默的 V 更多详情、使用方法,请下载后阅读README.md文件

    JAVA对象所占内存大小计算例子

    这个例子通常会使用Java内置的`sun.misc.Unsafe`类或者第三方库如`java.lang.instrument.Instrumentation`来计算对象大小。`Unsafe`类提供了访问内存的底层功能,可以获取对象头和实例数据的大小。 在`...

    计算机类考研机试问题总结

    计算机类考研机试问题总结 本资源总结了计算机类考研机试中常见的问题,包括排序问题、日期类问题和 Hash 应用的典型特点。下面对这些知识点进行详细的解释: 一、 排序问题 在计算机类考研机试中,排序问题是...

    计算rice.png米粒个数以及大小的matlab程序

    MATLAB作为一款强大的数值计算与科学可视化软件,提供了丰富的图像处理工具箱,可以方便地进行这类工作。 首先,我们需要导入图像。在MATLAB中,我们可以使用`imread`函数读取图像。例如,对于名为"rice.png"的PNG...

    java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)

    java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换) java 硬盘大小转换 数据转换 内存转换 存储大小转换

    php计算空间大小及删除文件夹

    首先,我们来看如何计算一个目录的总大小。在PHP中,可以使用`scandir()`函数来遍历目录中的所有文件和子目录,然后通过`filesize()`函数获取每个文件的大小,并累加得到总大小。以下是一个示例代码,它定义在一个名...

    测量Java对象大小的demo

    需要注意的是,`getObjectSize()`返回的是对象的大小,不包括任何父类的实例变量,因此,如果想要计算一个对象及其所有超类的大小,需要分别计算并累加。 在“CalcSize”这个压缩包中,可能包含了实现以上步骤的源...

    Android代码-android全屏模式下计算键盘的大小.rar

    本文将深入探讨如何在Android全屏模式下计算键盘的大小。 首先,全屏模式在Android中的实现主要通过在AndroidManifest.xml中对Activity的声明进行设置。添加`android:windowSoftInputMode="adjustResize"`属性可以...

    Java 源码:计算某个目录下的所有文件(夹)的大小,神器

    总之,Java提供的`File`类为我们提供了丰富的文件操作能力,通过递归遍历和累加文件大小,我们可以轻松地计算出指定目录的总大小。这样的工具在日常开发和系统维护中非常实用,帮助我们有效地管理磁盘空间。理解并...

    C++编程练习1 实现一个计算机的Class的层次结构

     类CPU Method :设定厂商名称 :取得厂商名称 :取得价格 :设定主频 :取得价格实现方法:根据主频的范围和厂商确定(自己自由发挥)  类Memory Method :设定厂商名称 :取得厂商名称 :取得价格...

Global site tag (gtag.js) - Google Analytics