1 JVM的内存模型

1.1 堆空间

每个jvm都有一个堆,所有的对象都放在这里。

1.2 java栈空间

每个线程都有一个java栈,所有的java栈都放在这里。

1.3 本地方法栈

每个线程都有一个本地方法栈。

1.4 pc寄存器

每个线程都有一个pc寄存器。

1.5 方法存储区

每个jvm只有一个方法存储区,方法名、类的全路径名等。

1.6 类的静态变量是存放在堆空间中的

类的静态变量是存放在该类的class对象中,而class对象是存放在堆中的。

1.7 字符串常量池

jvm单独维护了一个常量池,用来存放所有的字符串常量,它本质上是一个hash table,大小固定。

jdk6的时候,该字符串常量池是存放在方法区中的,jdk7的时候,该字符串常量池存放在堆中。

如果一个java程序字符串太多,会导致hash table中的冲突过多,导致访问变慢,影响性能。

2 JVM的类加载器

2.1 JVM类加载器的构成

JVM有三个类加载器:

引导类加载器,负载加载核心类,即在JAVA_HOME/jre/lib下的类。

扩展类加载器,负责加载扩展类,即在JAVA_HOME/jre/lib/ext下的类。

应用类加载器,负责加载应用程序自身的类。

2.2 JVM类加载器的工作过程

jvm的类加载器是分等级的,引导类加载器的等级最高,地位最高,扩展类加载器次之,应用类加载器最低。

加载一个类的时候,地位低的加载器先请求地位高的加载器先加载,只有地位高的不能加载时,才由地位低的类加载器加载。

这样就保证了核心类的地位。

2.3 JVM类加载器工作的结果

第一步,加载

加载.class文件,生成二进制数据,并且保存在方法存储区。

第二步,链接

链接的时候要做的有三件事情,核实类的正确性、为类的变量分配存储空间并且赋值为默认值、符号解析。所谓的符号解析就是通过搜索方法存储区,将symbol换成引用。这样就完成了多个.class文件之间的链接。

第三步,初始化

对方法区中的类的静态变量赋值。

3 JVM的执行引擎

3.1 每个线程都是JVM执行引擎的一个实例

这样的话,各个线程之间都是独立的,互不影响。最直观的对JVM执行引擎的理解:芯片中如果直接支持bytecode的话,执行引擎就是线程本身了。

3.2 引擎工作的过程

3.2.1 解释器

bytecode由opcode和oprand构成,它根据bytecode指令取oprand,然后根据opcode执行相应的操作,具体执行的时候肯定是翻译成本地的二进制指令来执行的。

3.2.2 just in time compiler

将经常调用的方法事先编译成本地的二进制指令,下次再碰到直接调用即可。

3.2.3 芯片级别支持bytecode

直接执行bytecode,bytecode指令就是本地指令。

4 类加载器和执行引擎的关系

类加载器已经生成了java应用程序的所有的bytecode,执行引擎就按照bytecode的顺序解释执行即可。

JVM架构的更多相关文章

  1. JVM 架构解读

    每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...

  2. 【转】JVM 架构解读

    每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...

  3. [转]一图读懂JVM架构解析

    每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行.但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它.作为开发人员,了解JVM的架构是非常重 ...

  4. JVM架构和GC垃圾回收机制

    深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...

  5. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  6. JVM架构和GC垃圾回收机制详解

    JVM架构图分析 下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看:Hadoop内存溢出(OOM)分类.参数调优化) JVM被分为三个主要的子系统 (1)类加载器子系统(2)运行 ...

  7. JVM系列之一:JVM架构

    1.简介 Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库. JVM是Java Virtual Machine(Java虚拟机)的缩 ...

  8. Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

    前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...

  9. [转载+整理]JVM性能调优----JVM架构

    JVM的总体结构参考如下两图:

  10. JVM架构_XmnXmsXmxXss有什么区别:转

    1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. 了解jvm内存管理看这里:jvm ...

随机推荐

  1. 第2节 hive基本操作:12、hive当中的hql语法

    3.2. hive查询语法 3.2.1.SELECT https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 基本 ...

  2. java IO流 内容整理

    在java中,对数据的输入和输出操作以流的方式进行.(注:对文件的操作用io.File类,但不能对文件中的内容进行操作) 一.IO流的分类: 按数据流的方向不同,可以分为输入流和输出流: 按处理数据的 ...

  3. Centos7 64bit Linux系统安装SVN 和 http访问配置

    第一步,更新源,并通过yum下载安装svn [root@virde ~]# yum update [root@virde ~]# yum -y install subversion 安装过程中,全部选 ...

  4. [转]TOpenDialog

    转自:http://www.cnblogs.com/zhangzhifeng/archive/2011/08/04/2127395.html 1.TOpenDialog组件的典型用法“打开”对话框是用 ...

  5. mysql错误Error(1133): Can’t find any matching row in the use

    执行插入用户语句没有问题,但是执行权限赋值的时候提示:1133 - Can't find any matching row in the user table; 解决办法:插入新的用户成功时,需要刷新 ...

  6. token 的生成杂谈

    背景 很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识. 实现方式 md5 的方式: $v = 1; // 自己定义的 需要hash 的value 值 $key = ...

  7. PHP 反射API

    出处:http://blog.csdn.net/hguisu/article/details/7357421 PHP5添加了一项新的功能:Reflection.这个功能使得phper可以reverse ...

  8. poj 2186 强连通分量

    poj 2186 强连通分量 传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 33414 Acc ...

  9. 立方体 反射 CubeMap

    立方体反射(CubeMap) 在虚拟环境中,我们需要模拟材质球反射周围的环境,立方体反射正是让材质球反射出天空盒的背景的方法之一. 原理 当我们观察物体时,物体表面足够光滑,再视线方向和物体相交的点上 ...

  10. dsu+树链剖分+树分治

    dsu,对于无修改子树信息查询,并且操作支持undo的问题 暴力dfs,对于每个节点,对所有轻儿子dfs下去,然后再消除轻儿子的影响 dfs重儿子,然后dfs暴力恢复轻儿子们的影响,再把当前节点影响算 ...