Java 笔记【第一章 Java程序设计概念】


Java 白皮书的关键术语(节选)

  • 简单性: Java 语法是C++ 语法的一个纯净版本。这里没有头文件、指针运算、结构、联合、操作符重载、虚基类等。 现在有一个独立的具有较小类库的Java 微型版,这个版本适用嵌入式设备。

  • 面向对象:面向对象是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。

  • 分布式:Java 有一个丰富的例程库,用于处理像HTTP 和 FTP 之类的TCP/IP 协议。 Java 应用程序能够通过URL打开和访问网络上的对象。

  • 健壮性: Java 和 C++ 最大的不同在于Java 采用的指针模型可以消除重写内存和损坏数据的可能性。

  • 安全性: 不可行代码在一个沙箱环境中执行,在这里它不会影响主系统。用户可以确信不会发生不好的事情。因为Java 代码不论来自哪里,都不能脱离沙箱。

  • 体系结构中立: 编译器 -> 字节码 -> 动态翻译成本地机器代码 虚拟机中有一个选项可以将执行最频繁的字节码序列翻译成机器码,这一过程称为即时编译。

  • 可移植性: 在Java 中,数据类型具有固定的大小。

  • 高性能: 字节码可以在运行时刻,动态地翻译成对应运行这个应用的特定CPU的机器码。 即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即内联)。即时编译知道哪些类已经加载。基于当前加载的类集,如果特定的函数不会被覆盖,就可以使用内联。必要时,可以撤销优化。

  • 多线程: Java 是第一个支持并发程序设计的主流语言。


关于字节码、编译器、即时编译、JVM等的关系

  • 字节码:Java 编译器(javac.exe)将Java 源文件(.Java)编译成字节码文件(.class)

  • JVM:一种呢你够运行Java字节码的虚拟机。

  • JVM 把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。

  • Java解释器:是JVM的一部分。是一种电脑程序,能够把高级编程语言一行一行直接翻译运行。解释器不会一次把整个程序翻译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每翻译一行程序叙述就立刻运行,然后再翻译下一行,再运行,如此不停地进行下去。

  • 即时编译(Just-in-time compilation: JIT):又叫实时编译、及时编译。是指一种在运行时期把字节码编译成原生机器码的技术,一句一句翻译源代码,但是会将翻译过的代码缓存起来以降低性能耗损。这项技术是被用来改善虚拟机的性能的。JIT编译器是JRE的一部分。原本的Java程序都是要经过解释执行的,其执行速度肯定比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT。在运行时,JIT会把翻译过来的机器码保存起来,以备下次使用。而如果JIT对每条字节码都进行编译,则会负担过重,所以,JIT只会对经常执行的字节码进行编译,如循环,高频度使用的方法等。它会以整个方法为单位,一次性将整个方法的字节码编译为本地机器码,然后直接运行编译后的机器码。

  • 机器码,完全依附硬件而存在,并且不同硬件由于内嵌指令集不同,即使相同的0 1代码 意思也可能是不同的,根本不存在跨平台性。比如,不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果。

  • JAVA是跨平台的因为JVM, 无论哪种硬件只要你装有JVM,那么他就认识这个JAVA字节码.至于底层的机器码,咱不用管,JVM会把字节码再翻译成所在机器认识的机器码。

参考博客
Bill好想


对JIT的进一步探索

JVM运行原理:
Java 笔记【第一章 Java程序设计概念】_第1张图片

在部分商用虚拟机中(如HotSpot),Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器。

更多详细介绍可以参考:博客nogos

2018年2月6日00:41:30
– end –

你可能感兴趣的:(Java 笔记【第一章 Java程序设计概念】)