这是理解JVM的第一篇文章,这篇文章主要介绍JVM的总体结构和每一个部分的功能。内容比较少,对于每一个部分详细的内容,放到后面的文章中,逐步展开。这个系列总结完,应该会对JVM有一个整体且深入的认识了。

JVM运行时数据区

这是网上的一个JVM结构的示意图,还是比较清晰明了的说明了JVM结构。
这篇文章主要介绍运行时数据区,关于类加载器的部分,放到下一篇文章讲解。
从这个图中,可以看出运行时数据区可以细分为5项,分别是:

  • 方法区
  • 虚拟机栈
  • 本地方法区
  • 程序计数器

一般写程序常见的区域是方法区,虚拟机栈,和堆。但这里,我们按照是否是全局共享的方式来对上述5个区域进行分类。为什么要这样分类,因为虽然这几个区域都是属于运行时数据区,但是这几个区域的创建时机是不一致的,有的是随虚拟机启动而创建的,随虚拟机销毁而销毁。有的是随线程创建而创建,随线程销毁和销毁。

线程独享的区域

程序计数器

程序计数器是来指示当前线程正在执行的JVM指令,因此程序计数器是线程独有的。一个JVM支持多个线程,每一个线程都要自己的程序计数器。
如果线程正在执行的方法是Java方法,则程序计数器保存的是当前线程正在执行的JVM指令,如果正在执行的方法是Native方法,则保存为空(undefined)。

虚拟机栈

虚拟机栈就是常说的栈内存,每一个线程在创建的时候,就会创建一个属于他的虚拟机栈。
虚拟机栈存储着栈帧,栈帧中存放的局部变量表,方法部分返回值等,关于栈帧其他内容,后续再说。

本地方法区

本地方法区存储着native方法的调用状态,一般会随着线程创建而针对每一个线程分配。

全局共享的区域

方法区

方法区是可供各个线程共享的内存区域,其主要存储着所加载的类的结构信息,如名称、修饰符等、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域。

运行时常量池

运行时常量池是方法区的一部分,存放着类中固定的常量信息、方法、和field的引用信息。JVM在加载类的时候会为每一个Class分配一个独立的常量池。

初学Java,听到的最多的一个内存区域,简单来说就是存储着所有类实例和数组对象。

理解JVM——JVM的结构的更多相关文章

  1. JVM的基本结构

    首先,当一个程序启动之前,它的class会被类装载器装入方法区,执行引擎读取方法区的字节码自适应解析,边解析就边运行(其中一种方式),然后pc寄存器指向了main函数所在位置,虚拟机开始为main函数 ...

  2. 了解java虚拟机---JVM的基本结构(1)

    1. JVM的基本结构 1.1. 类加载子系统 类加载子系统负责从文件或者网络中加载Class信息,加载的类信息存放于方法区的内存空间.方法区中可能还会存放运行时常量信息,包括字符串与数字常量.(这部 ...

  3. JVM的内存结构,JVM的回收机制

    内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...

  4. 概览JVM的基本结构和JVM内存结构

    概览JVM的基本结构和JVM的内存结构 这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫 ...

  5. JVM之内存结构详解

    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...

  6. 深入理解JVM—JVM内存模型

    我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...

  7. 巩固java(二)----JVM堆内存结构及垃圾回收机制

    前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构   ...

  8. JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)

    一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...

  9. 【转】深入理解JVM—JVM内存模型

    http://www.cnblogs.com/dingyingsi/p/3760447.html#3497199 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU ...

随机推荐

  1. 【拓扑 && 模板】Kosaraju算法

    #include<bits/stdc++.h> using namespace std; ; vector <int> g1[maxn],g2[maxn]; stack < ...

  2. python可视化基础

    常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装.入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节.其实学习一门新知 ...

  3. mybatis自动生成代码,逆向工程

    https://gitee.com/yangliuwin/mybatis_reverse_engineering.git

  4. wcf远程服务器返回错误404

    最近根据quartz.net 和wcf做资讯内容定时推送,wcf调用的时候出现远程服务器返回错误404,一直找不到原因是什么,客户端和服务器地址和配置都没啥问题,最后发现wcf请求数据,有传输大小限制 ...

  5. DW如何打开已经关闭的站点文件提示框

    DW在已经新建成功站点后,若将站点文件提示框关闭后,如何重新打开呢?即如下图所示的提示框: 点击站点下拉菜单中的‘在站点定位’即可打开关闭的提示框.

  6. 转:Jquery的parent和parents(找到某一特定的祖先元素)

    Jquery的parent和parents(找到某一特定的祖先元素) 关于Jquery的parent和parents parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.parents则 ...

  7. Java基础学习—思维导图

    找到两张Java学习的思维导图,特别适合我这样的菜鸟学习,贴过来和小伙伴分享.

  8. 微信小程序“满月”:尝鲜之后你还用过它吗?

    距离 2017 年 1 月 9 日微信小程序上线,整整过去了一个月时间.和互联网时代每天出现的众多新鲜事物相似,小程序甫一诞生,立即占据了各大科技媒体网站头屏并引起社交圈的兴奋讨论.由于背靠微信,纷纷 ...

  9. Vue项目中引用vue-resource步骤

    直接上步骤: 1.通过命令,进入到当前项目所在目录 2.输入以下命令npm install vue-resource --save 3.安装完毕后,在main.js中导入,如下: import Vue ...

  10. SqlSugarClientHelper

    using SqlSugar; using System; using System.Collections.Generic; using System.Configuration; using Sy ...