Java虚拟机笔记
2014-03-09 20:29
281 查看
java虚拟机运行时数据区:
1.程序计数器
当前线程所执行的字节码的行号指示器,每个线程有独立的程序计数器,各线程之间计数器互不影响,独立存储。
如果线程正在执行java方法,此区域存的是正在执行的虚拟机字节码指令地址;
如果正在执行native方法,则计数器为空。
2.java虚拟机栈
每个方法在执行的同时都会创建一个栈帧,存的是局部变量表,存放了编译期可知的各种基本数据类型。
异常有2种,一种是请求的栈深度大于虚拟机所允许的深度,抛出stackoverflow异常;
一种是虚拟机可动态扩展,但仍无法申请到足够的内存,则抛出outofmemoryerror异常。
3.本地方法栈
为native方法服务的,功能与虚拟机栈相似。
4.java堆
所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例。
所有的对象实例和数组都要在堆上分配。是垃圾回收的主要区域。
5.方法区
用于存储已被虚拟机夹在的类信息、常亮、静态变量、即时编译器编译后的代码。
6.运行时常量池
是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,在类加载后进入方法区的运行时常量池中存放。
7.直接内存
在这块区域上,用directbytebuffer对象作为这块内存的引用,用于I/O通信。
1.程序计数器
当前线程所执行的字节码的行号指示器,每个线程有独立的程序计数器,各线程之间计数器互不影响,独立存储。
如果线程正在执行java方法,此区域存的是正在执行的虚拟机字节码指令地址;
如果正在执行native方法,则计数器为空。
2.java虚拟机栈
每个方法在执行的同时都会创建一个栈帧,存的是局部变量表,存放了编译期可知的各种基本数据类型。
异常有2种,一种是请求的栈深度大于虚拟机所允许的深度,抛出stackoverflow异常;
一种是虚拟机可动态扩展,但仍无法申请到足够的内存,则抛出outofmemoryerror异常。
3.本地方法栈
为native方法服务的,功能与虚拟机栈相似。
4.java堆
所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例。
所有的对象实例和数组都要在堆上分配。是垃圾回收的主要区域。
5.方法区
用于存储已被虚拟机夹在的类信息、常亮、静态变量、即时编译器编译后的代码。
6.运行时常量池
是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,在类加载后进入方法区的运行时常量池中存放。
7.直接内存
在这块区域上,用directbytebuffer对象作为这块内存的引用,用于I/O通信。
相关文章推荐
- MyEclipse项目下包层次结构问题
- Observer与Observable
- eclipse实用配置
- eclipse常用快捷键
- Java界面SWT基本组件——Button
- day44 spring+jdbc(事务)==>spring+hibernate(事务)
- Eclipse: symbol '???' could not be resolved [duplicate]
- 将不同数据类型转为json格式写的java类
- [Java]读取文件方法大全
- spring在javaWeb环境中加载 bean 配置文件方式的选择
- java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
- Eclipse 3.2 + MyEclipse 5.0GA + WebLogic 9.2
- java实现四则运算
- java错误提示:Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.gener
- MR-eclipse本地开发环境搭建&Hadoop学习总结
- 我对java反射机制的理解
- java反射详解
- JDK安装配置教程
- ubuntu下eclipse安装反编译插件
- [ACM_水题] ZOJ 3714 [Java Beans 环中连续m个数最大值]