Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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_Java 8_Heap Memory - Fatal编程技术网

在哪里用java创建对象

在哪里用java创建对象,java,java-8,heap-memory,Java,Java 8,Heap Memory,下面是我的一个朋友在一次讨论中提出的一个问题,但我们都不知道实际答案是什么 public class Test { static int i = 5; static String str = "Welcome"; static Map<String, String> map = new HashMap<>(); } 我们知道内存区域保存与类相关的所有数据(包括静态引用),而堆区域保存类的所有实例变量 但是对于上面的班级 - int variable is created

下面是我的一个朋友在一次讨论中提出的一个问题,但我们都不知道实际答案是什么

public class Test {
static int i = 5;
static String str = "Welcome";
static Map<String, String> map = new HashMap<>();
}
我们知道
内存区域
保存与类相关的所有数据(包括静态引用),而
堆区域
保存类的所有实例变量

但是对于上面的班级

- int variable is created(We assume that it will be created in method area
- Not sure about the other two object(String and HashMap)

如果我们误解了什么,请纠正我们,并帮助我们理解这些变量将如何存储在java中。对于Oracle JVM,每个类都有一个特殊的对象来保存其静态字段。如果执行堆转储,可以看到这个特殊对象


注意:没有关于静态成员存储位置的规范,因此它可以是基于JVM的任何位置。

所有对象都是在堆上创建的,如您所述。错误1:静态字段在加载类时初始化。
- int variable is created(We assume that it will be created in method area
- Not sure about the other two object(String and HashMap)