Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量声明时的Java内存使用情况?_Java_Variables_Memory Management_Global Variables - Fatal编程技术网

变量声明时的Java内存使用情况?

变量声明时的Java内存使用情况?,java,variables,memory-management,global-variables,Java,Variables,Memory Management,Global Variables,关于内存效率,我有以下问题: 必须为相应的变量使用正确的数据类型。将1的数值表示为字节需要八分之一的长内存(如果我错了,请更正)。但我的问题是,在定义变量类型或初始化时是否进行了内存分配/扣除?这可能看起来很奇怪,但我问的是关于不需要初始化的全局变量,因为它们的默认值与局部变量相同。我还想知道对象数据类型是否有默认大小?我想这是基于JVM的(32位vs 64位) 必须为相应的变量使用正确的数据类型 当然。Java是一种强类型语言。你的观点是什么 将数值1表示为一个字节需要八分之一的长内存(但如果

关于内存效率,我有以下问题:

必须为相应的变量使用正确的数据类型。将
1
的数值表示为
字节
需要八分之一的长内存(如果我错了,请更正)。但我的问题是,在定义变量类型或初始化时是否进行了内存分配/扣除?这可能看起来很奇怪,但我问的是关于不需要初始化的全局变量,因为它们的默认值与局部变量相同。我还想知道对象数据类型是否有默认大小?我想这是基于JVM的(32位vs 64位)

必须为相应的变量使用正确的数据类型

当然。Java是一种强类型语言。你的观点是什么

将数值1表示为一个字节需要八分之一的长内存(但如果我错了,请纠正我)

你错了。根据相邻声明的其他变量和类型,它可能需要4个甚至8个字节,这取决于JVM使用的填充

但我的问题是,在定义变量类型或初始化时是否进行了内存分配/扣除

都不是。它发生在分配时间,即
new
时间,而不是在构造函数期间

这可能看起来很奇怪,但我问的是全局变量,它们不需要初始化,因为它们有默认值

所有变量都需要初始化。对于静态变量或实例变量,您不必编写初始化器代码。“global”一词在Java中没有任何意义

与局部变量相反

这和它是什么没什么区别。变量仍然必须有分配给它的空间和存储在其中的值,无论是静态的、实例的还是本地方法的

我还想知道对象数据类型是否有默认大小?我想这是基于JVM的(32位vs 64位)


这个问题毫无意义。类
Object
的实例总是具有相同的大小,不会在任何地方仔细记录或指定,因此可以随JVM的不同而自由变化。其他类的实例同上。在我所能看到的任何有用的意义上都没有“默认值”。

我知道Java是强类型的,我特别指的是原语的上下文,这些原语被记录为在内存中有差异,因此“选择”正确的数据类型是至关重要的否?我的cprimitive类变量似乎不需要初始化!你能解释一下原因吗?你能澄清一下具体的分配时间吗?文字没有“新”的依据,所以什么时候会扣除有关文字的内存?无论如何,正确选择数据类型是至关重要的。我不明白你的意思。所有静态变量和成员变量都将初始化为您的值或默认值。基元类型默认为零或false。类的内存是在加载类时分配的:对于实例,当您“新建”实例时。包括原始成员。如果您的代码运行异常,您应该将其编辑到您的代码中。@EJP因此,内存是在实际调用
new
关键字时分配的,而不是在声明关键字时分配的。但是,当一个对象变量被声明时,即
objectr,在后台会发生什么?@Abdul它影响编译时分配对象所需的大小。它不会导致在运行时执行特定的代码,除非在分配对象时内存的另一个字或其他字为零。