JVM学习笔记5:异常处理

异常的分类

  • 显式:主体是应用程序,它指的是在程序中使用“throw”关键字,手动将异常实例抛出。
  • 隐式:主体则是 Java 虚拟机,它指的是 Java 虚拟机在执行过程中,碰到无法继续执行的异常状态,自动抛出异常。举例来说,Java 虚拟机在执行读取数组操作时,发现输入的索引值是负数,故而抛出数组索引越界异常(ArrayIndexOutOfBoundsException)。

JVM学习笔记4:方法调用

重载与重写

  • 重载的方法在编译阶段完成识别,调用是根据参数声明类型选择重载方法。选择分三个阶段:

    • 在不考虑对基本类型自动装拆箱(auto-boxing,auto-unboxing),以及可变长参数的情况下选取重载方法;
    • 如果在第 1 个阶段中没有找到适配的方法,那么在允许自动装拆箱,但不允许可变长参数的情况下选取重载方法;
    • 如果在第 2 个阶段中没有找到适配的方法,那么在允许自动装拆箱以及可变长参数的情况下选取重载方法。
  • 如果 Java 编译器在同一个阶段中找到了多个适配的方法,那么它会在其中选择一个最为贴切的,而决定贴切程度的一个关键就是形式参数类型的继承关系。

  • 下面代码中第一次调用会是函数2,因为null可以匹配object和string,但是因为string是Object的子类,所以编译器认为string合适。

JVM学习笔记3:类加载

知识点

  • 基本步骤:经过加载、链接以及初始化三大步骤。其中,链接过程中同样需要验证;而内存中的类没有经过初始化,同样不能使用。
  • 引用类型与CLR基本一致,泛型会被编译为特定类型的代码。类和接口是字节码。数组类是由 Java 虚拟机直接生成的,这个似乎没有CLR中对标的东西。
  • 加载用的字节流可以来自java编译后的class,也可以是网络比如网页中内嵌的小程序 Java applet。字节流我理解就是IL,而且从结果看也确实就是这个东西。

JVM学习笔记2:类型

Boolean

  • Java中的Boolean类型在JVM中映射为int类型。“true”被映射为整数 1,而“false”被映射为整数 0。因此,将原本声明为 boolean 类型的局部变量,赋值为除了 0、1 之外的整数值,在 Java 虚拟机看来是“合法”的。

  • 对于存储 boolean 数组的字节码,Java 虚拟机需保证实际存入的值是整数 1 或者 0。

  • 对于下面的代码来说,第一个if是true,第二个是false。因为第一个是在true是1的情况下,等于问的是“吃过几碗饭”,而第二个if是问“吃了一碗饭吗”。

JVM学习笔记1:概述

JVM解决什么问题

  • JVM在我的理解与CLR是一回事,本身还是为了解决java代码无法直接编译为机器码。
  • 对标C#,类型的动态推导等功能是在运行时做的,因此无法做到AOT。就需要虚拟机来做这个事情了。
  • 如虚函数实现多态这样的情况,JVM中可以简单的获得当前应该调用哪个实现函数,从而优化代码的执行。
  • 最后,使用虚拟机可以做到代码不考虑具体在哪个平台运行的问题,实现跨平台使用。

How I build games with Entitas 摘要

  • 这篇文章并不会讲解entitas的功能,作者在文章中主要谈了谈他如何利用entitas开发清晰、稳定和灵活的代码结构。这篇文章可以说是对于ECS的一种实践的总结,同时也是对于Entitas的使用总结。
  • 文章会介绍如下的话题:
    • 定义:数据、逻辑和视图层
    • 维护它们彼此的独立
    • 通过接口进行抽象
    • IOC
    • 视图层抽象(视图和视图控制器)

计算机组成原理:6、高速缓冲存储器

概述

为何使用Cache

  • CPU速度太快了
  • 解决CPU空等问题,但是需要保证的是大多数的数据和指令都在cache中。
程序访问局部性原理
  • 时间局部性:当前正在使用的指令和数据,在不久的将来还会被使用。那么这些数据和指令需要放到cache。
  • 空间局部性:当前正在使用的指令或者数据的相邻的指令或者数据在不久的将来会被使用,那么把当前使用的和相邻的数据和指令放到cache。

计算机组成原理:5、主存储器

一、概述

1、基本构成

主存构成

  • 结合上图总结一下之前的数据读取的操作
    • CPU在第一个时钟周期时通过地址总线发出要取数据的地址,这个地址是指的存储单元的地址。
    • MAR收到后,经过译码器得到指定的存储单元。
    • CPU在第二个时钟周期时通过控制总线讲读指令发送到主存储器
    • 控制电路根据信令来操作读写电路
    • 将之前得到主存储器地址中的数据写入MDR
    • 通过数据总线讲MDR中的数据送入到IR或者ACC

Unity ECS:C# Job System文档总结

背景、初衷、目标

  • 出现的背景、初衷就是:天下苦无多线程久已
  • 当然这个说法要进一步的约束,首先unity中可以编写多线程代码,但是最大的问题是多线程中无法使用unity API,当然也无法修改component中的数据了。
  • 目前来看似乎这个技术就是为了能够让开发者使用multithread来操作unity API和component 数据。

优势和劣势

  • 多线程就是优势
  • 可操作的数据类型限制比较大,目前只能是blittable data type
  • 这个多线程是和unity引擎共享work thread,所以变相的侵占了引擎层的性能。

计算机组成原理:4、存储器概述

分类

  • 按照介质

  • 按照存取方式

    • 存取时间与物理地址无关(随机访问)
      • 随机存储器(RAM): 在程序执行过程中可以读写
      • 制度存储器(ROM):在程序执行过程中只能读
    • 存取时间与物理地址有关(串行访问)
      • 顺序存取存储器:磁带
      • 直接存取存储器:磁盘
  • 按照作用

    • 主存储器
      • RAM
        • 静态RAM(cache)
        • 动态RAM(内存芯片)
      • ROM(只读,但是不同的)(BIOS ROM)
        • MROM:Mask Read-Only Memory,中文全称“掩模式只读存储器”。掩模式只读存储器的内容是由半导体制造厂按用户提出的要求在芯片的生产过程中直接写入的,写入之后任何人都无法改变其内容。
        • PROM:可编程ROM
        • EPROM:可擦除可编程ROM,是一种断电后仍能保留数据的计算机储存芯片。一旦编程完成后,EPROM只能用强紫外线照射来擦除。
        • EEPROM:EEPROM(带电可擦写可编程读写存储器)是用户可更改的只读存储器
          (ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。
    • Flash Memory → SSD
    • 高速缓存存储器(Cache)
    • 辅助存储器
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×