内存类型

秋招开始了,读《深入理解JVM虚拟机》总结

回眸只為那壹抹淺笑 提交于 2019-11-30 05:47:38
重读 JVM 秋招开始了,前面由于做别的事耽误了半个月,以前学的东西不用就很容易忘记。所以,这次重新阅读《深入理解 JVM 虚拟机》时,想做一个记录。将碎片的知识整合,方便自己以后阅读,同时也和大家一起分享。内容中会添加我自己的理解,其中如果有错误,欢迎大家指正。 1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 1.1.2 Java 虚拟机栈 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储 局部变量表 、 操作数栈 、 动态链接 、 方法出口 等信息。每一个方法从调用直至执行结束

指针

本小妞迷上赌 提交于 2019-11-30 05:42:25
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占 用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编 号是唯一的,根据编号可以准确地找到某个字节。 我们将内存中字节的编号称为地址(Address)或指针(Pointer)。 #include<stdio.h> int main(){ int i = 100; char ch[20] = "xz"; printf("%#x , %#x\n",&i,ch); return 0; } 运行结果:0x10ffd98 , 0x10ffd7c %#X 表示以十六进制形式输出,并附带前缀 0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址; str 本身就表示字符串的首地址,不需要加&。 C 语言中有一个控制符%p,专门用来以十六进制形式输出地址,不过 %p 的输出格式并不统一,有的编译器带 0x 前缀,有的不带,所以此处我们并没有采用。 指针定义: 数据在内存中的地址也称为指针。 指针变量 : 如果一个变量存储了一份数据的指针,我们就称它为指针变量。 地址 = 指针 指针变量 = 变量 + 地址 (将地址赋给变量就是指针变量) 定义指针变量: 定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号*,格式为

数据类型

独自空忆成欢 提交于 2019-11-29 22:27:24
数据类型,Java是一种强类型语言,针对每一种数据都给出了明确的数据类型 数据类型分为:   A:基本数据类型(4类八种)     在早期,计算机内存比较少,程序员需要节省内存,所以创建了4种整形,但是现在已经不用考虑内存问题,基本都用in     注意:       A:整数默认为int类型,浮点数默认是double类型       B:定义long类型数据的时候,需要加L或者l,建议加L,因为小写的l看起来像1       C:定义float类型的时候,要加F或者f,建议加F         B:引用数据类型(类,接口,数组) 来源: https://www.cnblogs.com/dajingshao/p/11537915.html

c/c++常见面试题(一)

佐手、 提交于 2019-11-29 21:39:57
0.static、const、volatile的作用和区别 static: https://www.cnblogs.com/Manual-Linux/p/8870038.html 第一 、在修饰变量的时候,static修饰的静态局部变量只执行一次,之后再初始化无效。而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 第二 、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 第三 、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0 const: 1.修饰的变量只读,不可改变 2.防止意外修改,减少bug 3.可以节省空间,避免不必要的 内存分配 volatile: 告诉编译器这个变量随时可变,不需要优化 1.请问全局变量和局部变量能否重名 能,局部会屏蔽全局。要用全局变量,需要使用"::" 2. 用三目运算符(X)>(Y)?(X):(Y)宏定义实现比较两个数的大小 #define MAX(X, Y) ((X)>(Y)?(X):(Y)) 3.malloc的了解 malloc是动态内存分配,是用户动态申请系统分配指定字节的内存块的函数。返回类型是 void* 类型 对应free,

MySQL索引原理及SQL优化

こ雲淡風輕ζ 提交于 2019-11-29 20:51:32
目录 索引(Index) 索引的原理 b+树 MySQL如何使用索引 如何优化 索引虽好,不可滥用 如何验证索引使用情况? SQL优化 explain查询执行计划 id select_type table type possible_keys key key_len ref rows Extra 优化数据库结构 优化数据大小 优化数据类型 索引(Index) MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 索引的原理 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。表越大,成本越高。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间寻找的位置,而无需查看所有数据

关于Python中的深浅拷贝

99封情书 提交于 2019-11-29 19:33:48
之前一直认为浅拷贝是拷贝内容的第一层,但是不开辟内存,只是增加新的指向原来的内容;深拷贝是拷贝是拷贝每一层并开辟内存。 其实这个是不严谨的不正确的。 从以上可以看出,浅拷贝中当时可变类型的时候,内存是发生了变化的,也就是开辟了内存,但是不可变类型的时候内存地址不发生变化的。 总结:浅拷贝是对数据的内容进行拷贝,对不可变类型创建指向引用,可变类型开辟内存存储,但是只是拷贝第一层。深拷贝是拷贝数据的每一层的可变类型并开辟内存,但是不可变类型只是创建引用。 来源: https://www.cnblogs.com/blackball9/p/11529806.html

c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)

Deadly 提交于 2019-11-29 18:45:55
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html 1.利用指针交换两个字符串方法?(这题是我当年读大一的时候看到的,好怀念!!!QAQ) (一)指针引用 #include<iostream> using namespace std; void swap(char *&a,char *&b) { char *temp; temp = a; a = b; b = temp; } int main() { char *ap = "hello"; char *bp = "word"; swap(ap,bp); cout<<"ap:"<<ap<<endl; cout<<"bp:"<<bp<<endl; return 0; } (二)二维指针指向一维 #include<iostream> using namespace std; void swap(char **a,char **b) { char *temp; temp = *a; *a = *b; *b = temp; } int main() { char *ap = "hello"; char *bp = "word"; swap(&ap,&bp); cout<<"ap:"<<ap<<endl; cout<<"bp:"<<bp<<endl; return

Mysql高性能优化规范建议

拥有回忆 提交于 2019-11-29 18:28:33
阅读目录(Content) 数据库命令规范 数据库基本设计规范 1. 所有表必须使用Innodb存储引擎 2. 数据库和表的字符集统一使用UTF8 3. 所有表和字段都需要添加注释 4. 尽量控制单表数据量的大小,建议控制在500万以内 5. 谨慎使用Mysql分区表 6. 尽量做到冷热数据分离,减小表的宽度 7. 禁止在表中建立预留字段 8. 禁止在数据库中存储图片,文件等大的二进制数据 9. 禁止在线上做数据库压力测试 10. 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1. 优先选择符合存储需要的最小的数据类型 2. 避免使用TEXT、BLOB数据类型,最常见的TEXT类型可以存储64k的数据 3. 避免使用ENUM类型 4. 尽可能把所有列定义为NOT NULL 5. 使用TIMESTAMP(4个字节)或DATETIME类型(8个字节)存储时间 6. 同财务相关的金额类数据必须使用decimal类型 索引设计规范 1. 限制每张表上的索引数量,建议单张表索引不超过5个 2. 禁止给表中的每一列都建立单独的索引 3. 每个Innodb表必须有个主键 常见索引列建议 如何选择索引列的顺序 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) 对于频繁的查询优先考虑使用覆盖索引 索引SET规范 尽量避免使用外键约束 数据库SQL开发规范 1.

Java基础知识总结

我们两清 提交于 2019-11-29 17:15:43
本博文内容参考相关博客以及《Java编程思想》整理而成,如有侵权,请联系博主。 转载请注明出处: http://www.cnblogs.com/BYRans/ PDF版下载链接: 《Java基础知识总结》 。 如果您想在此基础上做一些修改,请联系dingyu.sdu@gmail.com,我把word原版发给您。 一:java概述: 1,JDK:Java Development Kit, java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment, java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量: 让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1 ): 永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2 ): 临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1 ): 永久配置方式:classpath=.;c:\;e:\ 2 ):

Python基础(六)

别来无恙 提交于 2019-11-29 13:35:21
今日主要内容 驻留机制 小数据池 代码块 深浅拷贝 集合 一、 驻留机制 (一)== 和 is == :判断两边的内容是否相同 a = -6 b = -6 print(a == b) # True is :判断两边的内存地址是否相同 a = -6 b = -6 print(a is b) # Fales (二)什么是驻留机制 python中为了节省内存定义的一套规则,部分数据在重复定义的时候指向同一个内存空间,也就是内存地址是相同的 在驻留机制范围内的代码块和小数据池,在定义变量的时候都将履行驻留机制 代码块的优先级高于小数据池 (三)什么是代码块 一个py文件、一个函数、一个模块、一个类、终端中的每一行代码都是一个代码块 (四)小数据池和代码块的驻留范围 小数据池 数字: -5 ~ 256 字符串: 只包含数字、字母、下划线的全部字符串 在python3.6解释器中字符串使用乘的时候总长度不能超过20(只包含数字、字母、下划线) 在python3.7解释器中字符串使用乘的时候总长度不能超过4096(只包含数字、字母、下划线) 布尔值 True False 代码块 数字: -5 ~ 正无穷 字符串: 全部字符串(包含数字、字母、下划线、特殊字符、中文等) 使用乘的时候总长度不能超过20(只包含数字、字母、下划线) 布尔值 True False (五)指定驻留 指定任意字符串