空间数据

Java内存分区

≯℡__Kan透↙ 提交于 2019-12-01 15:25:16
Java程序是交由JVM执行的,所以Java内存区域划分的时候事实上是指JVM区域划分 1、Java程序执行过程: 如图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作Runtime Data Area(运行时数据区)也就是我们常常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)。 一、运行时数据区域包括五部分 根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法区(Native Method Stack)、方法区(Method Area)、堆(Heap)。 如上图所示,JVM运行时数据区包括这五部分,在JVM规范中虽然规定了程序在执行期间运行时数据区应该包括这几部分,但是至于具体如何实现并没有做出规定,不同的虚拟机厂商可以有不同的实现方式。 二、运行时数据区的每部分到底存储了那些数据? 1、程序计数器 程序计数器(Program Counter Regist

内存管理

本小妞迷上赌 提交于 2019-12-01 13:20:26
内存 内存使用: 将程序放到内存中,PC指向开始地址,然后取指执行。 物理内存: 实际内存。 虚拟内存: 1. 每一个运行的进程,都会获得一个内存地址空间,这就是所谓的虚拟内存。 2. 这里面的所有地址都是虚拟的,和物理内存并不直接挂钩。 3. 这些虚拟地址所映射到的实际地址,可以是物理内存地址,也可以是页面文件的地址。 4. 如果物理内存小于这个虚拟地址的范围, 使用的时候可以将内存数据写入页面文件,通过清空内存数据,以提高物理内存的利用效率。 页面文件: 硬盘上的一块空间,在Windows下表现为一个文件。 这个页面文件存在的意义就是在物理内存被占用满以后, 将物理内存中的东西移动到硬盘上,腾出物理内存给需要的应用程序来使用。 内存管理 内存管理和虚拟内存管理: 内存管理包括: 程序装入等概念、 交换技术、 连续分配管理方式、 非连续分配管理方式(分页、分段、段页式)。 虚拟内存管理包括: 虚拟内存概念、 请求分页管理方式、 页面置换算法、页 面分配策略、 工作集、 抖动。 程序装入和链接 编译: 由编译程序将用户源代码编译成若干个目标模块。 链接: 由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。 装入: 由装入程序将装入模块装入内存运行。 重定向(修改程序中的相对地址): 1. 编译时重定位的程序只能放在内存固定位置 2.

mysql面试题目笔记 <非原创> (作为自己的参考资料)

a 夏天 提交于 2019-12-01 11:58:10
1.主键超键候选键外键是什么? 定义: 超键:在关系中可以唯一标识元组的属性集。 初始键:不包含多余属性的超键。 主键:用户选作元组标识的一个附加键程序主键。 外键:如果关系R中的属性集是关系L中的主键,那么该属性集为关系R的外键。 超键 在关系中能唯一标识元组的属性集称为关系模式的超键。 这样我们从示例中可以发现学号是标识学生实体的唯一标识。那么该元组的超键就为学号。 除此之外我们还可以把它跟其他属性组合起来,比如: ( 学号 , 性别 ) ( 学号 , 年龄 ) 这样也是超键。 初始键 排除多余属性的超键为预期键。 根据示例可知,学号是一个可以唯一标识元组的唯一标识,因此学号是一个附加键,实际上,指向键是超键的子集,而非(学号,年龄)是超键,但是它不是预设键。因为它还有了额外的属性。 主键 用户选择的预设键作为该元组的唯一标识,那么它就以此为主键。 简单的说,示例中的元组的扩展键为学号,但是我们将他作为该元组的唯一标识,那么学号就以此为主。 外键 外键是相对于主键的,某些在学生记录里,主键为学号,在成绩单表中也有学号插入,因此学号为成绩单表的外键,为学生表的主键。 总结 主键为预期键的子集,外部键为超键的子集,而外键的确定是相对于主键的。 2.数据库事务的四个特性: ACID:原子性,一致性,隔离性,持久性。 原子性:数据库的所有操作要么完成,要么全部不完成

数组

吃可爱长大的小学妹 提交于 2019-12-01 09:53:59
第一章 数组定义和访问 数组概念 在Java中有常量数据,而一般情况下,常量数据都需要保存在变量空间中。 假设有100 这个数据需要在程序中先存储起来: int a = 100; 假设有100,200 这个数据需要在程序中先存储起来: int a = 100; int b = 200; 问题继续升级,有大量的整数需要保存,怎么解决? 第一种解决方案:有多少个数据,就开辟多少个空间,把每个值保存到空间中。 这种解决方案,最后肯定可以把所有的数据保存起来,但是程序书写十分麻烦。常量数据最后肯定需要保存在变量空间中,在前面学习的变量,每个变量空间中在特定的时候,只能保存一个值。无法一次性保存多个数据。 Java中给我们提供另外一种方案: 一次性可以开辟出一组空间,然后这些空间中可以保存多个数据。而我们把这一组空间统称为数组。 那么数组到底是什么呢?有什么特点呢? 数组:数组表示的一串 连续 的存储空间。每个空间中都可以保存一个数据。当我们需要操作的时候,不要去面对单个空间,而直接面对这个整体的连续的存储区域。 注意:数组既可以存储基本数据类型,也可以存储引用数据类型。 数组定义格式 方式一 格式: 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]; int[] arr = new int[5]; 在内存中一次开辟5个连续的空间,每个空间都是int类型

【数据结构】数组

不打扰是莪最后的温柔 提交于 2019-12-01 09:53:50
数组是一种线性表数据结构,它用一组连续的内存空间,来存储具有相同类型的数据。 由于有了连续的内存空间和相同类型的数据,才能实现根据下标的“随机访问”。 为了保持内存数据的连续性,导致数组在插入删除这来个操作的时候效率较低。 来源: https://www.cnblogs.com/guangluwutu/p/11676952.html

操作系统——文件管理

此生再无相见时 提交于 2019-12-01 08:55:34
目录 一、文件系统 1.1文件与文件系统 1.2文件的逻辑结构 1.3文件目录 1.4文件共享 1.5文件保护 二、文件系统实现 2.1文件系统层次结构 2.2目录实现 2.3文件实现 三、磁盘组织与管理 3.1磁盘的结构 3.2磁盘调度算法 3.3磁盘的管理 一、文件系统 1.1文件与文件系统 1、文件 1)数据项 在文件系统中,数据项是最低级的数据组织形式。分为两种类型: 基本数据项。描述一个对象某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,又称字段。除了数据名还有数据类型 组合数据项。由若干基本数据项组成 数据项的名字和类型共同定义了数据项的“型”,表征一个实体在数据项上的数据称为“值” 2)记录 记录是一组相关数据项的集合,用于描述一个对象在某方面的属性 一个记录应包含哪些数据项取决于需要描述对象的哪个方面 唯一标识一个记录的一个或多个数据项称为 关键字 3)文件 文件是具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件 有结构文件由若干个相关记录组成,无结构文件看成是一个字符流 文件是文件系统中最大的数据单位 文件属性包括:文件类型、文件长度、文件的物理地址、文件的建立时间 2、文件系统 1)定义 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法;也指用于存储文件的磁盘或分区,或文件系统种类

JVM原理与深度调优

送分小仙女□ 提交于 2019-12-01 08:10:20
什么是jvm jvm是java虚拟机 运行在用户态、通过应用程序实现java代码跨平台、与平台无关、实际上是"一次编译,到处执行" 1.从微观来说编译出来的是字节码!去到哪个平台都能用,只要有那个平台的JDK就可以运行!字码好比是一个人,平台好比为国家,JDK好比这个国家的语言!只要这个人(字节码)有了这个国家的语言(JDK)就可以在这个国家(平台)生活下去。 2.JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。 3.Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 4.java编译出来的是一种“java字节码”,由虚拟机去解释执行。 而c和c++则编译成了二进制,直接交由操作系统执行。 5.所谓的一次编译、到处执行,即只需在一个地方编译,在其他各个平台下都可以执行。 6.与平台无关指的是JAVA只运行在自己的JVM上,不需要依赖任何其他的底层类,所以和操作系统没有任何联系,平台是说运行的系统 内存结构图 class文件 class文件径打破了 C 或者C++等语言所遵循的传统

Android系统性能调优工具介绍

╄→尐↘猪︶ㄣ 提交于 2019-12-01 04:12:06
经作者授权,发表Tieto某青年牛的一篇《程序员》大作。 Android 系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题。而解决系统性能问题的几个主要步骤是: 测评:对系统进行大量有针对性的测试,以得到合适的测试数据。 分析系统瓶颈:分析测试数据,找到其中的hotspot(热点,即bottleneck)。 性能优化:对hotspot相关的代码进行优化。 由上述步骤可知,性能优化的目标对象是 hotspot 。如果找到的 hotspot 并非真正的热点,则性能优化的结果必然是事倍功半甚至竹篮打水一场空。所以,作为 Android 性能调优相关知识的第一部分,本篇首先将向读者介绍 Android 平台中三个重要的性能测试工具,它们能很好得帮助开发者找到 hotspot 。 一 Traceview 介绍 1.1 Traceview 简介 Traceview 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot 。 Traceview 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。二者的用法如下: 开发者在一些关键代码段开始前调用Android SDK中Debug类的startMethodTracing函数

SGI-STL简记(六)-序列容器(vector)

强颜欢笑 提交于 2019-12-01 02:03:37
stl_vector.h : vector:可随机访问元素的序列容器,从后插入或删除在常量时间内完成,从首部或中间则需线性时间内完成; _Vector_alloc_base:vector分配基类模板;模板参数分别为数据类型T,分配器类型_Allocator,以及一个bool标识_IsStatic(用于区分是否为标准分配器或SGI分配器); 数据成员: _M_data_allocator:分配器对象; _M_start:保存申请的缓冲区首地址(等同于容器元素的首地址); _M_finish:保存容器内容长度时的尾地址; _M_end_of_storage:保存申请的缓冲区尾地址; 成员函数: 构造函数:分配器引用allocator_type类型以初始化_M_data_allocator; get_allocator:获取分配器对象_M_data_allocator; _M_allocate:通过分配器对象_M_data_allocator分配大小为n个的元素类型大小内存空间; _M_deallocate:释放指定数据元素类型指针地址大小为n个数据元素类型大小的内存空间; 此外还提供特化版本_Vector_alloc_base<_Tp, _Allocator, true>,该分配模板基类内部不再使用分配器对象,而是直接使用simple_alloc的静态成员函数进行分配管理;

mongodb与mysql相比的优缺点

大兔子大兔子 提交于 2019-12-01 01:21:41
与关系型数据库相比,MongoDB的优点: ①弱一致性(最终一致),更能保证用户的访问速度: 举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值。这在某些情况下,例 如通过ATM查看账户信息的时候很重要,但对于Wordnik来说,数据是不断更新和增长的,这种“精确”的保证几乎没有任何意义,反而会产生很大的延 迟。他们需要的是一个“大约”的数字以及更快的处理速度。 但某些情况下MongoDB会锁住数据库。如果此时正有数百个请求,则它们会堆积起来,造成许多问题。我们使用了下面的优化方式来避免锁定: 每次更新前,我们会先查询记录。查询操作会将对象放入内存,于是更新则会尽可能的迅速。在主/从部署方案中,从节点可以使用“-pretouch”参数运行,这也可以得到相同的效果。 使用多个mongod进程。我们根据访问模式将数据库拆分成多个进程。 ②文档结构的存储方式,能够更便捷的获取数据。 对于一个层级式的数据结构来说,如果要将这样的数据使用扁平式的,表状的结构来保存数据,这无论是在查询还是获取数据时都十分困难。 举例1: 就拿一个“字典项”来说,虽然并不十分复杂,但还是会关系到“定义”、“词性”、“发音”或是“引用”等内容。大部分工程师会将这种模型使用关系型数据库 中的主键和外键表现出来,但把它看作一个“文档”而不是“一系列有关系的表