java中静态对象存储的地方

问题描述 投票:0回答:4

我正在读一本书“Thinking in Java”,书中写道 对象存储在堆上,静态变量存储在某个固定位置,称为静态存储,这样它们在程序运行时可供整个时间程序使用。

class Myclass{

static int x =0;        //stored on static storage
Myclass obj = new Myclass(); //stored on heap

}

虽然创建一个对象,但就 OOP 而言,

static
并不是一个好主意。暂时搁置这个问题,我的问题来了:

  1. 声明为静态的对象存储在哪里。
  2. 这种情况下JVM是如何进行实例化的。
    class Myclass { static Myclass obj = new Myclass();    //no man's land }
java object oop static
4个回答
3
投票

所有静态内容将在类加载/启动上创建并存储在特殊位置(很可能是永久代的一部分,根据实现而有所不同)。

对于第二个示例,当加载您的

Myclass
时,将创建/实例化它的静态内容。

这个教程可以为您提供高层次的概述。


1
投票

静态是程序的特殊内存位置。所以程序可以轻松访问它。只有一个这样的位置可供程序运行。这是创建静态内容的地方。 JVM 在堆上实例化对象。但是,如果您对该对象进行静态引用,那么它将放置在静态内存位置。


0
投票

静态变量存储在方法区域。
方法区是非堆内存的一部分。它存储每个类的结构、方法和构造函数的代码。每个类的结构意味着运行时常量和静态字段
heap memory, non-heap memory and method area are the main jargon when it comes to memory and JVM.


0
投票

这取决于 JVM 的实现。在您的示例中,变量被初始化为原始值,因此它将存储在元空间(本机内存,堆外)中。如果您使用

new ObjectClassSmthng()
初始化它,该对象将存储在堆上,而
x
变量(这是一个引用)将存储在元空间中。

HotSpot JDK 8 也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.