您好、欢迎来到现金彩票网!
当前位置:2019跑狗图高清彩图 > 先行指令站 >

java虚拟机内存模型

发布时间:2019-07-07 18:06 来源:未知 编辑:admin

  屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。他是一种规范或规则,通过这种顶一个程序各个变量的访问方式。

  Derect Memory:jvm中其实并不存在该内存,他既不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是该内存总是在被频繁的使用。

  在jdk中有一个输入输出类NIO,其工作本质就是通过通道和缓存的I/O的方式,他可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

  本机的直接内存分配不收到java堆的大小的吸纳子,但是既然是内存,肯定会受到本机总内存大小的及处理器寻址空间的限制。

  内存的大小可以通过 -Xmx等参数来进行调整,但是经常忽略直接内存,是的各个内存区域总和大于物理内存限制,导致动态扩展出现oom的现象。

  通过参数“-XX:MaxDirectMemorySize”指定了直接内存的最大值,其超过指定的最大值时,也会抛出内存溢出异常。

  线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程堆变量的所有的操作都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法访问对方的工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,线程,主内存,工作内存三者存在紧密联系。

  作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定

  作用于主内存变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用

  作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中

  作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作

  作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作

  作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作。

  作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中

  如果要把一个变量从主内存中复制到工作内存,就需要按顺寻地执行read和load操作,如果把变量从工作内存中同步回主内存中,就要按顺序地执行store和write操作。Java内存模型只要求上述操作必须按顺序执行,而没有保证必须是连续执行。也就是read和load之间,store和write之间是可以插入其他指令的,如对主内存中的变量a、b进行访问时,可能的顺序是read a,read b,load b, load a。Java内存模型还规定了在执行上述八种基本操作时,必须满足如下规则:

  不允许一个线程丢弃它的最近assign的操作,即变量在工作内存中改变了之后必须同步到主内存中。

  不允许一个线程无原因地(没有发生过任何assign操作)把数据从工作内存同步回主内存中。

  一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load或assign)的变量。即就是对一个变量实施use和store操作之前,必须先执行过了assign和load操作。

  一个变量在同一时刻只允许一条线程对其进行lock操作,lock和unlock必须成对出现

  如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值

  如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作;也不允许去unlock一个被其他线程锁定的变量。

  对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作)。

  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

  可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。对于可见性,Java提供了volatile关键字来保证可见性。

  在Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。指令重排是为了优化程序的运行。如果不懂 可以学一下操作系统这门课程。

  在Java里面,可以通过volatile关键字来保证一定的“有序性”(具体原理在下一节讲述)。另外可以通过synchronized和Lock来保证有序性,很显然,synchronized和Lock保证每个时刻是有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。

  另外,Java内存模型具备一些先天的“有序性”,即不需要通过任何手段就能够得到保证的有序性,这个通常也称为 happens-before 原则。如果两个操作的执行次序无法从happens-before原则推导出来,那么它们就不能保证它们的有序性,虚拟机可以随意地对它们进行重排序。

  程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作

  volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作

  传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C

  线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作

  线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生

  线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行

  对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始

  0.JVM运行时数据模型Java虚拟机的内存模型分为两部分:一部分是线程共享的,包括Java堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。1.程序计数器和本...博文来自:AndyCat的知识库

  龙果学院深入理解Java虚拟机(Jvm性能调优+内存模型+虚拟机原视频Java虚拟机视频教程一套不错的视频,课程一共有110课,课程目录较多只展示部分出来,喜欢的朋友下载看下课程目录(课程较多,只展示...博文来自:的博客

  JVM是整个Java程序运行的母体,但是大部分的开发者并不清楚JVM的执行流程。同时虽然都知道Java提供有垃圾收集机制,但是该如何进行合理的GC处理?以及该使用的GC策略也不清楚,为此本课程专门针对...博文来自:yootk的博客

  首先介绍一下java虚拟机规范所规定的java内存模型:1.程序计数器(java内存模型中唯一不会发生oom的空间),负责记录正在执行的虚拟机字节码地址,如果是native方法,则计数器值为空,线程私...博文来自:的博客

  一、jvm规范中的内存划分5个部分:   1、程序计数器。(唯一没有异常出现的地方)   2、java虚拟机栈。   3、本地方法栈。   4、方法区。   5、堆。二、变量分类:类变量:独立于方法之...博文

  读《深入理解Java虚拟机》,感觉里面叙述的不错,这里是本人一些对于此书描述的知识点的总结。Java运行时内存模型:这里是原书的一个图,虚拟机栈是Java方法调用的时候用的数据结构.例如:public...博文来自:oneslide

  java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的内存区域,如下图所示     程序计数器(ProgramCounterRegister):是一块较小的内存空间,他可以看做是...博文来自:西帝

  几个概念在开始之前,先了解几个概念。1.1.作用域作用域是指当前正在执行的代码能够访问到变量的范围;每个函数都有各自的作用域,存储函数所有的局部变量;1.2.变量对象变量对象用于存储函数各自的局部变量...博文来自:大闲人柴毛毛

  方法区是JVM的规范,而永久代是这种规范的一种实现1.8版本用元数据区取代了1.7版本及以前的永久代。元数据区和永久代本质上都是方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中...博文来自:不羁朔风的博客

  基本概念JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操...博文来自:海蓝星上

  多核CPU运行时,每个CPU都会有自己的Cache,同样jvm运行时,每个线程的私有栈在使用共享数据时,都会现将共享数据拷贝进栈顶进行运算,这份数据其实是副本,因此也同样存在多个线程修改一个内存单元的...博文来自:wanglei0622的专栏

  系统故障排查方法 1.操作系统层面: 1.1.cpu使用率过高(用户程序忙,死循环等),2).sy高(内核忙,线).wio高(写入量过大等)像redis,es,memc...博文来自:记录点点滴滴

  开始工作任务完成之余学习jvm,边看视频会边记录所学,想要jvm视频学习资源的请加微信,资源来之不易,发一块钱红包领取 ...博文来自:JavaCoder_juejue的博客

  根据JVM规范,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。从JDK1.8起,HotSpot已经没有“PermGenspace”这个区间了,取而代之是一个叫做Metaspac...博文来自:paddix的博客

  30+个视频+深入理解Java虚拟机(jvm优化+内存模型+虚拟机原理)

  英文版 Java内存模型,涉及到Java 多线程编程,java虚拟机等,从而了解java最核心的部分

  龙果学院 叶子猿 深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)

  龙果学院 叶子猿 深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)

  深入理解Java虚拟机视频教程,其中包括讲解了jvm性能调优+内存模型+虚拟机原理。

  深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)网盘链接

  jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机(龙果学院:叶子猿老师的 总共110集视频教程)

  深入理解java虚拟机视频教程,jvm原理,java虚拟机,jvm性能调优,内存模型,gc工作原理,内存分配,类的加载等等视频教程

  有二部分内容 1. Java并发编程原理与实战 2. 深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)

  内存划分图:  1.   程序计数器线程私有。不会内存溢出。记录当前线程持续执行的位置(记录虚拟机字节码指令的地址)。改变计数器的值来执行下一条指令。 2.   Java虚拟机栈线程私有。生命周期和线...博文来自:shennyuan的博客

  概述    Java的虚拟机使Java的成为了一种跨平台的语言,Java的不直接与操作系统接触,而是通过虚拟机这个中间桥梁,通过JVM与底层接触。不同的系统有不同的JVM,但是所有的这些JVM都完美的...博文来自:fanxing1964的博客

  从功能上来看,一个高级语言虚拟机主要分为两部分,一个是解释器部分,用来运行高级语言编译生成的ByteCode;还有一部分则是Runtime运行时,用来负责运行时的内存空间开辟、管理等等。JAVA虚拟机...博文来自:ShareUs的专栏

  一、JDK1.8JVM内存模型概览这里介绍的是JDK1.8JVM内存模型。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与...博文来自:bruce128的专栏

  帐号相关流程注册范围n企业n政府n媒体n其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行nsql仅可执行DDL、select、DML等...博文来自:Ape55的博客

  对象的创建和销毁在一定程度上会消耗系统的资源,虽然jvm的性能在近几年已经得到了很大的提高,对于多数对象来说,没有必要利用对象池技术来进行对象的创建和管理。但是对于有些对象来说,其创建的代价还是比较昂...博文来自:赶路人儿

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  记得很早以前公司项目中添加过移动支付这一块, 包括微信,支付宝,银联等第三方的整合。 但是后来懒于总结就没留下什么, 最近公司项目打算添加,所以打算简单总结一下,记上一笔以备将来使用。 毕竟第三方的支...博文来自:samuelnotes的专栏

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

http://deafbook.net/xianxingzhilingzhan/291.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有