问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

中国山东省济南市建设路

发布网友 发布时间:2022-05-16 18:03

我来回答

3个回答

热心网友 时间:2023-11-13 09:18

package t3;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class ObjectSize {
final private static int LENGTH_BOOLEAN=1;
final private static int LENGTH_BYTE=1;
final private static int LENGTH_SHORT=2;
final private static int LENGTH_CHAR=2;
final private static int LENGTH_INT=4;
final private static int LENGTH_FLOAT=4;
final private static int LENGTH_LONG=8;
final private static int LENGTH_DOUBLE=8;
final private static int LENGTH_REFERENCE=4;
final private static int LENGTH_OBJECT=8;

public static int sizeofObject(Object obj)
{ int size=0;
//如果指向为空,则返回引用
if(obj==null) return REFERENCE;
//取得对象的类
Class c=obj.getClass();
//判断参数对象是不是数组类实例化的
if(c.isArray())
{
//引用数组和基本类数组
}

//如果不是静态字段
Field[] fields=obj.getClass().getDeclaredFields();
Field[] fieldsExtends=obj.getClass().getSuperclass().getDeclaredFields();
//合并父子
Field[] newFields=new Field[fields.length+fieldsExtends.length];
System.arraycopy(fields, 0, newFields, 0, fields.length);
System.arraycopy(fieldsExtends, 0, newFields, fields.length, fieldsExtends.length);
//打印测试
for(Field i:fields)
{
i.setAccessible(true);
System.out.println(i);
}
for(Field i:fields)
{ //判断是否为静态,如果不是
if(!Modifier.isStatic(i.getModifiers()))
{
if(i.getType().isPrimitive())
{
size+=sizeofPrimitive(i.getType());
}
else
{
Object objBack=null;
try{
objBack=i.get(obj);
}
catch(IllegalAccessException e){

}

size+=sizeofObject(objBack);

}
}
}
}

/**
* 活得数组的维度
* @param obj
* @return
*/
private static int[] getDimension(Object obj)
{
int dimension=0;
Class c=obj.getClass();
while(c.isArray())
{
dimension++;
c=c.getComponentType();
}
}
public static int sizeofPrimitive(Class c)
{
return;
}
}

-----------------------------------------------------------------------------------------
package treeroot.util;
import Java.lang.reflect.*;
import java.util.*;
/**
* Compute the size of a Runtime object or Primitive type.
* Because the memory allocation is unknown,we just add
* all the fields size of a object.
* the primitive size is thounght as
* boolean:1
* byte:1
* short:2
* char:2
* int:4
* float:4
* long:8
* double:8
* the array size are the sum of all the elements
* the null reference is thought to 4 byte.
* the Object instance has the size 8.
*
*/
public class Size
{
final private static int BOOLEAN=1;
final private static int BYTE=1;
final private static int SHORT=2;
final private static int CHAR=2;
final private static int INT=4;
final private static int FLOAT=4;
final private static int LONG=8;
final private static int DOUBLE=8;
final private static int REFERENCE=4;
final private static int OBJECT=8;

private static ThreadLocal objs=new ThreadLocal();
private static void init(Object o){
Map map=new IdentityHashMap();
map.put(o,null);
objs.set(map);
}
public static int sizeof(boolean i){
return BOOLEAN;
}
public static int sizeof(byte b){
return BYTE;
}
public static int sizeof(short s){
return SHORT;
}
public static int sizeof(char c){
return CHAR;
}
public static int sizeof(int i){
return INT;
}
public static int sizeof(float f){
return FLOAT;
}
public static int sizeof(long l){
return LONG;
}
public static int sizeof(double d){
return DOUBLE;
}
public static int sizeof(Object o){
init(o);
return sizeof0(o);
}
private static int sizeof0(Object o) {
int size=OBJECT;
//if the object is null
if(o==null) return REFERENCE;

Map map=(Map)objs.get();
Class c=o.getClass();
//if it is array
if(c.isArray()){
int[] dimension=getDimension(o);
int len=dimension.length;

Object obj=o;

int num=1;
for(int j=0;j<len-1;j++) num*=dimension[j];
if(dimension[len-1]==0){
size+=num*REFERENCE;
}
else{
num*=dimension[len-1];
//处理递归
int[] index;

Class type=c;
while(type.isArray()) type=type.getComponentType();
//基本类型的数组
if(type.isPrimitive()){
size+=num*sizeofPrimitive(type);
}
//引用类型数组
else{

for(int k=0;k<num;k++){
index=countToIndex(k,dimension);
Object temp=obj;
for(int m=0;m<len;m++){
temp=Array.get(temp,index[m]);
}
//加入数组中的所有对象

if(!map.containsKey(temp)){
size+=sizeof0(temp);
map.put(temp,null);
}
}
}
}
}

// all not-static fields
Field[] fs=getFields(o.getClass());
for(int i=0;i<fs.length;i++){

Field f=fs[i];
if(!Modifier.isStatic(f.getModifiers())){
Class type=f.getType();
//if it is primitive
if(type.isPrimitive()){
size+=sizeofPrimitive(type);
}
//recurtive
else{
Object obj=null;
try{
obj=f.get(o);
}
catch(IllegalAccessException e){
//won't be happen
throw new RuntimeException("impossible");
}
if(!map.containsKey(obj)){
size+=sizeof0(obj);
map.put(obj,null);
}
}
}
}

return size;
}
private static int[] countToIndex(int count,int[] d){
int[] res=new int[d.length];
int c=count;
int i=1;
while(c>0){
int t=1;
for(int j=i;j<d.length;j++) t*=d[j];
if(t>c) i++;
else{
res[i-1]=c/t;
c=c%t;
}
}
return res;
}

private static int sizeofPrimitive(Class c){
if (c==boolean.class){
return BOOLEAN;
}
else if(c==byte.class){
return BYTE;
}
else if(c==char.class){
return CHAR;
}
else if(c==short.class){
return SHORT;
}
else if(c==int.class){
return INT;
}
else if(c==float.class){
return FLOAT;
}
else if(c==long.class){
return LONG;
}
else if(c==double.class){
return DOUBLE;
}
else{
throw new IllegalArgumentException("Thrown by sizeOfPrimitive()");
}
}
private static int[] getDimension(Object obj){
int dimension=0;
Class c=obj.getClass();
while(c.isArray()){
dimension++;
c=c.getComponentType();
}
int[] res=new int[dimension];

Object o=obj;
for(int i=0;i<dimension-1;i++){
res[i]=Array.getLength(o);
o=Array.get(o,0);
}
res[dimension-1]=Array.getLength(o);
return res;
}

private static Field[] getFields(Class c){
Class superClass=c.getSuperclass();
Field[] s=null;
if(superClass!=null){
getFields(superClass);
}
Field[] fs=c.getDeclaredFields();

//设置为可访问的
Field.setAccessible(fs,true);

//合并
int size=0;
if(s!=null) size+=s.length;
if(fs!=null) size+=fs.length;
Field[] result=new Field[size];
int index=0;
if((s!=null)&&(s.length>0)){
System.arraycopy(s,0,result,0,s.length);
index+=s.length;
}
if((fs!=null)&&(fs.length>0)){
System.arraycopy(fs,0,result,index,fs.length);
}
return result;
}
}

热心网友 时间:2023-11-13 09:18

这......什么情况?

热心网友 时间:2023-11-13 09:19

建设路99--1号属于哪个街道
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
瑞安市塘下航达汽车电器配件厂怎么样? 意尔康公司总部地址在哪里 I only wish to face the sea, with spring blossoms是什么意思 征信五级分类是什么?被纳入黑名单有什么影响? 你好,如果诈骗分子利用你隐私视频和盗取你的通讯录好友威胁你要钱的话... ...对方有我的私密照片还有通讯录,要求我给他五千,要不然就发我家人,我... ...现在已经一个月没有性生活了。但是她平时对我很好 是怎么了?_百度... 女人半年没有性生活正常吗 谁能用英语给我写一段游戏里面的征婚启事? 征婚启事用英文怎么说? 绿源电动车幻战,我是株洲市区的,请问下株洲市区有门店卖这款吗,如果没有我该如何购买呢,? 离济南市川江号子(建设路附近)最近的公交车站叫啥? 万代HG 高高MG 选择哪个比较好 魔兽世界 关于屠龙 万代HG模型买哪个好? 魔兽世界 屠龙纲要有什么用? 唐山市戴尔售后地址 深圳龙华哪里有建设银行? 魔兽世界屠龙纲要有什么用? 模魂真悟和万代的HG 卡碧尼 万代的高达HG的最便宜得要多少钱 对陆机&quot;巧而碎乱&quot;的理解 陆机《文赋》中最关系到文学的文体是哪两种 陆柬之的主要作品 陆机文赋的作者简介 陆机文赋的介绍 陆机文赋的内容介绍 评价王杰状元的书法,关于陆机那篇《文赋》的、 陆机《文赋》“伫中区以玄览,颐情志于典坟”如何翻译? 陆机文赋的意思 生产一吨纸需要多少木浆 魔兽世界屠龙者称号如何获得 WOW屠龙大师的纲要换出来的是什么武器? 魔兽争霸风云2怎么屠龙 上海南到崇明岛崇明建设公路1992号怎么走 魔兽RPG倚天屠龙记怎么通关? 魔兽世界屠龙技术纲要怎么刷合理 魔兽 一天屠龙秘籍 Y天平用英文怎么翻译? 【想分别用 y b b开头的三个单词组个有一定意义的短句,然后做纹身。麻烦给解答,谢谢! ) 电脑如何连接? HIGH OUTPUT是什么意思?这个接口能起到什么作用? - 信息提示 请翻译英文~谢谢 为什么我的电脑连不上 怎样识别YY? 如何取消原来电脑上设置好的连接? Windows电脑上如何进行设置? 电脑连接不上,提示不能访问网络位置,有关网络排除故障的信息,请 如何在电脑上下载灯塔党建在线客户端?