Java内存中的常量池

  1,java内存模型简介

  《深化了解java虚拟机》里将java内存分为以下五个模块:

  

  堆-堆是一切线程共享的,主要用来存储对象。

  个中,堆可分为:更生代和老年代两块区域。应用NewRatio参数来设定比例。关于年轻代,一个Eden区和两个Suvivor区,应用参数SuvivorRatio来设定大年夜小;

  Java虚拟机栈/当地方法栈-线程私有的,主要寄存局部变量表,操作数栈,静态链接和方法出口等;

  pc寄存器(依次计数器)-异样是线程私有的,记录以后线程编译class文件的行号指导器,为线程之间的切换供给保证;

  方法区-线程共享的,主要存储类信息、运转经常量池、静态变量、JIT编译后的代码等数据。方法区实际下去说是堆的逻辑构成局部;

  运转经常量池-是方法区的一局部,用于寄存编译期生成的各类字面量和符号援用;

  2,永久代和方法区

  触及到内存模型时,常常会提到永久代,那么它和方法区又是甚么关系呢?《Java虚拟机规范》只是规矩了有方法区这么个概念和它的感化,并没有规矩若何去完成它。那么,在分歧的 JVM 上方法区的完成必然是分歧的了。 同时大年夜少数用的JVM都是Sun公司的HotSpot。在HotSpot上把GC分代汇集扩大至方法区,或许说应用永久代来完成方法区。因此,我们掉掉落了却论,方法区是在Java虚拟机规范中的定义,是一种规范,永久代仅仅是HotSpot的概念,是一种完成,一个是规范一个是完成。其他的虚拟机完成并没有永久带这一说法。在1.7之前在(JDK1.2 ~ JDK6)的完成中,HotSpot 应用永久代完成方法区,应用 GC分代来完成方法区内存收受接管。

  3,元空间

  java 8中放弃了永久代的概念,取而代之的是元空间。为甚么叫元空间,是因为这外面存储的是类的元数据信息。甚么又叫元数据信息?元数据就是数据的数据,或许说是刻画数据的数据,信息的信息。

  永久代和元空间的差别:

  元空间是直接存在内存中的,其实不在java虚拟机中,因此元空间依附于内存大年夜小。固然也能够自定义元空间大年夜小。

  永久代实际上是堆的一局部,和更生代老年代的地址是延续的。

  元空间存储类的元信息,而将静态变量和常量池等并入堆中。相当于本来永久代的数据被分到了堆和元空间中。

  4,class文件常量池

  Class 文件常量池指的是编译生成的 class 字节码文件,其结构中有一项是常量池(Constant Pool Table),用于寄存编译期生成的各类字面量和符号援用,这局部外容将在类加载落伍入方法区的运转经常量池中寄存。

上一篇:渭南实木活动木地板防变形处理方法
下一篇:没有了

你还会喜欢:

奥山团体引进瑞典冰球教授教化系统  启动“武汉。
奥山团体引进瑞典冰球教授教化系统 启动“武汉

新叁板花样翻新层:你在找券商 殊不知券商也在。
新叁板花样翻新层:你在找券商 殊不知券商也在

暖和点|关于微不清雅面、债市、商品、房地产。
暖和点|关于微不清雅面、债市、商品、房地产

金鱼有蓝色的吗。
金鱼有蓝色的吗

公司logo设计的主要性是甚么。
公司logo设计的主要性是甚么

习近平:合营开展契合各国人平易近久远和基本。
习近平:合营开展契合各国人平易近久远和基本