Jvm从零开始(二)

2017-12-23  本文已影响0人  颜之有雾

Jvm的内存结构。
废话不多说,先上一张图


1135193-20170404105818910-121962267.jpg

jvm的主要组成部分:

咱们分别来说说其作用:

程序计数器(Method Area)

顾名思义,就是计数用的,这个“数”指的就是程序下一个要执行的指令的位置(内存地址)。值得一提的是它是线程私有的,就是说在多线程环境下,每个线程都有自己的计数器,互相不会干扰。如果正在执行的是Native方法,那它的值为空。

虚拟机栈(VM Stack)

虚拟机栈和计数器一样,也是线程私有的。用来存储方法数据和部分运算结果,每当程序调用一个方法,就会触发入栈,这个方法返回时触发出栈,进出方式为“后入先出”。

本地方法栈(Native Method Stack)

和上面虚拟栈的功能一模一样,区别就是虚拟栈为java方法服务,这个为Native方法服务。

方法区(Method Area)

类(class)的信息都会储存在这里。当类加载器从类文件中提取信息之后,就会将其存到这里。咱们下一节聊聊类的加载机制。
和上面几个不同的是,方法区是线程共享的(显而易见)。

堆(Heap)

堆同样是线程共享的区域,所有java实例或对象都会存储在这里。也是GC(垃圾收集机制,方法区中也存在垃圾收集)大显身手的地方。

简单的介绍就到这,下节开始咱们进入正题。

上一篇 下一篇

猜你喜欢

热点阅读