字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07 iconst_4 将int型4推送至栈顶 0x08 iconst_5 将int型5推送至栈顶 0x09 lconst_0 将lo
(页表的引出) 1.虚拟存储技术是操作系统管理进步的体现(可怜的进程不知道自己已经被画饼了) 虚拟内存是计算机系统内存管理的一种技术。 进程无法直接接触物理内存,只能通过虚拟地址依靠页表映射物理地址的方式,来间接访问物理内存。 因为虚拟地址是包含所有的地址的,也就是4GB的空间,虽然是虚拟的,但是进程可以使用呀,所以如果进程在虚拟地址中访问了某个本不该属于当前进程的地址,接下来在通过页表映射到物理地址的这个阶段中,页表就会拦截进程非法访问地址的请求 ,所以这时候虚拟地址空间和页表也就随之而生了。 所以操作系统为了保证进程的独立性,通过虚拟地址空间,再到页表,让不同的进程使用的同一虚拟地址,能够映射到不同的物理内存处。 3.
DROP大表操作异步化 在日常运维过程中,当删除一个大表时(如一个20G的ibd文件的大表),在删除这个大文件的过程中,文件系统IO达到峰值,持续好几秒,这样会导致文件系统无法响应其他数据库实例的IO请求 , 无须重启实例 具体使用: 1)设置异步删除大表的配置路径参数 2)设置打开异步删除大表控制参数 2. 这种情况下,对于业务逻辑中有使用定期复制数据创建表或创建临时表的场景,就不太友好了。 隐藏主键功能 很多TencentDB for MySQL客户在设计之初遗漏了给表建立主键,当数据量增长到一定程度后,无主键表会导致很多性能问题: 影响最大的就是主从复制问题,InnoDB引擎表在无主键情况下 TXSQL针对这个场景,对于没有主键的表,会自动增加一个虚拟隐藏列主键。
虚拟机磁盘 学校机房都有保护卡:重启计算机自动还原到做保护时的状态 防止虚拟机快照数据还原,即给虚拟机再添加一块磁盘(设置为永久写入) 有快照的磁盘模式不能改为'独立' 有快照的虚拟机不能拓展虚拟磁盘的大小 服务:两种:对本地系统提供服务,对网络中的计算机提供服务 services.msc 注册表: Regedit regedit.exe regedt32 Regedt32.exe 注册表是Windows 打不开注册表:没有管理员权限、注册表被锁 int文件 .ini文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows 但自从Windows95的推出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中 开始时用于WIN3.1下面,WIN95用注册表代替,[]及后面的内容表示一个节,相当于注册表中的键。
页表转换寄存器描述符 1.1,页表/页目录结构 基于前言中的内核配置,内核采用39位虚拟地址,因此可寻址范围为2^39 = 512G,采用(linux 默认为五级页表,另外还有PUD,P4D,由于本文只配置三级 页表都有29=512个页目录项/页表项,使用4k页面大小,212 = 4096,因此虚拟地址中offset字段占12位,每一个pte页表项可以映射4k个地址空间,共有512x512x512个pte页表项 2.3 用户/内核PGD表基地址 基于之前的分析可知,用户虚拟地址和内核虚拟地址转换为物理地址的时候使用不同的页表基地址寄存器(TTBRx),因此他们的转换是基于不同的全局页目录表PGD。 : MMU在转换虚拟地址的时候遵循以下步骤(基于以上配置): 1,如果虚拟地址bit[63:40]都为1,则使用TTBR1作为第一级页目录表基地址,当bit[63:40]都为0时,使用TTBR0作为第一级页目录表基地址 6,PMD包含512个64位PTE表,从虚拟地址中获取VA[30:21]进行索引,PMD+(index[30:21]8),MMU从PMD表项中读取PTE表的基地址; 7,MMU检查PMD目录项的有效性(
但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的。 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成《Java虚拟机原理图解》 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的 ------字段表field_info结构体的定义 ? 针对上述的字段表示,JVM虚拟机规范规定了field_info结构体来描述字段,其表示信息如下: ? ? ,表明field_info还有一个属性表; 6.属性表名称索引中的值为0x0007,指向常量池中的第7项,为“ConstantValue”,表明这个属性表的名称是ConstantValue,即属性表的类型是 》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的 作者的话 本文是《Java虚拟机原理图解》系列的其中一篇,如果您有兴趣,请关注该系列的其他文章~
但是,如果您想要一个像宠物一样的行为的虚拟宠物,或者一个像人类一样行事的虚拟人类,你必须对个性进行编码。直到现在,这已经超出了我们的能力范围。 虚拟宠物,虚拟人 对于刚刚进入工作场所或有一份需要大量旅行的工作的人来说,其中一个问题就是,时间表使得有宠物陪伴变得不切实际。虽然有些人带着宠物旅行,但这样做仍然是有问题的。 如果你能有一只只有你能看见的虚拟宠物呢?它可能永远与你在一起。 您甚至可以重新创建自己,让虚拟克隆成为您自己最好的版本。这可能是你完美的顾问,因为你可能会相信这是你自己的一个版本。更何况,这个虚拟版本的你可以超越你的生活,只要技术存在。 它把纽曼弘变成了一个虚拟的名人影响者,完全渲染和基于一个真实的人,这是一个努力创造基于真实的人不朽的化身之一。 这些努力正在创造我们需要的内容,用逼真的虚拟人填充地球。
3.每个进程都有页表,页表在“进程切换”如何跟踪 三.地址空间&页表的作用机理 1.地址空间&页表的基本原理 2.【页表实验1】探究为什么一对父子进程,同样虚拟地址,读取数据不同? (即虚拟空间) 结论:进程地址空间并不是物理内存,而是 虚拟内存 的一部分(虚拟地址,不具备存储能力) 进程地址空间本质上是一种 抽象概念 ,用于描述进程如何看待和使用内存。 1.页表基本概念 引入:进程地址空间即虚拟地址,不具备存储能力 因此操作系统OS会对每个进程维护一张 映射表, 对应着虚拟地址和物理地址 ,这就是 页表 页表是一种特殊的数据结构,它位于系统空间的页表区 三.地址空间&页表的作用机理 1.地址空间&页表的基本原理 如图: 页表的主要作用是将虚拟地址空间映射到物理内存空间,实现虚拟地址到物理地址的转换。 2. 【页表实验1】探究为什么一对父子进程,同样虚拟地址,读取数据不同?
,用于存放将虚拟地址映射至物理地址的标签页表条目 其搜索关键字为虚拟内存地址,其搜索结果为物理地址。 如果请求的虚拟地址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址访问存储器 如果请求的虚拟地址不在TLB中,就会使用标签页表进行虚实地址转换,而标签页表的访问速度比 有些系统允许标签页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间。 1.4.1.2 影子页表 从软件实现GVA到GPA的转换,由VMM将影子页表载入物理上的内存管理单元(MMU) 缺点:技术复杂、内存开销大 场景复现: 假如现在有A和B两个GuestOS CPU是轮流分别处理它们的请求当 Tables):由AMD推出的用于提高MMU性能的解决方案 EPT:Intel推出的忆体分页虚拟化机制 Intel的CPU提供了EPT (Extended Page Tables,扩展页表)技术,
虚拟DOM作为目前流行的DOM操作思想,被广泛用在react中,这套设计的确在用户体验上带来了显著提升。下面我们来浅析一下这个东西,一步步看下去,希望你能有所收获。 此时,你可以把这里的ulElement理解为VirtualDOM(虚拟DOM)。 虚拟DOM是什么? 下面我们具体讲解下虚拟DOM的核心实现思路。 最后,第三步是渲染新生成的差异化虚拟DOM。 渲染新生成的差异化虚拟DOM 经过差异化比较后,你能获取到发生改变之后的“差异化VirtualDOM",”差异化类型“和”差异化位置“。 总结一下,虚拟DOM最本质的区别是使用Javascript对象替代了DOM对象树,从而提升页面渲染性能。 参考:w3c
但是在我们常见的某些应用,比如Excel的表格中,我们发现表并不一定是线性表,Excel中的表就明显是二维的结构 ? 那么在数据结构中,我们会使用这种广义上的表吗? 答案是会,我们也会、或者说我们也能使用这样的非线性表。其实我们早就已经在使用这样的非线性表、广义表了,那就是多维数组。不难发现二维数组就可以抽象成Excel当中的表的样子。 可能会有人发现一个小小的问题,就是为什么我又将广义表叫作多重表呢? 这其实只是一个理解角度的不同而带来的不同叫法罢了,多重表这种叫法想表达的主要意思是表中的元素可以是另一个表,而这另一个表中的元素又可以是一个表,相当于“一重又一重”的表,所以叫多重表。 对于这样的应用场景,显然需要使用到一个多重表,准确的说是一个二维的多重表,其中一维表示课程,另一维表示学生,就像下面的图。那么提到二维的多重表,我们脑海中最先浮现的应该就是二维数组了? ?
出现这一现象部分是由于不少公司开始生产可以实现虚拟现实的头戴设备,比如三星的虚拟现实装备、谷歌纸板虚拟现实眼镜等等。谷歌纸板甚至实现了用智能手机辅助实现虚拟现实装备。 人类未来将如何使用虚拟现实技术? 目前有诸多不同的虚拟现实技术:比如,人们可以使用固定于头部的显示器,或者进入到一间围墙投射着虚拟环境的房间,也可以通过穿戴智能手套将一举一动映射于虚拟环境,还可以在虚拟环境中挥舞操作杆亦或是轻轻一点捕捉虚拟环境里的物体 同样的两种可能也可以实现在声音的虚拟中,虚拟世界的声音既可以是现实声音的记录,也可以人为创造出符合虚拟世界的声效。 ? 图5 虚拟世界三维的照片化呈现(谷歌街景) ? “我的世界”目前还主要在二维显示屏中呈现,还可以为其添加更多的虚拟现实技术,或许可以营造出一个完全沉浸式的虚拟世界,使用户在其中拥有虚拟的躯体,以实现虚拟环境中的行走、捡拾物体并向其他用户展示,诸如此类的开发将会是虚拟现实技术的一大进步 因此虚拟世界和现实世界迥然不同。两种虚拟现实的可能,不论是照片化呈现还是电脑模拟的虚拟世界,都有很多种可能。
表的高级操作:倾斜表&事务表 Hive倾斜表(Skewed Tables) 什么是倾斜表? 对于一列或多列中出现倾斜值的表,可以创建倾斜表(Skewed Tables)来提升性能。 但如果表A是Skewed Tables,A.id=1被设置为倾斜值,那么在执行表A与表B的Join操作时,会自动进行以下优化: 将B表中id=1的数据加载到内存哈希表中,分发到A表的所有Mapper任务中 set hive.exec.dynamic.partition.mode=nonstrict; 事务表的创建 首先对事务表进行创建,首先需要是ORC表,然后进行分桶,并在表中添加属性’transactional 假设有一张表名为t,分桶数量只有2的表,那它的文件结构应该是下面这种形式。 对于事务表,可以查看所有正在进行的事务操作: SHOW TRANSACTIONS; 事务表的压缩 随着对事务表的操作累积,delta文件会越来越多,事务表的读取会遍历合并所有文件,过多的文件数会影响效率
常用于分库分表 1、批量删除 declare @outter int declare @inner int declare @tablePrefix varchar(30) declare @tableName delete from '+@tableName+'') set @inner=@inner+1 end set @inner=0 set @outter=@outter+1 end 2、批量建表
账户表/余额表/消费储蓄表 此表适用于购物车等金钱来往账面等等。
文章目录 外部表 内部表 分区表 分桶表 外部表 创建数据库 create database myhive; 选择数据库 use myhive; 创建外部表 ( external) create string) row format delimited fields terminated by ‘\t’; 加载数据 ( /export/servers/hivedatas/techer .csv 数据在虚拟机上地址 format delimited fields terminated by ‘\t’; 加载数据 ( /export/servers/hivedatas/student .csv 数据在虚拟机上地址 分桶表 是在已有的表结构之上新添加了特殊的结构 开启hive的桶表功能 set hive.enforce.bucketing=true; 设置桶(reduce)的个数 set mapreduce.job.reduces load data local inpath ‘/export/servers/hivedatas/course.csv’ into table course_common; 在基本表中查询数据插入到分桶表
事实表与维度表 前文介绍了一维表和二维表的异同及相互转换 今天再来解释一下事实表与维度表 先来看下表。回忆下,这是一维表二维表? 单行记录就能锁定全部信息,个别列存在数量重复,没二话,显然是一维表 那是不是结账系统里的订单表就是这副样子? 你还别笑,不管是谁第一次接触表格,可不就这样的修改的吗 但系统里的一维表,往往有成千上万行,靠人工查找修改,无疑愚公移山 那“查找替换”呢? 这里只是打个花式比喻,不必较真) 上图可见,流水表里把大量汉字换成字母/数字编码,将对表格大小起到重要作用 修改信息时也只要在维度表定位、变更一条记录即可,而不必在流水表里进行全表扫描。 ,那“事实表”也就不难理解了 事实表:表格里存储了能体现实际数据或详细数值,一般由维度编码和事实数据组成 维度表:表格里存放了具有独立属性和层次结构的数据,一般由维度编码和对应的维度说明(标签)组成 现实工作中
数据迁移和灰度发布:大厂经常需要做数据迁移、分库分表,如果表强绑定外键,迁移会很麻烦。 跨库/分库问题:很多业务表是分库分表的,数据库层面无法直接实现跨库外键约束。 程序层面维护关联 大厂一般采用 程序约束 或 应用逻辑约束 来维护表关联: 在 ORM 或 DAO 层进行检查:插入子表前,先检查父表是否存在对应记录。 事务控制:通过程序事务保证操作的原子性,例如新增用户和用户详情表,同时提交事务。 定时校验/修复:有些数据表会有离线任务定期扫描孤儿数据或异常数据并修复。 实际开发规范示例 以阿里或腾讯的开发规范为例: 数据库表设计通常不强制添加外键约束,但表注释里会注明逻辑关联。 对重要业务表(比如财务账单、支付记录等),会有应用层保证一致性。 外键可能只在小型表或管理型数据表中用作文档化参考,不作为严格约束。
根据在I/O路径中实现虚拟化的位置不同,虚拟化存储可以分为主机的虚拟存储、网络的虚拟存储、存储设备的虚拟存储。根据控制路径和数据路径的不同,虚拟化存储分为对称虚拟化与不对称虚拟化。 三层模型 根据云存储系统的构成和特点,可将虚拟化存储的模型分为三层:物理设备虚拟化层、存储节点虚拟化层、存储区域网络虚拟化层。 这个虚拟化层由存储节点虚拟模块在存储节点内部实现,对下管理按需分配的存储设备,对上支持存储区域网络虚拟化层。 这个虚拟化层由虚拟存储管理模块在虚拟存储管理服务器上实现,以带外虚拟化方式管理虚拟存储系统的资源分配,为虚拟磁盘管理提供地址映射、查询等服务。 利用虚拟化技术,可以在统一的虚拟化基础架构中,实现跨数据中心的虚拟化管理。 政府信息系统:政府数据存储系统的建设正受到前所未有的重视。
虚拟地址空间—–分配给进程的虚拟内存 虚拟地址—–在虚拟内存中指令或数据的位置,该位置可以被访问,仿佛它是内存的一部分。 保护位:读/可读写 通常,页表项是硬件设计 ---- 关于页表 32位虚拟地址空间的页表规模 如果页面大小为4k;页表项大小为4字节,则一个进程地址空间有2^20页,其页表需要占1024页(页表页 ) 64位虚拟地址空间 –页面大小为4k; 页表项大小为8字节,则一个进程的页表规模:就达到了 32,000TB 页表页在内存中若不连续存放,则需要引入页表页的地址索引表-> 页目录(Page Directory) 注意 二级页表可以表示4G的虚拟地址空间 ---- 引入反转(倒排)页表 地址转换 从虚拟地址空间出发: 虚拟地址->查页表->得到页框号->形成物理地址 每个进程一张页表 解决思路 从物理地址出发,系统建立一张页表 页表项记录进程i的某虚拟地址(虚页号)与页框号的映射关系 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。