java-基础-虚拟机jvm
2016-09-06 08:00
489 查看
虚拟机结构:
2.Program Counter
Register
程序计算器
类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined
3.Java Stack
Ø虚拟机栈
虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个栈帧(Stack Frame)用于存储方法的本地变量表、操作栈、方法出口等信息,当这个方法执行完后,就会弹出相应的栈帧。
如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常。
4.method Frame
Ø方法帧
栈帧分为三部分:局部变量区(Local Variables)、操作数栈(Operand Stack)和帧数据区(FrameData)。
5.Native Method Stack
本地方法栈
与虚拟机栈类似,只是是执行本地方法时使用的
6.Method Area
Ø方法区
用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码等信息。
方法区是线程间共享的,当两个线程同时需要加载一个类型时,只有一个类会请求ClassLoader加载,另一个线程会等待。
7.[b]Heap[/b]
堆
虚拟机中用于存放对象与数组实例的地方,垃圾回收的主要区域就是这里(还可能有方法区)。
如果垃圾收集算法采用按代收集(目前大都是这样),这部分还可以细分为新生代和老年代。
新生代又可能分为Eden区,From Survivor区和To
Survivor区,主要是为了垃圾回收。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)
Java堆只要求逻辑上是连续的,在物理空间上可以不连续。
8.直接内存
ØJDK1.4中引用了NIO,并引用了Channel与Buffer,可以使用Native函数库直接分配堆外内存,并通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
9.简述JVM
JVM:
-----------------
1.JVM: java virtual machine.
2.class file
*.class
3.ClassLoader
4.runtime data area
运行时数据区。
1.Method area : 方法区.(shared)
供所有线程共享.
2.heap(shared):
供所有线程共享.
3.java stack(栈区)
独占的。
4.native method stack(本地方法栈)
独占
5.Program counter register
程序计数器.
5.execute engine
执行引擎。
6.native interface
本地接口
7.native libraries
本地类库
2.Program Counter
Register
程序计算器
类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当前执行位置,所以每个线程都有自己的程序计算器。这一个区域不会有OutOfMemeryError。当执行Java方法时,这里存储的执行的指令的地址,如果执行的是本地方法,这里的值是Undefined
3.Java Stack
Ø虚拟机栈
虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个栈帧(Stack Frame)用于存储方法的本地变量表、操作栈、方法出口等信息,当这个方法执行完后,就会弹出相应的栈帧。
如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常。
4.method Frame
Ø方法帧
栈帧分为三部分:局部变量区(Local Variables)、操作数栈(Operand Stack)和帧数据区(FrameData)。
5.Native Method Stack
本地方法栈
与虚拟机栈类似,只是是执行本地方法时使用的
6.Method Area
Ø方法区
用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码等信息。
方法区是线程间共享的,当两个线程同时需要加载一个类型时,只有一个类会请求ClassLoader加载,另一个线程会等待。
7.[b]Heap[/b]
堆
虚拟机中用于存放对象与数组实例的地方,垃圾回收的主要区域就是这里(还可能有方法区)。
如果垃圾收集算法采用按代收集(目前大都是这样),这部分还可以细分为新生代和老年代。
新生代又可能分为Eden区,From Survivor区和To
Survivor区,主要是为了垃圾回收。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)
Java堆只要求逻辑上是连续的,在物理空间上可以不连续。
8.直接内存
ØJDK1.4中引用了NIO,并引用了Channel与Buffer,可以使用Native函数库直接分配堆外内存,并通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
9.简述JVM
JVM:
-----------------
1.JVM: java virtual machine.
2.class file
*.class
3.ClassLoader
4.runtime data area
运行时数据区。
1.Method area : 方法区.(shared)
供所有线程共享.
2.heap(shared):
供所有线程共享.
3.java stack(栈区)
独占的。
4.native method stack(本地方法栈)
独占
5.Program counter register
程序计数器.
5.execute engine
执行引擎。
6.native interface
本地接口
7.native libraries
本地类库
相关文章推荐
- 从零开始学 Java - Spring AOP 拦截器的基本实现
- JAVA基础总结—02
- JAVA基础总结-基本语法
- 深入理解java虚拟机 第2章(三):OutOfMemoryError异常
- 深入理解java虚拟机 第2章(二):对象创建,内存布局,访问
- ND4J Fast, Numerical Computing for Java
- 游戏与代码设计(Java)目录
- Java的异常总结
- struts2与spring整合后Action的配置方式
- 源码分析 There is no getter for property named '*' in 'class java.lang.String
- Java基础知识点
- Java基础知识点
- 设计模式六大原则
- JavaWeb上传图片
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- MyEclipse配置代码格式化模版
- 你所不知道的单例模式和多线程并发在单例模式中的影响
- freemarker spring mvc 配置
- Myeclipse2016中文乱码问题
- 深入理解java虚拟机 第2章(一):Java内存区域