前言 近段时间工作需要用到了这块知识,遂加急补了一下基础,CLR中这一章节反复看了好多遍,得知一二,便记录下来,给自己做一个学习记录,也希望不对地方能够得到补充指点. 1,.托管代码和非托管代码的区别 2.托管堆是什么? 3.托管堆基础,托管堆分配资源 4.内存泄漏 内存溢出.内存损坏 5.C# new操作符分配资源 6.垃圾回收算法 7.代:提升性能 8.垃圾回收触发条件 9.大对象 10.使用需要特殊清理的类型 11.使用包装了本机资源的类型 一.托管代码和非托管代码的区别 托管代码:执行过…
TIJ读书笔记06-终结清理和垃圾回收 finalize()方法 垃圾回收器如何工作 java的垃圾回收是由jvm来控制的.所以需要java程序员参与的部分不是很多. 但是在这里需要明白一点,java的垃圾回收回收的是什么? 垃圾回收器只释放那些由new分配的内存. 注意这个限制,jvm只负责回收内存,而且这部分内存是通过new关键字来创建的. 所以像什么数据库连接,IO等等是需要程序员去释放的. 关于java的垃圾回收,简单来说有三点: 对象可能不会被垃圾回收 垃圾回收不等于析构 垃圾回收只和…
  TIJ读书笔记03-初始化和构造器 初始化和清理是涉及安全的两个问题,如果对象不能正确的初始化会引起很多错误,比如空指针异常等,如果不能恰当及时的清理,会占用过多资源. 构造器在创建一个类的实例的时候,由编译器去调用,构造器可以保证每个对象在可被用户操作前都正确的被初始化. 关于构造器有个问题,就是构造器应该叫什么名字. 所有方法名都有可能和用户自定义函数名相冲突 调用构造器是编译器的责任,那么必须要让编译器知道每个类的构造器的名字. 有两种办法来解决这两个问题: 保留一个关键字做构造器的函…
TIJ读书笔记08-数组的初始化和可变参数形参 数组 数组的声明 数组的初始化和赋值 可变参数列表 数组 相同类型的,用一个标识符名称封装到一起的一个对象序列或者基本数据类型序列叫数组.(多么严谨的概念) 数组的声明 int[] a1和int a1[]都可以表示一个数组. 前者是java风格的,后者是C/C++风格的.但是java数组不允许指定数组的大小. 因为对于java来说,这个标识符就是一个引用. java觉得这玩意儿就是一个引用,指定一个引用的大小是件很傻的事情. 对于数组,初始化动作可…
TIJ读书笔记05-this关键字 概述 this的用法 static方法 概述 两个对象同时调用一个方法,那么jvm怎么知道是哪个方法调用的呢. 我们在书写的时候会写成a.fun(1) 或者b.fun(1)如果按照更容易理解的角度来看的话,或许可以写成: Banana.fun(a,1)这样就更符合OOP的”发送消息给对象”的原则了. 但是java帮助我们做了很多事情,在调用每个方法的时候,默认第一个传入的参数就是调用该方法的对象的引用. 让我们可以写成a.fun(1). 理解了函数调用的方法,…
TIJ读书笔记04-方法重载 为什么会有方法重载 方法签名 如何区分重载 关于基本类型的重载 为什么会有方法重载 OOP的编程方式就是让程序的逻辑更加接近现实世界的逻辑. 而在现实世界中,自然语言本身就是很强的冗余容错能力的. 比如,水有个方法叫洗. 那么在自然语言中,洗车,洗衣服…这都是洗这个方法. 映射到程序语言就是water.wash(car);,water.wash(clothes) 而不会说以洗车的方式洗车water.washCar(car)和以洗衣服的方式洗衣服water.washC…
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016 数学符号看不懂的,先看看这里: 强化学习读书笔记 - 00 - 术语和数学符号 时序差分学习简话 时序差分学习结合了动态规划和蒙特卡洛方法,是强化学习的核心思想. 时序差分这个词不…
  TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决定程序的执行路径. 由于java中布尔类型的特殊实现,如果想在布尔测试中测试一个非布尔值,必须将其转换成布尔表达式. 也就是说像C和C++中的while(1)这种方式是不可以的. if-else if-else有两种: if(boolean statment){ statments;} if(boo…
  TIJ读书笔记01-操作符 概述 关系操作符和逻辑操作符 位操作符 类型转换 概述 操作符 操作符接受一个或多个参数,并生成一个新值. 换句话说操作符作用于操作数,生成一个新值.有些操作符会改变操作数自身. 这种效应我们叫做side effect. 赋值 赋值操作符”=”的意思是,取右值赋值给左值. 右值可以是任意的常数,变量或者表达式(只要它能生成一个值). 但是左值必须是一个明确的已命名的变量. 也就是说必须有物理空间可以存储右值. 赋值也就是值传递,无论任何数据类型都遵循这一规则,都是…
1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里获得直接支持.堆栈指针向下移动,分配新的内存,向上移动,则释放那些内存.Java系统必须知道存储在堆栈内的所有项目的确切的生命周期. 3)堆.编译器不需要知道存储的数据在堆里活多长时间. 4)常量存储.通常直接放在代码内部. 5)非RAM存储,如果数据完全存活与程序之外,那么它可以不受程序的任何控制…