当前位置: 首页 > news >正文

什么是网站栏目标题招聘网58同城招聘

什么是网站栏目标题,招聘网58同城招聘,招网站开发人员,繁体版 企业网站一.什么是方法区? 方法区属于是 JVM 运行时数据区域的一块逻辑区域,是各个线程共享的内存区域。 《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用,方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说,在…

一.什么是方法区?

方法区属于是 JVM 运行时数据区域的一块逻辑区域,是各个线程共享的内存区域。

《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用,方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说,在不同的虚拟机实现上,方法区的实现是不同的。

当虚拟机要使用一个类时,它需要读取并解析 Class 文件获取相关信息,再将信息存入到方法区。方法区会存储已被虚拟机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据

二.方法区和永久代以及元空间有什么关系?

  • Jdk1.6及之前,有永久代(Permenent generation),静态变量存放在永久代上
  • Jdk1.7有永久代,但已经逐步"去永久代",字符串常量池,静态变量移除保存在堆上
  • Jdk1.8及之后,没有永久代,类型信息,字段,方法,常量保存在本地内存的元空间中,但是字符串常量池,静态变量仍在堆中.

方法区和永久代以及元空间的关系很像 Java 中接口和类的关系,类实现了接口,这里的类就可以看作是永久代和元空间,接口可以看作是方法区,也就是说永久代以及元空间是 HotSpot 虚拟机对虚拟机规范中方法区的两种实现方式。
在这里插入图片描述

三.为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?

在这里插入图片描述
1、整个永久代有一个 JVM 本身设置的固定大小上限,无法进行调整,而元空间使用的是直接内存,受本机可用内存的限制,虽然元空间仍旧可能溢出,但是比原来出现的几率会更小。
你可以使用 -XX:MaxMetaspaceSize 标志设置最大元空间大小,默认值为 unlimited,这意味着它只受系统内存的限制。-XX:MetaspaceSize 调整标志定义元空间的初始大小如果未指定此标志,则 Metaspace 将根据运行时的应用程序需求动态地重新调整大小。

2、元空间里面存放的是类的元数据,这样加载多少类的元数据就不由 MaxPermSize 控制了, 而由系统的实际可用空间来控制,这样能加载的类就更多了。

3、在 JDK8,合并 HotSpot 和 JRockit 的代码时, JRockit 从来没有一个叫永久代的东西, 合并之后就没有必要额外的设置这么一个永久代的地方了。

四.什么是运行时常量池?

Class 文件中除了有类的版本、字段、方法、接口等描述信息外,还有用于存放编译期生成的各种字面量(Literal)和符号引用(Symbolic Reference)的常量池表(Constant Pool Table)。常量池表会在类加载后存放到方法区的运行时常量池中。

字面量是源代码中的固定值的表示法,即通过字面我们就能知道其值的含义。字面量包括整数、浮点数和字符串字面量,符号引用包括类符号引用、字段符号引用、方法符号引用和接口方法符号引用。

运行时常量池的功能类似于传统编程语言的符号表,尽管它包含了比典型符号表更广泛的数据。

既然运行时常量池是方法区的一部分,自然受到方法区内存的限制,当常量池无法再申请到内存时会抛出 OutOfMemoryError 错误。

JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

五.字符串常量池有什么作用?

字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建.

String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
System.out.println(aa==bb);// true

JDK1.7 之前运行时常量池逻辑包含字符串常量池存放在方法区。JDK1.7 的时候,字符串常量池被从方法区拿到了堆中。

这里的字符串其实就是我们前面提到的字符串字面量。在声明一个字符串字面量时,如果字符串常量池中能够找到该字符串字面量,则直接返回该引用。如果找不到的话,则在常量池中创建该字符串字面量的对象并返回其引用。

六.JDK 1.7 为什么要将字符串常量池移动到堆中?

主要是因为永久代(方法区实现)的 GC 回收效率太低,只有在整堆收集 (Full GC)的时候才会被执行 GC。Java 程序中通常会有大量的被创建的字符串等待回收,将字符串常量池放到堆中,能够更高效及时地回收字符串内存。

总结

一张图片带你看看 JDK1.6 到 JDK1.8 方法区的变化。
在这里插入图片描述

http://www.yayakq.cn/news/164990/

相关文章:

  • 网站开发人员负责方面深圳创业板股票代码
  • 猎聘网招聘官方网站物流公司网站 源码
  • seo公司哪家好桔子seo工具
  • 做网站搞什么流量wordpress 1g 不够用
  • 设计服务网站校园失物招领网站建设
  • 关于手表网站建设策划书网站开发语言的选择
  • 南京淄博网站建设方案网站建设制作要学什么软件
  • 商城模板网站模板大足区城乡建设投资集团网站
  • 安庆做网站的公司网站开发教程 模板
  • 公司企业网站浏览器正能量网址
  • 网站建qq群网站代码免费下载
  • 关于建设企业网站的请示wordpress 搜索设置
  • 南京外贸网站建设怎么收费哈尔滨自助建站
  • 广州网站建设商城建设中山网站模板
  • 精品建站教程wordpress 会员 下载
  • 绍兴网站制作推广阜阳北京网站建设
  • 移动端网站做排名盐城经济技术开发区建设局网站
  • 校园网站规划与建设西安企业100强
  • 做网站的像素是多少网站制作代码大全
  • 织梦网站更新淄博住房和城乡建设局网站
  • 外贸网站seo推广方案房产网站开发
  • 百度云建站教程个人网站建设模板下载
  • 网站一直被攻击怎么办目前旅游网站开发
  • 卖东西的网站怎么建设浦东网站建设
  • 海外域名服务商seo国外英文论坛
  • 厚街响应式网站建设如何查看网站模板
  • 西安营销型网站制作沈阳网站建设 网络服务
  • 沈阳建设工程质量检测中心网站推广方式单一的原因
  • 网站建设注意事项 南京手机禁止网站跳转页面
  • 怎么优化自己网站的关键词网站开发可能存在的困难