Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

语言的类型和缓存 #3

Open
huangchucai opened this issue Dec 18, 2018 · 1 comment
Open

语言的类型和缓存 #3

huangchucai opened this issue Dec 18, 2018 · 1 comment

Comments

@huangchucai
Copy link
Owner

huangchucai commented Dec 18, 2018

语言的类型和缓存

1. 静态类型 vs. 动态类型

静态类型:在编译时就检查数据的类型,即在声明所有变量的时候,就必须明确的指定变量的类型(int、float、double)

动态类型:在运行时才确认数据的类型,即在声明所有变量的时候,不需要指定变量的类型,在第一次赋值的时候,程序会指定它的数据类型

优缺点: 静态类型可以在编译时就发现因为数据类型导致的出错,让你编写的时候更加的放心,而动态类型写法灵活,但是必须要在运行时才可以发现错误。

2. 强类型 vs. 弱类型

强类型:变量的类型不能随意更改,一旦一个变量确定了某个类型,除非强制更改,那么它就一直是这个类型

弱类型:数据类型可以被忽略的语言,一个变量可以赋值为不同的类型

3. 编译器 vs. 解释器

我们写的代码对于计算机可能就是一堆火星文,这个时候就需要一种东西来把我们写的代码翻译成计算机可以读懂的代码,但是怎么翻译,什么时候翻译的区分就产生了编译器和解释器

编译器:在程序编译的时候(运行前),会把我们所有的代码编译成可执行的文件(计算机看得懂的)

解释器:在程序runtime的时候(运行时),一句句的解释成可执行的文件,当再次运行的时候,又需要重新翻译。

  • Java虚拟机
  • JavaScript解释器(v8引擎,浏览器)

4. 对于java

那么问题来了,对于Java是什么类型的语言呢?对于JavaScript而是什么语言呢?

Java:静态类型(在编译时就确定了变量的类型)和强类型语言(变量不能随意更改类型),解释型的语言: Java语言首先通过编译器,得到.class文件,然后其虚拟机对.class文件进行逐条解释执行。因此我我认为Java本质上一种解释型的语言, 但是需要先经过编译器生成.class,为什么要这样做,个人认为是为了Java的跨平台特性。与Java不同的是,有些语言是直接翻译成机器码的(比如C#),这种是典型的编译型。

JavaScript: 动态类型(运行时才确定)和弱类型语言(变量可以随意更改类型)。

缓存

1. 为什么要有缓存

从之前我们讲解了计算机的构成,知道计算机中CPU是执行和发出每条指令,但是执行的时候需要的数据来源则是放到主存中的。那么cpu和主存的读取速度就很重要了。

但是随着CPU的高速发展,CPU的执行速度越来越快,但是从内存中读取和写入数据的过程并没有提升的很快,这样就导致了CPU每次在操作内存的时候都要等待很长的一段时间,为了减少这个等待的数据,就在CPU和内存中添加了高速缓存

2. 缓存的特点和交互

  1. 缓存:就是保存一份数据拷贝。他的特点是速度快,内存小,并且昂贵。
  2. 当程序在运行的过程中,会将运算需要的数据从主存复制一份到CPU的高级缓存中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。
  3. 在多核单线程中,所有的CPU公用一套底层数据
    cache
@huangchucai
Copy link
Owner Author

update 解释器

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant