Java 进阶(一) JVM运行时内存模型
2014-08-21 21:27
344 查看
1.JVM运行时数据区域的划分
a.程序计数器(Program Counter Register)
一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。每个线程拥有独立的一个计数器,如果当前执行的是Native方法,则计数器值为空。b.JVM栈(Java Virtual Machine Stack)
描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stacks Frame)用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应一个栈帧在JVM栈中入栈到出栈的过程。
c.本地方法栈(Native Method Stack)
与JVM栈发挥的作用非常相似,区别不过是JVM栈为JVM执行Java方法服务,而本地方法栈为JVM使用到的Native方法服务。d.Java堆(Java Heap)
Java堆是被所有线程共享的一块内存区域,在JVM启动时创建。所有的对象实例以及数组都要在这里分配内存,但是随着JIT编译器的发展,渐渐变得不是那么绝对了。e.方法区(Method Area)
存储已被JVM加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。虽然JVM规范把方法区描述为堆的一个逻辑部分,但它却有一个别名叫做Non-Heap。
f.运行时常量池(Runtime Constant Pool)
方法区的一部分。Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项是常量池,用于存放编译器生成的各种字面量和符号引用。g.直接内存(Direct Memory)
不是JVM运行时数据区的一部分,也不是JVM规范中定义的内存区域。例如:JDK1.4中新引入的NIO(New Input/Output)类,一种基于通道与缓冲区的I/O方式,可以使用Native函数库直接操作堆外内存,然后通过存储在Java堆中的DirectByteBuffer对象作为这块内存的引用,避免了在Java堆和Native堆中来回复制数据。
相关文章推荐
- Java多线程笔记一(创建运行,相关概念,JVM内存模型,线程有几种状态,死锁)
- 如何配置来增加eclipse下运行java程序的jvm使用内存
- java JVM的体系结构 内存模型
- Java(JVM)内存模型和垃圾回收监控与调整
- jvm-java 内存模型 以及各个分区具体内容
- JVM 内存基础概念之初识虚拟机与 Java 虚拟机运行时数据区
- Java运行时的内存模型
- 认识JVM--第二篇-java对象内存模型
- 【jvm】JAVA运行时数据区与内存分配
- [java]深入理解JVM内存模型
- 【JAVA基础】关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- java JVM的内存区域(运行时数据区域)
- 聊聊高并发(四)Java对象的表示模型和运行时内存表示
- [JAVA修炼之路四]-JVM内存模型以及对象实例化过程
- 深入理解JVM—JVM内存模型(很经典) (部分摘自 深入JAVA虚拟机 周志明著)
- java 图解JVM内存模型
- JVM 内存分配模型概念和java中各种对象的存储
- Java深入---JVM 内存模型
- Simple Java—Compiler and JVM(一)Java对象运行时的内存结构
- Java(JVM运行时)各种内存区域详解及扩展