2016-04-23 44 views
1

在最近的一次采访中,面试官问我这个问题:多少内存一类得到,如果没有静态方法或块,没有对象

如果没有对象的类创建,也没有静态方法或类中的块,只是一些实例变量;那个班会得到记忆吗?如果不是,那么这个类会在RAM中获得任何空间吗?

根据我的理解,如果静态直接实例化块或方法,但如果没有静态块或方法,则不会分配内存。

而且,由于我们还没有创建任何对象,因此,没有类的实例将于

所以我说没有内存将被分配。

是我对不对?请确认

回答

1

将该类获取内存?

程序中存在的所有东西都使用内存。

如果不是,该类会在RAM中获得任何空间吗?

RAM ==内存,所以如果没有=>不。

没有内存将被分配。

没有内存将分配给字段。有些东西需要记录该类已加载。它将有一个默认的构造函数(或至少一个构造函数),并且必须去某处。

所以我说没有记忆将被分配,是我吗?

如果您证明了您的答案,那么您可以采取任何方式。 Java开发人员通常只计算堆内存,因此“否”可能没有问题。

顺便尝试使用加载空类的一行来运行程序。您会发现大约有10,000个对象将被创建以达到该点。你可以真的争论任何数量的记忆。

0

在典型的JVM中,类按需加载。

在您的描述中,一切听起来好像这个类没有被程序的任何部分访问:没有静态访问,没有对象创建。这意味着这个类实际上不会消耗堆内存,至少如果这个类存在于它自己的文件中的话。

虽然它生活在.jar文件中,但该文件通常映射到RAM中,但这并不是很昂贵。

+0

谢谢,所以如果写了int i = 20;在Ram中它会得到4个字节的内存? –

+0

这取决于。如果你自己找不到,请创建一个新问题。 –

相关问题