一个物体有多大?为啥没有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;分别占用了多大的空间?

说明为啥漏桶算法每个时钟节拍只允许发送一个分组,不管分组有多大

DOM 元素的内存大小有多大? [复制]

input() 函数的输入可以有多大?

Core SignalR 消息大小 - 有没有办法记录您的消息有多大?

最全最新数据分析,贸易战对中国的GDP影响有多大?