Java虚拟机运行一个程序时,程序相关的所有数据,都存放在运行时数据区中。运行时数据区包括:
方法区,堆,Java栈,PC寄存器,本地方法栈。
1.
方法区:在Java虚拟机中,被装载类型的信息存储在一个逻辑上被称为方法区的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件,一个线性二进制数据流,然后将它传输到虚拟机中,紧接着虚拟机提取其中的类型信息,并将这些信息存储到方法区。此类型的静态变量同样也是存储在方法区中。(Class对象是在堆上分配内存空间)。
方法区存储的类信息包括:
(1).这个类型的全限定名
(2).这个类型的直接超类的全限定名
(3).这个类型是类类型还是接口类型
(4).这个类型的访问修饰符(public, protected, private,final, abstract,默认)
(5).任何直接超接口的全限定名的有序列表.
(6).此类型的常量池
(7).字段信息:字段名,字段类型,字段修饰符.
(8).方法信息:方法名,方法的返回值,方法参数数量,类型和顺序,方法的修饰符。
(9).除了常量以外的所有静态变量
(10).一个到类的ClassLoader的引用:每个类型被装载的时候,虚拟机必须跟踪它是由启动类装载器还是由用户自定义的类装载器装载的。如果不是由启动类装载器进行装载的必须保存ClassLoader的引用。为的是请求同一个类装载器来装载被当前类所引用到的类。
(11).一个到Class类的引用:每一个类都对应着一个Class对象。
Class.forName("")装载指定的类,并返回一个Class对象.
obj.getClass();
类名.class;
(ClassLoader实例和Class类的对像都是在堆上面的)
Class类使得运行程序可以访问方法区中保存的有关装载的类的信息,是外部Java程序与虚拟机内部状态间的访问接口
2.
堆:Java程序在运行时创建的所有类实例和数组都放在同一个堆中。一个Java虚拟机实例中只存在一个堆空间,所有线程共享这个堆。每个Java程序独占一个Java虚拟机实例,因此每个Java程序都有自己的堆空间。
3.
Java栈:Java栈则总是存储此线程中Java方法调用的状态--包括它的局部变量,传入的参数,返回值,和一些中间结果等等。
4.
PC寄存器:PC寄存器的大小是一个字长,因此它能够持有一个本地指针,内容总是下一条将被执行指令的"地址"。
5.
本地方法栈:而本地方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其它某些与特写实现相关的内存区中。
一个新线程被创建时,它将会得到自己的PC寄存器(程序计数器)以及一个Java栈,线程的PC寄存器和Java栈是私有的,任何其它的线程都不能访问。
每个Java虚拟机实例都有一个方法区和一个堆,它们是由此虚拟机实例中所有线程共享的。
- 大小: 29.9 KB
分享到:
相关推荐
第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行...
深入JVM截取的一些自己认为需要了解,外加一些博客链接,还有转载的一些。不是本人所写,因为是自己看的,想着方便下大家,有些忘记转载的那篇啦,没有写转载作者,先抱歉下,不行我删除
包含了jvm的视频,jvm的笔记
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
jvm中篇笔记.md
深入JVM内核—原理、诊断与优化视频教程 深入JVM内核—原理、诊断与优化视频教程
JVM运行机制深入分析,适用于研究java开发的人员,想深入理解jvm
深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm
JVM学习笔记.docx
java之jvm学习笔记五(实践写自己的类装载器)
深入JVM内核—原理、诊断与优化视频教程 深入JVM内核—原理、诊断与优化视频教程
深入jvm 内核-原理,诊断于优化视频教程.算是比较基础的
jVM学习笔记.ppt
java之jvm学习笔记十一(访问控制器)-源码
包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码 第1讲 说在前面的话 免费 00:05:07 第2讲 整个部分要讲的内容说明 免费 00:06:58 第3讲...
JVM笔记= zip
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候创建,在线程退出的时候销毁。
深入JVM内核—原理、诊断与优化视频教程———目前,Java是更为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运.
每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...