目录
1:栈,堆,方法区
虚拟机栈简称栈(Stack)特点如下:
1.栈描述的是一个方法被执行的内存模型,每调用一个方法,就会创建一个栈(存放局部变量,操作数,方法出口(返回值))
2.JVM对栈帧只有两种操作,压栈和出栈
3.栈的存储方式是 先进后出,后进先出,每个方法被执行完后会立刻出栈
4.栈是一个连续的存储空间,由系统自动分配,速度快
堆(Heap):几乎所有Java创建的对象都被分配在堆上,它被所有线程共享,在堆上的区域会被垃圾回收器进一步划分,例如新生代,老年代的划分。特点如下:
1:所有创建好的对象个数组在堆上分配空间
2:JVM只有一个堆,被所有线程所共享
3:堆是一个不连续的空间,分配灵活,速度慢
方法区:
运行时常量池
详细看下面链接,我也看不太懂,以后我在来看

运行时常量池(Run-Time Constant Pool)(方法区中) 这是方法区的一部分。常量池主要存放两大类常量:
1. 字面量(Literal),如文本字符串、final 常量值。
2. 符号引用,存放了与编译相关的一些常量,因为 Java 不像 C++那样有连接的过程, 因此字段方法这些符号引用在运行期就需要进行转换,以便得到真正的内存入口地址。
(84条消息) 详解JVM常量池、Class常量池、运行时常量池、字符串常量池(心血总结)_记录博主学到的点滴-CSDN博客
1:JVM只有一个方法区,被所有线程所共享
2:方法区也是堆,用来存储类,常量相关的信息
3:用来存放程序中永远不变或者唯一的内容。(类信息,静态变量,字符串常量等)
2:内存变化图
public class Person {
int id;
String name;
void getIn(){
System.out.println("id:"+id+",name:"+name);
}
public Person(){
}
public static void main(String[] args){
//创建p1对象
Person p1=new Person();
p1.id=1101;
p1.name="张三";
p1.getIn();
//创建p2对象
Person p2=new Person();
p2.id=1102;
p2.name="李四";
p2.getIn();
}
}

版权声明:本文为m0_58783923原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。