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