您的位置:首页 > 编程语言 > Java开发

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通信。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: