美文网首页
java--你不知道的小点

java--你不知道的小点

作者: 砂糖z | 来源:发表于2018-08-16 10:41 被阅读0次

    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:

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

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

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

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

    小总结:

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

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

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

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:java--你不知道的小点

          本文链接:https://www.haomeiwen.com/subject/tpavmftx.html