学习Java 核心技术面试精讲 笔记

Java平台的理解

Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。

一、Java的两个特性:

1.跨平台(Write once, run anywhere)

2.垃圾收集(GC,Garbage Collection)

二、JDK与JRE

1、JRE是Java Runtime Environment的简写,是Java运行时环境,其包含JVM和Java类库,运行一个Java程序所必须的

2、JDK是JRE的超集,是Java Developer KIT的简写,其除了JRE还提供javac、javap、jstack等常用等编译、检测、监控工具。

三、Java有解释执行和编译执行,JVM提供了动态编译器(如JIT),在运行时会将热点代码编译成机器码,这种情况就是编译执行了。


“一次编译、到处运行”说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JDK,安装好JDK后也就有了Java语言的运行环境。其实Java语言本身与其他的编程语言没有特别大的差异,并不是说Java语言可以跨平台,而是在不同的平台都有可以让Java语言运行的环境而已,所以才有了Java一次编译,到处运行这样的效果。
严格的讲,跨平台的语言不止Java一种,但Java是较为成熟的一种。“一次编译,到处运行”这种效果跟编译器有关。编程语言的处理需要编译器和解释器。Java虚拟机和DOS类似,相当于一个供程序运行的平台。
程序从源代码到运行的三个阶段:编码——编译——运行——调试。Java在编译阶段则体现了跨平台的特点。编译过程大概是这样的:首先是将Java源代码转化成.CLASS文件字节码,这是第一次编译。.class文件就是可以到处运行的文件。然后Java字节码会被转化为目标机器代码,这是是由JVM来执行的,即Java的第二次编译。
“到处运行”的关键和前提就是JVM。因为在第二次编译中JVM起着关键作用。在可以运行Java虚拟机的地方都内含着一个JVM操作系统。从而使JAVA提供了各种不同平台上的虚拟机制,因此实现了“到处运行”的效果。需要强调的一点是,java并不是编译机制,而是解释机制。Java字节码的设计充分考虑了JIT这一即时编译方式,可以将字节码直接转化成高性能的本地机器码,这同样是虚拟机的一个构成部分。

1.编译:将源代码一次性转换为机器码的过程(机器码有保存为文件,下次运行的时候直接运行机器码)

2.解释:将源代逐行转换为机器码并运行的过程(机器码并没有保存下来)

3.编译执行(编译器):将一段程序直接翻译成机器码(对于C/C++这种非跨平台的语言)或者中间码(Java这种跨平台语言,需要JVM再将字节码编译成机器码)。编译执行是直接将所有语句都编译成了机器语言,并且保存成可执行的机器码。执行的时候,是直接进行执行机器语言,不需要再进行解释/编译。

4.解释执行(解释器):在执行程序时,再将中间码(例如Java的字节码通过JVM解释成机器码)一行行的解释成机器码进行执行。这个运行过程是解释一行,执行一行。

执行编译过程的程序叫做编译器。

执行解释过程的程序叫做解释器。

Jvm的运行机制

jvm是什么,jvm是运行java字节码的虚拟机. java源文件在通过编译器之后被编译成相应的.class文件, .class文件又被jvm中的解释器编译成机器码在不同的操作系统上运行. 每种操作系统的解释器都是不同的,但基于解释器实现的虚拟机是相同的,这也是java能够跨平台的原因.

在一个java进程开始运行,虚拟机就开始实例化了,有多个进程启动就会实例化多个虚拟化实例.进程退出或者关闭,则虚拟机实例消亡,在多个虚拟机实例之间不能共享数据.

**ps: 每一个main方法.就是一个java进程,也就是一个java虚拟机.每一个main方法都是独立的,不能共享数据.**

java程序的具体运行过程如下:

  1. java源文件被编译器编译成字节码文件(class文件)
  2. jvm将字节码文件编译成相应操作系统的机器码
  3. 机器码调用相应操作系统的本地方法库执行相应的方法.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值