Java面向对象详解(3)堆,栈,方法区和内存变化图

目录

1:栈,堆,方法区

2:内存变化图


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版权协议,转载请附上原文出处链接和本声明。