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

企业网站建设基本要素专门做毕业设计的网站

企业网站建设基本要素,专门做毕业设计的网站,网络平台建设公司,找不到WordPressJMM大致描述#xff1a; JMM描述了线程如何与内存进行交互。Java虚拟机规范视图定义一种Java内存模型#xff0c;来屏蔽掉各种操作系统内存访问的差异#xff0c;以实现Java程序在各种平台下都能达到一致的访问效果。 JMM描述了JVM如何与计算机的内存进行交互 JMM都是围绕…JMM大致描述 JMM描述了线程如何与内存进行交互。Java虚拟机规范视图定义一种Java内存模型来屏蔽掉各种操作系统内存访问的差异以实现Java程序在各种平台下都能达到一致的访问效果。 JMM描述了JVM如何与计算机的内存进行交互 JMM都是围绕着原子性有序性和可见性进行展开的 JMM的主要目标是定义程序中各个变量的访问规则虚拟机将变量存储到内存和从内存取出变量这样的底层细节。此处的变量指在堆中存储的元素。 多线程的时候为什么容易出错 Java内存模型规定所有的共享变量都存储在主内存中而每条线程有自己的工作内存(本地内存)工作内存保存了共享变量的副本而不同内存又无法访问对方的工作内存所以如果线程在工作内存中修改了变量副本其它线程是无从得知的。 线程的传值均需要通过主内存来完成 主内存与工作内存如何交互 Java内存模型定义了8种操作来完成主内存与工作内存的交互细节虚拟机必须保证这8种操作的每一个操作都是原子的不可再分的。 lock: 作用于主内存的变量把变量标识为线程独占的状态 unlock: 与lock对应把主内存中处于锁定状态的变量释放出来释放后的变量才可以被其他线程锁定。 read: 作用于主内存的变量把一个变量的值从主内存传输到线程的工作内存便于随后的load使用。 load作用于工作内存的变量把read读取到的变量放入工作内存副本 use 作用于工作内存把工作内存的变量值传递给执行引擎每当虚拟机遇到一个需要使用到变量的值的字节码指令时将会执行这个操作。 assign: 作用于工作内存把执行引擎收到的值赋给工作内存的变量虚拟机遇到赋值字节码时候执行这个操作 store作用于工作内存把变量的值传输到住内存中以便随后的write使用 write作用于主内存把store操作从工作内存得到的值放入主内存的变量中。 JMM内存模型 执行上述8种基本操作的规则 不允许read和load,store和write操作之一单独出现。 不允许一个线程丢弃它最近的assign操作。即变量在工作内存中改变了账号必须把变化同步回主内存 一个新的变量只允许在主内存中诞生不允许工作内存直接使用未初始化的变量。 一个变量同一时刻只允许一条线程进行lock操作但同一线程可以lock多次lock多次之后必须执行同样次数的unlock操作 如果对一个变量进行lock操作那么将会清空工作内存中此变量的值。 不允许对未lock的变量进行unlock操作也不允许unlock一个被其它线程lock的变量 如果一个变量执行unlock操作必须先把次变了同步回主内存中。 这8种操作定义相当严禁实践起来又比较麻烦但是可以有助于我们理解多线程的工作原理。有一个与此8种操作相等的Happen-before原则。 Happen-before原则 这个是Java内存模型下无需任何同步器协助就已经存在可以直接在编码中使用。如果两个操作之间的关系不在此列并且无法从下列规则推导出来的话它们的顺序就没有保障虚拟机可以对他们进行任意的重排。 天然的happen-before 程序顺序原则一个线程内包装语义的串行性 volatile变量的写先发生于读这保证了volatile变量的可见性 锁规则unlock先与lock 传递性A 先于BB先于C那么A必然先于C 线程的start先于线程的每一个动作 线程的所有操作优先于线程的终结(Thread.join()) 线程的中断(interupt)先于被中断线程的代码 对象的构造函数执行先于finalize()方法 Java运行时数据区 JVM定义了一些程序运行时会使用到的运行时数据区其中一些会随着虚拟机启动而创建随着虚拟机退出而销毁。另外一些是与现场一一对应的这些线程对应的数据区会随着线程的开始和结束而创建和销毁。 这部分参考JVM规范 1. pc寄存器 可以支持多条线程同时允许每一条Java虚拟机线程都有自己的pc寄存器。任意时刻一条JVM线程之后执行一个方法的代码这个方法被称为当前方法(current method) 如果这个方法不是native的那么PC寄存器就保存JVM正在执行的字节码指令地址。 如果是native的那么pc寄存器的值为undefined pc寄存器的容量至少能保证一个returnAddress类型的数据或者一个平台无关的本地指针的值。 2. JVM Stack(虚拟机栈) 每一个JVM线程都有自己的私有虚拟机栈这个栈与线程同时创建用于存储栈帧(Frame)。 栈用来存储局部变量与一些过程结果的地方。在方法调用和返回中也扮演了很重要的角色。 栈可以试固定分配的也可以动态调整 如果请求线程分配的容量超过JVM栈允许的最大容量抛出StackOverflowError异常 如果JVM栈可以动态扩展扩展的动作也已经尝试过但是没有申请到足够的内存则抛出OutofMemoryError异常 3. Heap(堆) 堆是可以可供各个线程共享的运行时存储区域也是供所有类的实例和数组对象分配内存的区域。堆在JVM启动的时候创建。 堆所存储的就是被GC所管理的各种对象。 堆也是可以固定大小和动态调整的 实际所需的堆超过的GC所提供的最大容量那么JVM抛出OutofMemoryError异常。 4. Method Area(方法区) 也是各个线程共享的运行时内存区它存储每一个类的实例信息运行时常量池字段和方法数据构造函数和普通方法的字节码等内容。还有一些特殊方法。 方法区是堆的逻辑组成部分也在JVM启动时创建简单的JVM可以不实现这个区域的垃圾收集。 方法区也可固定大小和动态分配与堆一样内存空间不够那么JVM抛出OutofMemoryError异常。 5. Run-Time Constant Pool(运行时常量池) 在方法区中分配在加载类和接口到虚拟机之后就创建对应的运行时常量池。 它是class文件中每一个类或接口的常量池表的运行时表现形式。像字符串。Java的主要类型。 存储区域不够用时候抛出OutofMemoryError异常。 6. Native Method Stacks(原生方法栈或本地方法栈) JDK中native的方法System类和Thread类中有很多。使用C语言编写的方法这个也通常叫做C stack。 可以不支持本地方法栈但是如果支持的时候这个栈一般会在线程创建的时候按线程分配。 与栈的错误一样StackOverFlowError和OutOfMemeoryError. 为了让学习变得轻松、高效今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群928505736
http://www.zqtcl.cn/news/611152/

相关文章:

  • 网站开发一般需要多久菜谱网站模版
  • 基于jsp的电子商务网站开发最好的网站建设公司哪家好
  • 个人网站图片郑州技术支持seo
  • 先做网站还是先做app广州互联网
  • 租用网站的服务器wordpress手机加搜索
  • 做彩票网站怎么样才能让百度收录自己的网站
  • 廊坊网站建设技术托管seo怎么优化关键词排名培训
  • 抛丸机网站怎么做手机网站打不开的解决方法
  • 上海做网站的公司多少钱冷水江网站
  • 百度网站流量查询宣传片制作公司费用
  • 安徽炒股配资网站开发搭建平台载体
  • 中华建设杂志网站记者黑龙江省建设集团有限公司网站首页
  • 成都络迈品牌网站建设网站建设的行业资讯、
  • 英语网站大全免费赤峰市建设厅官方网站
  • 宁波网站建设熊掌号成都网络关键词排名
  • 织梦网站改版需要怎么做平台设计软件
  • 企业展示型网站网站建设设计
  • 增城网站建设服务网站建设制作设计公司佛山
  • 微网站套餐自媒体网站源码模板dede
  • 企业网站改版升级成都便宜网站建设公司
  • 广州公共资源建设工程交易中心网站新塘做网站
  • 数码港 太原网站开发公司iis 建立子网站
  • 做一个自己的网站需要什么商标设计网站猪八戒
  • 傻瓜式网站建设软件保险预约
  • 网站 备案规定自己做简单网站
  • 网站上怎么做支付接口南乐网站建设
  • 咸阳网站建设公司电话做个公司网站大概多少钱
  • 网站如何做关键词排名点子网创意网
  • 浙江建设培训考试网站河源东莞网站建设
  • 网站移动端做pc端的301跳转哪些网站是增值网