java--你不知道的小点

2018/7/26:

看极客时间中《java核心技术36讲》第一章问题

1.什么是解释执行什么是编译执行?

解释执行:类似口译,要执行一句就解释一句为机器语言,适合小型的项目。

编译执行:类似全文翻译,先编译为机器语言,然后你再执行,适合大型项目。

❤2.java是解释执行吗?

在我浅薄的认知中,我不知道为什么会有这样的问题。开始学的时候,老师就说java是编译执行,python是解释执行,真是一脸懵逼。我猜测老师说的是下面说的前半部分,问题问的是后半部分?

作者说:

首先:Java分为①编译期和② 运行期。

1).java-- 编译---->.class   -------->这个步骤是一次编译,到处执行那句话。

2).class----->类加载器------->解释/编译执行

在运行期:

a)jvm内嵌的解释器讲.class转换成最终的机器码。 

b)大多数的JVM,都提供JIT(Just-In-Time)动态编译器,将热点代码编译成机器码,这种情况就是编译执行而不是解释执行。

c)还有一种新的AOT(Ahead-of-Time-Compilation)直接讲字节码编译成机器码,避免JIT预热各方面的开销。比如Oracle JDK 9

所以:.java是解释执行吗?错,java有解释执行,混合执行,编译执行

评论中有这么一:

首先javac编译器将源代码编译成字节码。

然后jvm类加载器加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度相对会比较慢。有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以引进jit技术,提前将这类字节码直接编译成本地机器码。这样类似于缓存技术,运行时再遇到这类代码直接可以执行,而不是先解释后执行。


2018/8/15:

❤1.为什么匿名类引用外面的变量必须要用final:

java--你不知道的小点_第1张图片
java--你不知道的小点_第2张图片

第一次知道这个事情是在写安卓代码的时候,当时就相当想知道着是为什么呢?但是当时浅薄的认知,连要百度的问题我都不知道GG。今天突然看到有人说为什么,我激动哦。

他说java传参,是传值而不是传引用,这就是最本质的原因。

2.值传递和引用传值:什么意思?

jvm中有堆和栈,栈中存放对象的引用,局部变量,操作数等。栈中存放对象的实例。值传递就是传递栈中的值,不是堆中的。

小总结:

形参就是:方法声明时候的()里面的值        实参就是:方法调用的时候传入的值。

基本数据类型  :将实参的值传递给形参

 引用数据类型:将实参的对应的堆空间的首地址值传递给形参

 网上有人说:为了生命周期和可见性的问题:使用了final ? 

具体推荐final语义:  大神写的

- final保证传入值是不可变得: (指令重排导致传入参数的值是不确定的。)这句话我猜的。

- final 属性的值因为compilers 缓存在寄存器中,而不用像普通属性一样从内存中重新读取。

我说错完了,希望有人指正。

3.类的方法的参数,任何方法都会有一个默认的参数在第一个参数 this

java--你不知道的小点_第3张图片

你可能感兴趣的:(java--你不知道的小点)