知识大全 深入了解JVM内存结构

Posted 常量

篇首语:如果,不能运气爆棚。那就,努力实力过人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入了解JVM内存结构相关的知识,希望对你有一定的参考价值。

深入了解JVM内存结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  你对JVM内存结构是否熟悉 这里向大家描述一下 主要包括类装载子系统 方法区 PC寄存器 堆和栈等内容 其中方法区被所有线程共享 垃圾收集也会清理方法区中的无用类型对象

  JVM内存结构

   )JVM内存结构之类装载子系统

  装载连接初始化

  ( )JVM内存结构之方法区

  被所有线程共享 垃圾收集也会清理方法区中的无用类型对象

  a 类型信息

  类加载器加载类时 从类文件中提取出来

  类的完整有效名

  父类的完整有效名(interfaceandjava lang Object除外 因为无父类)

  类型的修饰符

  类型直接接口列表

  b 常量池

  存储了一个类型所使用的常量所有类型 域和方法的符号引用

  c 域信息

  jvm必须在方法区中保存类型的所有域的相关信息以及域的声明顺序

  域的相关信息包括

  域名

  域类型

  域修饰符(publicprivateprotectedstaticfinalvolatiletransient…)

  d 方法信息

  方法名

  方法返回类型

  方法参数

  方法的修饰符

  方法的字节码(abstractandnative除外)(被PC寄存器指向)

  操作数栈和方法栈帧的局部变量区的大小

  异常表

  e 类的静态变量(所有对象共享一分拷贝)

  f 类的被声明为final的类变量(所有对象共享一分拷贝)

  g 加载一个类的类加载器的引用

  h Class类的引用

  i 方法表

  j 一个例子

       ClassLava     privateintspeed= ;     voidflow();              ClassVolcano     publicstaticvoidmain(String[]args)     Lavalava=newLava();     lava flow();                

      下面我们描述一下main()方法的第一条指令的字节码是如何被执行的 不同的jvm实现的差别很大 这里只是其中之一

      为了运行这个程序 你以某种方式把 Volcano 传给了jvm 有了这个名字 jvm找到了这个类文件(Volcano class)并读入 它从类文件提取了类型信息并放在了方法区中 通过解析存在方法区中的字节码 jvm激活了main()方法 在执行时 jvm保持了一个指向当前类(Volcano)常量池的指针

      注意jvm在还没有加载Lava类的时候就已经开始执行了 正像大多数的jvm一样 不会等所有类都加载了以后才开始执行 它只会在需要的时候才加载

      main()的第一条指令告知jvm为列在常量池第一项的类分配足够的内存

      jvm使用指向Volcano常量池的指针找到第一项 发现是一个对Lava类的符号引用 然后它就检查方法区看lava是否已经被加载了

      这个符号引用仅仅是类lava的完整有效名 lava 这里我们看到为了jvm能尽快从一个名称找到一个类 一个良好的数据结构是多么重要 这里jvm的实现者可以采用各种方法 如hash表 查找树等等 同样的算法可以用于Class类的forName()的实现

      当jvm发现还没有加载过一个称为 Lava 的类 它就开始查找并加载类文件 Lava class 它从类文件中抽取类型信息并放在了方法区中

      jvm于是以一个直接指向方法区lava类的指针替换了常量池第一项的符号引用 以后就可以用这个指针快速的找到lava类了 而这个替换过程称为常量池解析(constantpoolresolution) 在这里我们替换的是一个native指针

      jvm终于开始为新的lava对象分配空间了 这次 jvm仍然需要方法区中的信息 它使用指向lava数据的指针(刚才指向volcano常量池第一项的指针)找到一个lava对象究竟需要多少空间

      一旦jvm知道了一个Lava对象所要的空间 它就在堆上分配这个空间并把这个实例的变量speed初始化为缺省值 假如lava的父对象也有实例变量 则也会初始化

      当把新生成的lava对象的引用压到栈中 第一条指令也结束了 下面的指令利用这个引用激活java代码把speed变量设为初始值 另外一条指令会用这个引用激活Lava对象的flow()方法

      ( )JVM内存结构之堆

      存放运行时所有对象和数组

      ( )JVM内存结构之栈

      每次启动一个新的线程 就会被分配一个栈

      ( )JVM内存结构之PC寄存器(程序计数器)

      总是指向该线程下一步要执行的指令 指令的位置放在方法区的方法字节码中 内容是相对于第一个指令的偏移量

      ( )JVM内存结构之本地方法栈

cha138/Article/program/Java/hx/201311/26823

相关参考

知识大全 JVM内存结构

JVM内存结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()类装载子系统  装载连接初始化

知识大全 JVM运行时内存空间结构

JVM运行时内存空间结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JVM执行Java程序的

知识大全 内存屏障与JVM并发详解

深入Java底层:内存屏障与JVM并发详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  内存屏

知识大全 JVM,内存回收及其他

深入探索Java工作原理:JVM,内存回收及其他  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 详解JVM的内存管理机制

详解JVM的内存管理机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们在深入Java核心系列文

知识大全 MyEclipse内存不足之JVM内存浅谈

MyEclipse内存不足之JVM内存浅谈  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MyE

知识大全 JVM内存组成及分配

JVM基础:JVM内存组成及分配  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 配置JVM内存分配的妙招

配置JVM内存分配的妙招  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 JVM内存模型及垃圾收集策略解析(1)

JVM内存模型及垃圾收集策略解析(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一JVM内

知识大全 Eclipse中进行JVM内存设置

Eclipse中进行JVM内存设置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb