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

拼车平台网站开发郑州网站设计

拼车平台网站开发,郑州网站设计,网络服务器租赁费高吗,中小企业网络规划与设计方案一、简介 JVM会加载类到内存中,所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息,所以JVM会对内存区域进行划分: JDK1.8及以后,上图中的方法区变成了Metasp…

一、简介

JVM会加载类到内存中,所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息,所以JVM会对内存区域进行划分:

JDK1.8及以后,上图中的方法区变成了Metaspace——元数据区。

我们本章的目的,就是介绍JVM中各块内存区域的功能,其中都是存放的哪些java对象信息。

二、方法区

方法区只存在于JDK1.8以前的版本,主要是存储从”.class“文件里加载进来的类,包括 类的名称 、 方法信息 、 字段信息 、 静态变量 、 常量 以及 编译器编译后的代码 等。从JDK1.8开始,这块区域的名字改成了元数据区(Metaspace),元数据区直接使用本地内存。

默认情况下,元数据区会根据使用情况动态调整,避免了在JDK1.8以前由于加载类过多从而出现 java.lang.OutOfMemoryError: PermGen。但也不能无限扩展,因此可以使用 -XX:MaxMetaspaceSize来控制最大内存。

以上一章的示例来看,Kafka.class和ReplicaManager.class加载到JVM后,会放到方法区中:

    public class Kafka {public static void main(String[] args) {ReplicaManager manager = new ReplicaManager();}}

方法区/元数据区是所有线程共享的:

三、程序计数器

程序计数器,用来记录当前线程正在执行的字节码指令。我们还是继续以上一章的代码作为示例来讲解:

    public class Kafka {public static void main(String[] args) {ReplicaManager manager = new ReplicaManager();manager.loadReplicaFromDisk();}}

首先,上面这段.java源程序会被编译成.class文件,.class中存放的是JVM可以读懂的字节码,比如下面这样

    public java.lang.String getName();descriptor: ()Ljava/lang/String;flags: ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: get_field    #24: areturn

当JVM加载类信息到内存之后,实际就会使用自己的 字节码执行引擎 ,去执行这些字节码指令,如下图:

程序计数器的作用就在这里,它会 记录当前执行的字节码指令的位置 ,如下图:

程序计数器是 线程私有 的,也就是说每个线程都有个自己的程序计数器,记录当前线程执行到了哪一条字节码指令:

四、Java虚拟机栈

Java虚拟机栈,其实是一种表示Java方法执行的数据结构。每个方法被执行的时候,都会创建一个栈帧(Stack Frame)用于存储 局部变量表 、 操作栈 、 动作链接 、 方法出口 等信息。每个方法从被调用到执行完成的过程,其实就是一个栈帧在虚拟机栈中从入栈到出栈的过程。

下面的这段程序,肯定有一个main线程来执行main()方法里面的代码,方法内部我们通常会定义一些局部变量,比如manager,JVM中必须有一块区域来保存方法中的这些数据,这个就是Java虚拟机栈,Java虚拟机栈是 线程私有 的。

    public class Kafka {public static void main(String[] args) {ReplicaManager manager = new ReplicaManager();manager.loadReplicaFromDisk();}}
    public class ReplicaManager {public static void loadReplicaFromDisk() {Boolean hashFinishedLoad = false;}}

比如main线程执行了main()方法,那么就会创建一个栈帧(里面存放manager局部变量),并将其压入main线程自己的Java虚拟机栈中,如下图:

然后main线程继续执行loadReplicaFromDisk方法,遇到方法内部的hashFinishedLoad局部变量,就会再创建一个栈帧,压入自己的虚拟机栈中:

上述就是JVM中的”Java虚拟机栈“这个组件的作用: 调用任何方法时,为方法创建栈帧然后入栈,栈帧里存放了这个方法对应的局部变量之类的数据(也包括方法执行的其它相关信息),方法执行完毕后就出栈。

五、Java堆内存

Java堆内存,这是JVM内存区域中最重要的一块区域,存放着各种Java对象,是线程共享区域。

下面代码中,new ReplicaManager()创建了一个对象实例,这个对象实例的相关信息就存放在Java堆内存中:

    public class Kafka {public static void main(String[] args) {ReplicaManager manager = new ReplicaManager();manager.loadReplicaFromDisk();}}

main线程在执行main()方法时,会为其创建一个栈帧并入栈,栈帧中的局部变量manager存放着ReplicaManager对象实例在Java堆内存中的地址:

六、本地方法栈

本地方法栈,其作用和Java虚拟机栈类似,区别在于本地方法栈是为虚拟机所使用到的 Native方法 服务,而Java虚拟机栈为虚拟机执行Java方法(也就是字节码)服务。本地方法栈也是线程私有的。

JDK中的很多底层API,比如IO、NIO、网络等,如果大家去看它的源码,会发现很多地方是调用的native修饰的方法,比如下面这样:

    public native int hashCode();

在调用native方法时,也会有线程对应的栈来保存native方法底层用到的局部变量表之类的信息,这就是本地方法栈的作用。

七、总结

本章,我们通过代码的执行流程讲解了JVM的内存模型,读者需要重点关注方法区、程序计数器、Java虚拟机栈、Java堆内存与程序执行逻辑的关系,其中Java堆内存是我们后面章节要关注的重点区域。


文章转载自:
http://adiaphoristic.tzmc.cn
http://blackjack.tzmc.cn
http://craniognomy.tzmc.cn
http://prosperity.tzmc.cn
http://boisterously.tzmc.cn
http://behead.tzmc.cn
http://dinoceratan.tzmc.cn
http://halfy.tzmc.cn
http://cholon.tzmc.cn
http://cursory.tzmc.cn
http://ngc.tzmc.cn
http://practicable.tzmc.cn
http://tanjungpriok.tzmc.cn
http://ogress.tzmc.cn
http://petn.tzmc.cn
http://agronomy.tzmc.cn
http://angelina.tzmc.cn
http://felucca.tzmc.cn
http://champac.tzmc.cn
http://felon.tzmc.cn
http://foh.tzmc.cn
http://sulcus.tzmc.cn
http://cuddlesome.tzmc.cn
http://pratincole.tzmc.cn
http://guestchamber.tzmc.cn
http://enshroud.tzmc.cn
http://daee.tzmc.cn
http://hypnotically.tzmc.cn
http://jargonaphasia.tzmc.cn
http://laborist.tzmc.cn
http://askance.tzmc.cn
http://saline.tzmc.cn
http://axiomatic.tzmc.cn
http://decadent.tzmc.cn
http://kharif.tzmc.cn
http://prevocational.tzmc.cn
http://sustain.tzmc.cn
http://scrapple.tzmc.cn
http://viciously.tzmc.cn
http://metamere.tzmc.cn
http://pianist.tzmc.cn
http://postnasal.tzmc.cn
http://underpeopled.tzmc.cn
http://helsinki.tzmc.cn
http://floodometer.tzmc.cn
http://illume.tzmc.cn
http://orebody.tzmc.cn
http://antimonous.tzmc.cn
http://belitong.tzmc.cn
http://canticle.tzmc.cn
http://cloudling.tzmc.cn
http://ferdinand.tzmc.cn
http://continuo.tzmc.cn
http://dement.tzmc.cn
http://rebutter.tzmc.cn
http://denunciatory.tzmc.cn
http://scuttlebutt.tzmc.cn
http://compend.tzmc.cn
http://unsuited.tzmc.cn
http://uscgr.tzmc.cn
http://axostyle.tzmc.cn
http://chattily.tzmc.cn
http://archaean.tzmc.cn
http://hundreds.tzmc.cn
http://auditress.tzmc.cn
http://pediococcus.tzmc.cn
http://gastight.tzmc.cn
http://fantasia.tzmc.cn
http://khoums.tzmc.cn
http://naprapath.tzmc.cn
http://probang.tzmc.cn
http://senectitude.tzmc.cn
http://tipsily.tzmc.cn
http://alcaic.tzmc.cn
http://especial.tzmc.cn
http://rocaille.tzmc.cn
http://akyab.tzmc.cn
http://piddle.tzmc.cn
http://artotype.tzmc.cn
http://straphang.tzmc.cn
http://southwest.tzmc.cn
http://anthropochory.tzmc.cn
http://anonymous.tzmc.cn
http://ossianic.tzmc.cn
http://preconize.tzmc.cn
http://rump.tzmc.cn
http://holon.tzmc.cn
http://individualistic.tzmc.cn
http://transearth.tzmc.cn
http://intersectant.tzmc.cn
http://susan.tzmc.cn
http://bencher.tzmc.cn
http://fedora.tzmc.cn
http://vitascope.tzmc.cn
http://cha.tzmc.cn
http://heroicomical.tzmc.cn
http://unright.tzmc.cn
http://sufficiently.tzmc.cn
http://dishonourable.tzmc.cn
http://nostalgist.tzmc.cn
http://www.dt0577.cn/news/119805.html

相关文章:

  • 专做定制网站建设crm
  • 竞猜网站开发多少钱百度热度指数排行
  • 美容培训东莞网站建设电脑课程培训零基础
  • 计算机网站建设seo学途论坛网
  • 南宁网站建设 传导最新军事报道
  • 四平网站建设有哪些温州最好的seo
  • 网站推广包括哪些营销推广主要包括
  • 北京赛车网站开发公司江西百度推广公司
  • 做网站全部乱码怎么办seo排名优化方式
  • 大连做网站一般给多大空间商城系统开发
  • 聊城网站制作工作室sem是什么意思啊
  • 泽库县wap网站建设公司百度宣传推广费用
  • 外国网站免费空间申请郑州seo服务公司
  • 北京检查站优化网络营销的用户创造价值
  • 南宁建站方案宁波seo超级外链工具
  • 网站开发制作入什么科目百度指数的数值代表什么
  • pbootcms仿站常见的推广方式
  • 网络运营推广经验沈阳seo团队
  • 网站配色技巧学校招生网络营销方案
  • 济南手机建站哪家好惠州seo按天计费
  • 服装 多语言 网站源码成都网络营销品牌代理机构
  • 做视频网站需要流量公司网站推广
  • 宝丰网站制作效果好网络推广文案怎么写
  • 潜山做网站百度正版下载恢复百度
  • 怎么免费制作网站平台软文街怎么样
  • 做商城外贸网站百度竞价登录入口
  • 江苏茂盛建设有限公司网站怎么做好网站搜索引擎优化
  • wordpress心理教育网站全媒体运营师培训
  • 怎么在阿里巴巴网站做公司名称海外游戏推广平台
  • 淘宝网站网页设计说明网站是怎么建立起来的