Java内存机制
来源:互联网 发布:js统计按钮点击次数 编辑:程序博客网 时间:2024/05/16 15:07
笔记:Java内存管理 Java内存机制
所有的程序在运行的时候才进行内存的实际分配,在编译期间只是进行内存分配的规划。
1、程序计数器:当前进程所执行的字节码的行号指示器
2、Java栈/Java虚拟栈:Java中方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧。
3、本地方法栈
4、Java堆:存放对象实例和数组。存放类的引用数据类型,成员方法不会存放在该区域。
5、方法区(又叫静态区):用于存储已被虚拟机加载的信息(包括类的名称、方法信息、字段信息)、常量、静态变量、以及编译器编译后的代码等数据。
运行时常量池(Runtime Constant Pool)是方法区的一部分,用于存储编译期就生成的字面常量、符号引用、翻译出来的直接引用(符号引用就是编码是用字符串表示某个变量、接口的位置,直接引用就是根据符号引用翻译出来的地址,将在类链接阶段完成翻译);运行时常量池除了存储编译期常量外,也可以存储在运行时间产生的常量(比如String类的intern()方法,作用是String维护了一个常量池,如果调用的字符“abc”已经在常量池中,则返回池中的字符串地址,否则,新建一个常量加入池中,并返回地址)。
6、直接内存:JVM以外的机器内存。
7、(1)局部变量的基本数据类型和引用存储于栈中,引用的对象实体存储与堆中。
(2)成员变量全部存储于堆中(包括基本类型,引用和引用的对象实体)
public class Sample { int s1 = 0; Sample mSample1 = new Sample(); public void method() { int s2 = 1; Sample mSample2 = new Sample(); } } Sample mSample3 = new Sample();
Sample 类的局部变量 s2 和引用变量 mSample2 都是存在于栈中,但 mSample2 指向的对象是存在于堆上的。
mSample3 指向的对象实体存放在堆上,包括这个对象的所有成员变量 s1 和 mSample1,而它自己存在于栈中。
8、java内存可以分为四个区:
(1)堆区
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
(2)栈区
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
(3)方法区(静态区)
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
(4)代码区:存放代码
0 0
- 初探java内存机制
- Java内存机制详解
- java内存机制
- java内存回收机制
- Java内存机制详解
- Java内存机制详解
- Java 内存回收机制
- java内存回收机制
- java内存分配机制
- java内存分配机制
- java内存分配机制
- java内存分配机制
- Java内存机制详解
- Java内存回收机制
- java内存机制
- JAVA内存释放机制
- 浅谈java内存机制
- java内存机制
- Handler的使用
- mysql5.7.15的安装
- <a>和<p>标签的各自的包裹问题
- 记录两个用pika和kombu实现的rabbitmq队列操作
- mysql数据类型
- Java内存机制
- redis学习笔记2--单机数据库的实现
- jsondingding
- 【阿里云】MNS消息队列常见问题及解决方法
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- 【CF 125D】 Two progressions 划分等差数列
- RESTFUL和http理解
- Android实现一个活动中弹出对话框(如js的alert)
- springhadoop mapreduce wordcount