方法区:保存的是.class数据(1 成员变量 2 成员方法 )程序就要启动在运行main之前,方法区要最先有数据。 栈: 谁有main方法的类从谁开始。main方法想要运行就要进栈,进入栈空间的动作叫进栈,也叫压栈。 堆: 进栈之后干什么事,首先new 了一个对象Phone() 存在堆里,我怎么知道存了什么内容呢,参考着方法区的...
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈...
方法在返回时,可能需要栈帧中保存一些信息,用来恢复上层方法的执行状态,如恢复上层方法的局部变量表、操作数栈,如果有返回值则将其压入操作数栈中 3 JAVA堆 所以线程共享的内存区 几乎所有的对象、数组都在这类分配内存,是垃圾收集管理的主要区域,俗称"GC堆" 堆中没有内存可分配,并且堆也无法扩展时,将会抛出Out...
Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。我们来看一张图: 每个线程拥有一个自己的私有工作内存,需要变量时从主内存中拷贝一份到工作内存,如果更新过变量之后再将共享变量刷新到主内存。 但是两个线程...
void play(){ System.out.println("我在玩耍"); } public static void main(String[] args) { Student stu =new Student(); stu.name ="我们"; stu.age =18; Computer computer =new Computer(); computer.brand ="联想"; stu.computer = computer; ...
每个线程包含一个栈区,每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 2:堆 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,在栈中...
因此,在Java中可以使用synchronized来保证方法和代码块内的操作是原子性的。 可见性 Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值的这种依赖主内存作为传递媒介的方式来实现的。 Java中的volatile关键字提供了一个功能,那就是被其修饰的变量在被修改后可以立即同步到主内存,被其...
如我们常用的一些关键字:synchronized、volatile以及并发包等。 回答到这里就可以了,然后面试官可能会继续追问,然后根据他的追问再继续往下回答即可。 所以,当有人再问你Java内存模型的时候,不要一张嘴就直接回答堆栈、方法区甚至GC了,那样显得很不专业!
Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈...