一个物体有多大?为啥没有sizeof? [复制]
Posted
技术标签:
【中文标题】一个物体有多大?为啥没有sizeof? [复制]【英文标题】:How big is an Object? Why is there no sizeof? [duplicate]一个物体有多大?为什么没有sizeof? [复制] 【发布时间】:2011-08-01 06:03:30 【问题描述】:可能的重复:In Java, what is the best way to determine the size of an object?sizeof java object
C 有一个 sizeof 运算符,它需要有一个,因为用户必须管理对 malloc 的调用,并且因为原始类型(如 long)的大小不是标准化的。 但是在java中我们找不到对象的大小吗? 还有为什么java没有sizeof操作符或方法?
【问题讨论】:
好吧,你总是可以serialize()
它并检查它返回的字符串的长度......
它不是重复的,我不是问我如何找到对象的大小。为什么 java 没有 sizeof 运算符或方法来查找对象的大小
你问的是“java如何管理内存”?
@Domodar:你为什么要复制问题!?这个问题在这里被问和回答:http://norvig.com/java-iaq.html
【参考方案1】:
还有为什么java没有sizeof操作符或方法?
答案 #1 - 因为 Java 不需要这个。在 C 中,需要 sizeof 运算符,以便您可以malloc
正确大小的对象,用于执行某些类型的指针运算,等等。在 Java 中,您不需要(也不能)做这些事情。
答案 #2 - Java 中对象的大小相当灵活,并且确实可以在对象的整个生命周期内改变(至少在某些 JVM 中)。因此,sizeof
运算符会有问题。
【讨论】:
【参考方案2】:您已经回答了自己的问题,在 c 中您管理 java 中的内存,而 jvm 则可以。
在 c 中,您直接为要存储的数据结构 (malloc) 分配内存,因此您经常需要知道这些东西的大小。
在 java 中,内存系统在很大程度上被抽象了,所以你(通常)不关心你只是调用 new 并且它会做它做的任何事情,如果不同的 jvm 做不同的事情,你声明的类使用的内存可能会有所不同。
有时了解您的类占用了多少内存很有用(例如,您试图在一个严格受限的环境中减少内存占用),但您在运行时需要此类信息的情况非常少见。
【讨论】:
您能解释一下您不清楚的地方吗?关于这个主题有很多材料,但我怀疑你有一个疑问,但我们无法猜测它是什么。【参考方案3】:在 C 中,您必须手动管理内存使用情况,您在问题中也说了这么多。由于您需要为对象分配空间并将其删除,因此需要 sizeof 运算符快速轻松地完成此操作。在 Java 中,内存管理由 JVM 负责。您不需要手动分配和取消分配内存,因此不需要 sizeof 运算符。
【讨论】:
【参考方案4】:在 c 中有很多关于指针的工作。程序员应该自己管理内存,所以他应该知道类型的大小。但是在 Java 中没有手动内存管理。 JVM 会做这一切,所以不需要 sizeof。
【讨论】:
以上是关于一个物体有多大?为啥没有sizeof? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
请问在如下定义中malloc()开辟的空间有多大,其中m[0]=8;m[]1=9;分别占用了多大的空间?
说明为啥漏桶算法每个时钟节拍只允许发送一个分组,不管分组有多大