jvm学习笔记一(java内存区域)
来源:互联网 发布:mysql order by limit 编辑:程序博客网 时间:2024/05/29 13:39
一.运行时数据区域
1.程序计数器
线程私有的一块区域,用来指引虚拟机下条应该执行的指令。
这块区域是虚拟机规范中唯一一块没有规定任何OutOfMemoryError区域。
2.java虚拟机栈
也就是我们常说的栈,线程私有的。
虚拟机栈描述的是java方法执行的内存模型。
虚拟机栈的局部变量表储存着编译期间所知道的所有数据类型(int,reference 类型).
虚拟机栈存在两种异常,stackOverFlowError和OutOfMemoryError
本地方法栈痛java虚拟机栈作用一样,但是他是用来执行本地方法的。
3.java堆
java堆(java heap)是java虚拟机所管理的内存中最大的一块。gc回收的主要区域。所有线程共享的区域。
几乎所有的对象实例都是存放在该区域。
由于现代的收集器采用的都是分代回收,因此该区域也可以分为新生代(Eden,from survivor,to survivor,比例8:1:1),老年代。
4.方法区
方法区也是线程共享的,用来存储已被加载的类的信息,常量,静态变量,即时编译器编译的代码等。
java虚拟机规范把该区域归为java堆得逻辑区域,java虚拟机对这个区域的限制很宽松,Hotspot虚拟机也把这个区域叫做永久代。
垃圾收集行为在这个区域很少出现。
二.java对象创建
1.对象创建过程
java虚拟机遇到new执行——>检查常量池中是否加载了该类——>没有的话直接编译报错,加载了的话分配内存(分配内存方法:指针碰撞,空闲列表)
——>初始化对象——>java程序使用
2.对象内存布局
java对象包含对象头,实例数据,对齐填充三部分
3.对象的访问定位
两种方法:句柄和直接指针
句柄访问的方法时,引用是句柄的地址,堆中分出一个句柄池,句柄包含两部分信息,对象实例数据(java堆)和类型数据(方法区)
直接指针方法时,引用是对象的内存地址。
- JVM学习笔记一:Java内存区域
- JVM学习笔记(一)java内存区域
- JVM学习笔记(一)——JAVA内存区域
- jvm学习笔记一(java内存区域)
- jvm学习笔记(一)—Java虚拟机内存区域
- JVM 笔记(一):Java内存区域
- JVM学习一:学习java内存区域
- JVM笔记(一) Java内存区域
- JVM(一)Java内存区域
- JVM(一):java内存区域
- JVM学习(1)--Java内存区域
- JVM内存区域(一)
- JVM 学习笔记1 JAVA内存区域与溢出异常
- 深入理解JVM学习笔记——Java内存区域
- 《深入理解java虚拟机》学习笔记(1)--jvm内存区域
- java虚拟机(一):jvm内存区域与内存溢出
- JVM学习笔记(1)--java内存区域与内存溢出异常
- JVM学习笔记(1)——Java内存区域与内存溢出异常
- Android-Universal-Image-loader源码解析
- android中的intent
- MongoDB:逐渐变得无关紧要
- C#和Java时间字符串的毫秒字符不同
- UIbutton 防止重复点击
- jvm学习笔记一(java内存区域)
- 学习新东西的唯一方法
- struct 和typedef struct
- BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
- oracle优化:避免全表扫描
- 我爱学Java之枚举
- putty
- Jquery(JS)中.height()和.innerHeight(),outerHeight()的差别
- 14.UITextField内容缩进/placeholder改变颜色