为什么java中没有sizeof

为什么java中没有sizeof,java,sizeof,operator-keyword,Java,Sizeof,Operator Keyword,java中没有sizeof操作符是出于什么设计原因?知道它在C++和C语言中非常有用,如果需要,你如何得到某种类型的大小?p> 在c中是有用的,因为您必须手动分配和释放内存。但是,由于在java中有自动垃圾收集,因此这是不必要的。因为垃圾收集是由java语言明确规定的。JVM实现之间没有差异 此外,由于分配是由new运算符根据其参数完成的,因此无需指定所需的内存量 有时知道一个对象将占用多少内存肯定会很方便,这样您就可以估计最大堆大小需求,但我想Java语言/平台设计者并不认为这是一个关键方面。

java中没有sizeof操作符是出于什么设计原因?知道它在C++和C语言中非常有用,如果需要,你如何得到某种类型的大小?p> 在c中是有用的,因为您必须手动分配和释放内存。但是,由于在java中有自动垃圾收集,因此这是不必要的。

因为垃圾收集是由java语言明确规定的。JVM实现之间没有差异

此外,由于分配是由
new
运算符根据其参数完成的,因此无需指定所需的内存量


有时知道一个对象将占用多少内存肯定会很方便,这样您就可以估计最大堆大小需求,但我想Java语言/平台设计者并不认为这是一个关键方面。

在Java中,您不直接使用内存,所以通常不需要
sizeof
,如果您仍然想确定对象的大小,请检查。

内存管理是由Java中的VM完成的,这可能会对您有所帮助:

C需要sizeof,因为int和long的大小取决于操作系统和编译器。或者至少过去是这样。:-)在Java中,所有大小的位配置(如IEEE 754)都有更好的定义


编辑-我看到@Maerics在他的回答中提供了一个指向Java规范的链接。

可能的重复项您能解释一下为什么您认为需要它吗?如果是这样的话,我们可能会帮助您解决实际问题。您打算如何处理这些信息?您能否指定一种在Java中“非常有用”的情况?我从来不需要它。伙计们,c#也是如此。我认为这是设计的原因。这是设计的结果。“人们批评Java中缺少它”是c#中许多东西的设计原因。c#比Java更明确地针对非托管/COM互操作。我知道有时它可能有用,但正如@maerics指出的,可能设计者认为没有必要将其添加到语言规范中。还有很多方法可以知道一个物体的大小,请检查其中一个问题的注释。