内存类型

CLR的垃圾回收机制 (一)

狂风中的少年 提交于 2019-12-01 17:20:01
CLR的垃圾回收机制 (一) 从这节开始就涉及CLR 最有意思的地方了,也是CLR 思想的核心部分,比较难理解,要反复思考才能有收获。这节是我对CLR的垃圾回收的整理,应用程序是如何构造新对象,托管堆如何控制这些对象的生存期,以及回收这些对象的内存。本节的内容主要还是参考CLR via C# 这本书,还有就是蒋金楠的博文。 我们先大致了解一下CLR 中的资源概念、以及资源的生存周期 CLR的垃圾回收机制用于清理废弃的资源,这些资源例如文件、网络连接、socket、数据库连接、内存等。在面向对象的环境中,每个类型都代表可供程序使用的一种资源。要使用这些资源,必须为代表资源的类型分配内存,以下是访问一个资源所需要的步骤。 1 调用IL 指令 newobj ,为代表资源的类型 分配内存 (一般使用C# new 操作符来完成)。 2 初始化内存 ,设置资源的初始状态并使资源可使用。类型的实例构造器负责设置初始化状态。 3 访问类型的成员来 使用资源。 4 摧毁资源 的状态以进行清理。 5 释放内存 。垃圾回收器独自负责这一步。 那应用程序是如何创建对象的呢?我们一步一步来解释这个问题 。C# 的new 操作符导致CLR 执行以下步骤。 1 计算类型的字段所需要的字节数。 2 加上对象的开销所需要的字节数。 每个对象都有两个开销字段:类型对象指针和同步块索引。32位应用程序,每个对象需要8

java基础(一)

你离开我真会死。 提交于 2019-12-01 16:41:54
1 java语言的特性 1.1 简单性 Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外,Java也适合于在小型机上运行,它的基本解释器及类的支持只有40KB左右,加上标准类库和线程的支持也只有215KB左右。库和线程的支持也只有215KB左右。 1.2 面向对象 Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。 1.3 分布性 Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。 1.4 鲁棒性 Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java提示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java在编译时还可捕获类型声明中的许多常见错误

JVM之深入理解JVM内存结构(Java内存结构/Java内存区域)、Java内存模型

非 Y 不嫁゛ 提交于 2019-12-01 15:26:49
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的 JVM内存结构、JAVA内存结构、JAVA内存区域 、 Java内存模型 ,这就是几 个截然不同的概念 ,但是很多人容易弄混。 可以这样说,很多高级开发甚至都搞不不清楚 JVM内存结构、JAVA内存结构、JAVA内存区域 、 Java内存模型 这几个的概念及其间的区别。 甚至我见过有些面试官自己也搞的不是太清楚 。不信的话,你去网上搜索Java内存模型,还会有很多文章的内容其实介绍的是JVM内存结构。 前提: 本文讲的基本都是以Sun HotSpot虚拟机为基础的,Oracle收购了Sun后目前得到了两个【Sun的HotSpot和JRockit(以后可能合并这两个),还有一个是IBM的IBMJVM】 前一篇文章 编程的基础知识:CPU和内存的交互以及volatile型变量的理解 之所以扯了那么多计算机内存模型,是因为java内存模型的设定符合了计算机的规范。 JVM内存结构、Java内存结构、Java内存区域 这三者都是一个概念 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在

并发编程之原子操作Atomic&Unsafe

谁说胖子不能爱 提交于 2019-12-01 11:48:36
原子操作:不能被分割(中断)的一个或一系列操作叫原子操作。 原子操作Atomic主要有12个类,4种类型的原子更新方式,原子更新基本类型,原子更新数组,原子更新字段,原子更新引用。Atomic包中的类基本都是使用Unsafe实现的包装类。 基本类型:AtomicInteger,AtomicLong,AtomicBoolean; 引用类型:AtomicReference、AtomicReference的ABA实例、AtomicStampedRerence、AtomicMarkableReference; 数组类型:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray; 属性原子修改器(Updater):AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater; 1、原子更新基本类型类 用于通过原子的方式更新基本类型,Atomic包提供了以下三个类: AtomicBoolean:原子更新布尔类型。 AtomicInteger:原子更新整型。 AtomicLong:原子更新长整型。 AtomicInteger的常用方法如下: int addAndGet(int delta) :以原子方式将输入的数值与实例中的值

面试之C++语言相关题目

≯℡__Kan透↙ 提交于 2019-12-01 10:43:32
【C语言】 main()函数是开始执行时所执行的程序的第一个函数,但不是第一个执行的函数。第一个执行的函数是_start(),它通常由C运行库提供,在编译程序时自动链入,此细节高度依赖于操作系统和编译器工具链。 【C++语言特性】 C和C++的区别,C++的好处 C 和C++的对比和好处,在平时应用上有什么感受 C语言的结构体和C++的结构体有什么异同点 C++的结构体其实就是类的一种,只不过类成员默认访问权限是private,结构体默认访问权限是public。 C语言的结构体是不能有函数的,而C++可以有。 C语言的结构体中数据成员没有private、public和protected访问限定,而C++的结构体有访问限制。 C语言的结构体没有继承关系,C++结构体有丰富的继承关系。 new可以搭配free吗,为什么 delete a和delete a[]区别 new是堆分配还是栈分配 new与malloc的区别 c++11 throwing(1) void* operator new (std::size_t size); nothrow(2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept; placement(3) void* operator new

mysql操作规范建议

℡╲_俬逩灬. 提交于 2019-12-01 10:27:00
作者: 听风,原文地址: https://www.cnblogs.com/huchong/p/10219318.html 。 数据库命令规范 数据库基本设计规范 所有表必须使用 Innodb 存储引擎 数据库和表的字符集统一使用 UTF8 所有表和字段都需要添加注释 尽量控制单表数据量的大小,建议控制在 500 万以内。 谨慎使用 MySQL 分区表 6.尽量做到冷热数据分离,减小表的宽度 禁止在表中建立预留字段 禁止在数据库中存储图片,文件等大的二进制数据 禁止在线上做数据库压力测试 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 优先选择符合存储需要的最小的数据类型 避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据 避免使用 ENUM 类型 尽可能把所有列定义为 NOT NULL 使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间 同财务相关的金额类数据必须使用 decimal 类型 索引设计规范 限制每张表上的索引数量,建议单张表索引不超过 5 个 禁止给表中的每一列都建立单独的索引 每个 Innodb 表必须有个主键 常见索引列建议 5.如何选择索引列的顺序 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) 对于频繁的查询优先考虑使用覆盖索引 8.索引

嵌入式团队培训——内存分配、结构体

╄→尐↘猪︶ㄣ 提交于 2019-12-01 10:16:51
嵌入式团队培训 动态分配内存 一、思维导图 二、为什么需要动态分配内存 C语言的各种操作都是基于内存的。变量、数组都是内存的别名。 拿数组举例,程序所需要的内存在编译期间就已经被决定,所以定义数组时需要定义长度,以便于编译器在编译期给程序分配足够的内存。但并不是每次都能确定数组的长度到底要定为多少,或者前期定好了,后期有需要一些额外的空间时,定长数组就会带来问题。所以就需要用到动态内存分配的支持。 三、图解 四、相关函数 头文件 想要使用动态内存分配需要 <stdlib.h> 标准库的支持 相关函数 1、malloc()函数 该函数会向操作系统请求内存块,并返回内存块的首地址。可以用一个指针变量保存这个地址。 代码及结果 int main() { int i; int *testArray1 = (int *)malloc(5 * sizeof(int)); //用malloc()函数分配内存 if (testArray1 == NULL) { exit(-1); //内存分配失败,退出程序 } for(i=0; i<5; i++) { printf("Array1[%d] = %d\n", i, testArray1[i]); } free(testArray1);//释放内存 return 0; } 2、calloc()函数 该函数与malloc函数大体相同

Android性能优化

不打扰是莪最后的温柔 提交于 2019-12-01 10:16:43
GITHUB https://blog.51cto.com/6342127/2307514 说明 这篇文章是将很久以来看过的文章,包括自己写的一些测试代码的总结.属于笔记的性质,没有面面俱到,一些自己相对熟悉的点可能会略过.<br> 最开始看到的性能优化的文章,就是胡凯的优化典范系列,后来又陆续看过一些人写的,个人觉得anly_jun和胡凯的质量最好.<br> 文章大的框架也是先把优化典范过一遍,记录个人认为重要的点,然后是anly_jun的系列,将之前未覆盖的补充进去,也包括HenCoder的一些课程相关内容.<br> 当然除了上面几位,还有很多其他大神的文章,时间久了也记不太清,在此一并谢过. 笔记内容引用来源 胡凯 anly_jun HenCoder 1.Android性能优化之渲染篇 1.VSYNC 帧率:GPU在1秒内绘制操作的帧数.如60fps. 我们通常都会提到60fps与16ms,这是因为人眼与大脑之间的协作无法感知超过60fps的画面更新. 开发app的性能目标就是保持60fps,这意味着每一帧只有16ms=1000/60的时间来处理所有的任务 刷新率:屏幕在1秒内刷新屏幕的次数.如60Hz,每16ms刷新1次屏幕. GPU获取图形数据进行渲染,然后屏幕将渲染后的内容展示在屏幕上. 大多数手机屏幕的刷新率是60Hz,如果GPU渲染1帧的时间低于1000/60

Java内存模型

我是研究僧i 提交于 2019-12-01 09:52:42
Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。 如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。 原始的Java内存模型存在一些不足,因此Java内存模型在Java1.5时被重新修订。这个版本的Java内存模型在Java8中人在使用。 Java内存模型内部原理 Java内存模型把Java虚拟机内部划分为线程栈和堆。这张图演示了Java内存模型的逻辑视图。 每一个运行在Java虚拟机里的线程都拥有自己的线程栈。这个线程栈包含了这个线程调用的方法当前执行点相关的信息。一个线程仅能访问自己的线程栈。一个线程创建的本地变量对其它线程不可见,仅自己可见。即使两个线程执行同样的代码,这两个线程任然在在自己的线程栈中的代码来创建本地变量。因此,每个线程拥有每个本地变量的独有版本。 所有原始类型的本地变量都存放在线程栈上,因此对其它线程不可见。一个线程可能向另一个线程传递一个原始类型变量的拷贝,但是它不能共享这个原始类型变量自身。 堆上包含在Java程序中创建的所有对象,无论是哪一个对象创建的。这包括原始类型的对象版本

2019-2020-1 20175311胡济栋 《信息安全系统设计基础》第五周学习总结教材学习

纵饮孤独 提交于 2019-12-01 07:19:04
2019-2020-1 20175311胡济栋 《信息安全系统设计基础》第五周学习总结教材学习 第一部分:程序结构与执行 对于机器级编程,两种抽象尤为重要。第一种是 指令集架构(ISA) ,其定义了机器级程序的格式与行为,包括处理器状态、指令格式、指令影响。第二种其使用的内存地址是 虚拟地址 。 程序计数器(PC) 给出将要执行的下一条指令在内存中的地址。 不同的操作数按类型被分为三种:第一种类型是 立即数 ,用来表示常数值。(如$-577)第二种类型是 寄存器 ,它表示某个寄存器里的内容。第三种类型是 内存引用 ,它会根据计算出来的地址访问某个内存位置。 第二部分: 来源: https://www.cnblogs.com/hujidong42/p/11667903.html