java内存分配
更多详情,请看这个大佬的文章: https://blog.****.net/dingguanyi/article/details/80759436.
1.内存标示图
java程序运行时,数据会分区存放在JavaStack(Java栈)、 heap(堆)、method(方法区)。
java程序运行时内存可分为方法区,栈内存,堆内存,本地方法栈。
Java运行时数据区域的结构:
内存表示图:
1.1介绍
- 寄存器
寄存器是cpu内部集成的,访问内存时要在cpu的寄存器上填上地址,然后执行相应的指令
- 方法区(存在于堆中)
又叫静态区, 存放程序代码。存放所有的class和静态变量,方法区存放的是整个程序中唯一的元素,如class和static变量
- 常量池(存在于方法区中)
jvm为每个加载的类型维护一个一个常量池,常量池是这个类型用到的常量的集合。包括直接常量(基本类型、String)和对其他类型、方法、字段的符号引用。池中的数据和数组一样通过索引访问。
- 堆内存
存放的是new出来的对象或者数组,在堆中分配的内存,由JVM自动垃圾回收器来管理。
- 栈内存
用来保存局部变量的值(定义在方法声明上和方法中的变量)
1)基本数据类型的值
2)保存类的实例,即堆区对象的引用(指针)
3)保存加载方法时的帧
- 本地方法栈
java通过java本地接口JNI(Java Native Interface)来调用其他语言编写的程序,在Java里面用native修饰符来描述一个方法是本地方法。