关于内存效率,我有以下问题:
必须为相应的变量使用正确的数据类型。将1
的数值表示为byte
需要八分之一的内存(但如果我错了,请纠正我)。我的问题是,如果内存分配/扣除发生在定义变量类型或初始化?这可能看起来很奇怪,但我问的是不需要初始化的全局变量,因为它们有默认值,而不是局部变量。我还想知道是否有对象数据类型的默认大小?我认为这是基于JVM(32位vs 64位)?
当然必须为相应的变量使用正确的数据类型。
。Java是一种强类型语言。你的观点呢?
将数值1表示为一个字节需要八分之一的内存(但如果我错了请纠正我)。
你错了。根据相邻声明的其他变量和类型,它可能需要4甚至8个字节,这取决于JVM使用的填充。
我的问题是,如果内存分配/扣除发生在定义变量类型或初始化?
。它发生在分配时,即在new
时,而不是在构造函数中,例如
这可能看起来很奇怪,但是我问关于不需要初始化的全局变量,因为它们有默认值
所有变量都需要初始化。对于静态变量或实例变量,您不需要编写初始化器代码。"global"这个词在Java中没有任何意义。
相对于局部变量
它是什么没有任何区别。变量仍然需要分配空间并存储值,无论是静态的、实例的还是方法局部的。
我还想知道是否有对象数据类型的默认大小?我认为这是基于JVM(32位vs 64位)?
这个问题没有意义。Object
类的实例总是具有相同的大小,小心地没有在任何地方记录或指定,因此可以随JVM自由变化。其他类的实例同上。