java杂记(一)

1.编译型语言和解释型语言的优缺点?
  (1)编译型语言,在程序第一次执行时将其全部编译成与当前系统平台相对应的机器指令,在后续执行时,直接运行第一次编译的结果,这样减少了编译的次数,提高了程序运行的效率,但是程序在第一次编译时与平台相对应,因此移植性就比较差了。
  (2)解释型语言,在程序每次运行时都要将源程序解释成当前系统平台相对应的机器指令,因此每一次运行都需要解释并执行,运行效率较低,但是移植性较强。


2.java语言的运行机制?
    java语言综合了编译型语言和解释型语言的优点,采用了一种折中的方案,java语言首次运行时采用通用的java编译器将java源程序编译成与平台无关的字节码文件(.class文件),然后由JVM(java虚拟机)对字节码文件解释执行—JVM屏蔽了与具体操作平台相关的信息,不同平台对应着不同的JVM,JVM负责将每条要执行的字节码送给解释器,解释器将其翻译成特定平台环境的机器指令并执行。


3.JDK、JRE、JVM之间有什么关系?
  (1)JRE,java运行时环境,它是java运行时所必须的环境集合,主要由java虚拟机,java平台核心类和若干个支持文件组成。
  (2)JDK,java开发工具包,它包括了java运行环境,一堆java工具,以及java基础类库(rt.jar).最长使用的是javac.exe、java.exe、jar.ext、javadoc.exe。一些主流的IDE集成开发环境就集成了JDK,如(Eclipse,Android studio)利用这行工具可以方便快速的进行java相关的开发。
  (3)JVM,java虚拟机,它是 一个虚构出来的计算机,可以在实际的计算机上运行计算机功能,JVM有自己完善的硬件架构,如 处理器、堆栈和寄存器等,还有相应的指令系统。
总之,JDK、JRE、JVM是一种包含关系,JDK包含了JRE,JRE包含了JVM。


4.GC的工作原理
    GC,垃圾回收,java语言提供了GC功能可以自动检测对象是否超过了作用域,从而到达自动回收的目的。java的内存管理其实就是对象管理,其中包括对象的分配和释放,对于程序员来说分配对象使用new关键字,释放对象将其置为null就可以了,让程序不可能在访问这个对象了,这个对象称为不可达,GC将负责回收所有不可达的内存空间。对于GC来说程序员创建对象时,GC就开始检测这个对象的地址,大小,以及使用情况,通常GC采用有向图的方式记录并管理堆中的对象,通过这种方式来判断哪些对象时 可达的,哪些对象时不可达的,当GC确定一些对象不可达时,GC有责任回收这些对象对应的内存空间。当时为了保证GC能够在不同平台上实现,Java规范对GC的很多行为都没有进行严格的规定,例如,采用 什么类型的回收算法,什么时候回收,这些都没有统一规范,因此不同的JVM实现者通常采用不同的算法,这也对java开发带来很多不确定性。


猜你喜欢

转载自blog.csdn.net/qq_34712399/article/details/80370640
今日推荐