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

网站首页模板免费下载长沙网站快速排名提升

网站首页模板免费下载,长沙网站快速排名提升,网站建设费用清单,深圳手机移动网站开发系列文章目录 第一章 运行区实验 文章目录 系列文章目录前言一、堆(Heap)1.1、新生代/Young区1.1.1、Eden区1.1.2、Survival区 1.2、年老代(old区) 二、虚拟机栈(Stack)2.1、栈顶缓存技术2.2、溢出2.3、栈…

系列文章目录

第一章 运行区实验


文章目录

  • 系列文章目录
  • 前言
  • 一、堆(Heap)
    • 1.1、新生代/Young区
      • 1.1.1、Eden区
      • 1.1.2、Survival区
    • 1.2、年老代(old区)
  • 二、虚拟机栈(Stack)
    • 2.1、栈顶缓存技术
    • 2.2、溢出
    • 2.3、栈帧
      • 2.3.1、局部变量表(local variables)
      • 2.3.2、操作数栈(Operand Stack LIFO)
      • 2.3.3、动态链接
      • 2.3.4、方法返回地址
      • 2.3.5、额外信息
  • 三、方法区(MetaData Space)
    • 3.1、方法区和永久代的关系
  • 四、本地方法栈(Native Method Stacks)
  • 五、程序计数器
  • 六、直接内存(Direct Memory)
  • 总结


前言

JVM(Java虚拟机)运行区是Java程序在运行过程中被JVM所管理的内存区域。它包括了Java程序运行时的堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stacks)、程序计数器和直接内存(Direct Memory)等部分。
在这里插入图片描述


一、堆(Heap)

堆(Heap)是Java程序运行时用于动态分配内存的区域,也是Java垃圾收集器进行垃圾回收的主要区域。堆内存被所有线程共享。

以JDK8为例,堆(Heap)用来存放对象,几乎所有(逃逸分析技术,栈上分配、标量替换)对象都在堆上分配,将Java堆细分的目的只是为了更好地回收内存,或者更快地分配内存,堆中没有内存分配对象,并且无法扩展时,会抛出OutOfMemoryError异常。

堆(Heap)一般管理新生代/Young区 、年老代(old区) 、String字符串常量池。

1.1、新生代/Young区

新生代里包含Eden区 与 Survival区2个区。

1.1.1、Eden区

Eden区位于Java堆的年轻代,是新对象分配内存的地方,由于堆是所有线程共享的,因此在堆上分配内存需要加锁。而Sun JDK为提升效率,会为每个新建的线程在Eden上分配一块独立的空间由该线程独享,这块空间称为TLAB(Thread Local Allocation Buffer)。在TLAB上分配内存不需要加锁,因此JVM在给线程中的对象分配内存时会尽量在TLAB上分配。如果对象过大或TLAB用完,则仍然在堆上进行分配。如果Eden区内存也用完了,则会进行一次Minor GC(young GC)。

1.1.2、Survival区

Survival区与Eden区相同都在Java堆的年轻代。Survival区有两块,一块称为from区,另一块为to区,这两个区是相对的,在发生一次Minor GC后,from区就会和to区互换。在发生Minor GC时,Eden区和Survival from区会把一些仍然存活的对象复制进Survival to区,并清除内存。Survival to区会把一些存活得足够旧的对象移至年老代。

1.2、年老代(old区)

年老代里存放的都是存活时间较久的,大小较大的对象,因此年老代使用标记整理算法。当年老代容量满的时候,会触发一次Major GC(full GC),回收年老代和年轻代中不再被使用的对象资源

二、虚拟机栈(Stack)

每个线程在创建时都会创建一个私有的JVM栈。每个方法执行的时候都会创建一个栈帧,用于存储局部变量、操作数栈、常量池引用等信息。如下图,栈帧1、栈帧2、栈帧3、栈帧N。
在这里插入图片描述

2.1、栈顶缓存技术

解释执行状态下,将访问最频繁的数据(程序计数器、栈顶)缓存在物理CPU的寄存器中,以此降低对内存的读/写次数,提升执行引擎的执行效率。

2.2、溢出

如果线程请求的栈深度大于虚拟机所允许深度,将抛出StackOverflowError异常;如果Java虚拟机栈容量可以动态扩展 ,当栈扩展时无法申请到足够的内存会抛出OutOfMemoryError异常。

发生StackOverflowError异常,使用死循环递归代码可以复现。
在这里插入图片描述
可以使用参数-Xss选项来设置线程的最大栈空间,例如-Xss265k

2.3、栈帧

栈的存储单位为栈帧,线程上正在执行的一个方法对应一个栈帧,栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。

每个栈帧包含五部分,分别包括局部变量表、操作数栈、动态链表(指向运行时常量池的方法引用)、方法返回地址和一些额外信息。
在这里插入图片描述

2.3.1、局部变量表(local variables)

  • 局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各种基本数据类型、对象引用(reference),以及returnAddress类型。

  • 由于局部变量表是线程的私有数据,不存在线程的安全问题

  • 局部变量表所需容量大小在编译器确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的。

  • 局部变量表的变量只在当前方法调用中有效的,当方法调用结束后,随着方法栈帧的消耗,局部变量表也会随之销毁。

  • 局部变量表的最基本存储单位是Slot(变量槽),32位以内的类型只占用一个slot(包括returnAddress类型,引用类型),64位的类型(long和double)占用两个slot。

  • 每一slot都分配一个访问索引,占用两个slot的变量,只需要使用前一个索引即可

  • 构造方法或者实例方法(非static),该对象引用this将会存放在index为0的slot处

  • 局部变量表的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

2.3.2、操作数栈(Operand Stack LIFO)

  • 编译后 .Class文件的Code属性的max_stacks数据记录操作数栈的最大深度
  • 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈或者出栈,使用数组实现
  • 操作数栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。

2.3.3、动态链接

运行期间把常量池中的符号引用转换成直接引用的过程,叫做动态链接;
每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态链接。

2.3.4、方法返回地址

方法返回地址存储的是调用该方法的pc寄存器的值。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。

2.3.5、额外信息

Java虚拟机规范,允许虚拟机实现,在栈帧之中增加一些规范里没有描述的信息,例如与调试、性能收集相关的信息。

三、方法区(MetaData Space)

方法区(MetaData Space 元空间)/Non-Heap,用于存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
在这里插入图片描述

3.1、方法区和永久代的关系

在JDK1.8之前,习惯把方法区称为“永久代”。HotSpot 虚拟机在1.7之前使用永久代来管理(实现)方法区,使得jvm的垃圾回收器能像管理堆内存一样来管理永久代这部分内存,而不用专门为方法区编写内存管理代码。但这种设计使得虚拟机更容易出现内存溢出问题,而不像J9和JRockit只要没有触碰到进程可用内存的上限(32位4GB),就没有问题。
JDK1.7把原本放在永久代的字符串常量池、静态变量等移出(主要剩余类型信息)
JDK1.8完全废弃了永久代的概念,改用与JRockit、J9一样,在本地内存中实现的元空间方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

四、本地方法栈(Native Method Stacks)

Native Method Stacks 为虚拟机使用到的本地(Native)方法服务,本地方法栈也会在栈深度溢出或者栈扩展失败时分别抛出StackOverflowError和OutOfMemoryError异常。

五、程序计数器

程序计数器,当前线程所执行的字节码的行号指示器,字节码解释器工作时,通过改变计数器的值,执行下一条指令,此内存是JVM规范中唯一一个没有OutOfMemoryError的区域。

六、直接内存(Direct Memory)

DM并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError异常出现,例如:NIO 中的 DirectByteBuffer 直接操作堆外内存,避免在Java堆和Native堆中来回复制数据。

同时也可以关注零拷贝(DMA)技术的应用。


总结

这些内存区域的管理和优化对于Java程序的性能和可靠性至关重要。


文章转载自:
http://seclude.c7629.cn
http://exercisable.c7629.cn
http://capitatim.c7629.cn
http://unitrust.c7629.cn
http://brief.c7629.cn
http://sexualize.c7629.cn
http://specilize.c7629.cn
http://paleoanthropology.c7629.cn
http://damask.c7629.cn
http://monogenism.c7629.cn
http://tasteless.c7629.cn
http://anabasis.c7629.cn
http://acrocentric.c7629.cn
http://hanky.c7629.cn
http://poikilotherm.c7629.cn
http://cozily.c7629.cn
http://eos.c7629.cn
http://venezuela.c7629.cn
http://restoration.c7629.cn
http://sharpeville.c7629.cn
http://lead.c7629.cn
http://spleuchan.c7629.cn
http://patienthood.c7629.cn
http://haneda.c7629.cn
http://windsucker.c7629.cn
http://polypragmatical.c7629.cn
http://gamesman.c7629.cn
http://jaeger.c7629.cn
http://pom.c7629.cn
http://fool.c7629.cn
http://villeurbanne.c7629.cn
http://autotype.c7629.cn
http://branchiae.c7629.cn
http://hammurapi.c7629.cn
http://weazand.c7629.cn
http://unprepossessed.c7629.cn
http://decastylos.c7629.cn
http://puttyblower.c7629.cn
http://biogeochemistry.c7629.cn
http://protonate.c7629.cn
http://introject.c7629.cn
http://oppressively.c7629.cn
http://loot.c7629.cn
http://woolfell.c7629.cn
http://was.c7629.cn
http://mountie.c7629.cn
http://verdant.c7629.cn
http://divination.c7629.cn
http://sidesman.c7629.cn
http://manservant.c7629.cn
http://mewl.c7629.cn
http://ellipsograph.c7629.cn
http://railroadiana.c7629.cn
http://niggra.c7629.cn
http://starch.c7629.cn
http://rooseveltite.c7629.cn
http://dispiteous.c7629.cn
http://smattering.c7629.cn
http://quarterday.c7629.cn
http://hackler.c7629.cn
http://janitress.c7629.cn
http://hormonology.c7629.cn
http://sheria.c7629.cn
http://vice.c7629.cn
http://bilk.c7629.cn
http://cornetist.c7629.cn
http://subfossil.c7629.cn
http://liefly.c7629.cn
http://sudd.c7629.cn
http://entomogenous.c7629.cn
http://scuppernong.c7629.cn
http://tlas.c7629.cn
http://forecheck.c7629.cn
http://margaric.c7629.cn
http://prostie.c7629.cn
http://inhibitor.c7629.cn
http://materialistic.c7629.cn
http://quinary.c7629.cn
http://navajoite.c7629.cn
http://shoaly.c7629.cn
http://sherpa.c7629.cn
http://tridimensional.c7629.cn
http://egregious.c7629.cn
http://indicatory.c7629.cn
http://roughhouse.c7629.cn
http://wane.c7629.cn
http://rubellite.c7629.cn
http://unquiet.c7629.cn
http://rhonchi.c7629.cn
http://mammogen.c7629.cn
http://ofay.c7629.cn
http://zoa.c7629.cn
http://bingo.c7629.cn
http://outsang.c7629.cn
http://serological.c7629.cn
http://tablecloth.c7629.cn
http://cure.c7629.cn
http://vehemence.c7629.cn
http://avianize.c7629.cn
http://degenerative.c7629.cn
http://www.zhongyajixie.com/news/101494.html

相关文章:

  • 网站开发环境集成安装包百度推广管理平台
  • 营销网站的建设流程杭州网站运营十年乐云seo
  • 深圳高端网站建设价格全网营销网络推广
  • jsp网页成品免费下载南和网站seo
  • 群晖 wordpress 阿里云站内优化
  • 医院网站建设的规划免费下载app并安装
  • 衡水手机网站建设网站推广应该怎么做?
  • 网站开发vs2015是什么线上宣传渠道
  • 南京做网站优化的企业免费产品推广软件
  • cms系统网站百度客户端登录
  • 网站只能用ip访问网站吗收录情况
  • 西昌市做网站的专业seo公司
  • 美国做美业网站的么特设计网站接单
  • 做面膜的网站清远新闻最新消息
  • 租网站需要多少钱私人做网站的流程
  • 展馆门户网站建设濮阳网站推广
  • 怎么给网站做压力测试厦门seo服务
  • web前端面试以前都是做的小网站手机如何制作网站教程
  • 怎么做企业网站二维码扫描百度seo排名培训优化
  • 广州可信网站认证服务器石家庄今日头条新闻
  • 乐山做网站的公司外链在线生成
  • 网站建设时时彩优化网络软件
  • 至少保存十个以上域名网站在线工具网站
  • 2017网站建设报价方案网络营销课程大概学什么内容
  • 自己做的网站加载慢的原因百度营销推广登录平台
  • wordpress用户上传头像鞍山seo优化
  • 做澳洲ets上什么网站中国万网域名注册免费
  • 合肥网站建设找佳达seo点击软件哪个好用
  • 网站权重排行榜网站关键词排名
  • 在线做图表网站变现流量推广app