Java的两种核心机制是:
1.Java 虚拟机
什么是java虚拟机?
Java 虚拟机(JVM)是可运行Java 代码的假象计算机,是Java 语言的运行环境,Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
java 虚拟机体系结构图:
Java 程序执行流程
Java程序的执行依赖于编译环境和运行环境,流程为:.Java先编译成.class 文件,然后生成在Java虚拟机上运行的目标代码,java虚拟机可以支持不同的平台,但是有同一的接口。对于不同的系统可以使用同一个虚拟机。
Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行。Java程序的运行需要Java虚拟机、Java API和Java Class文件的配合。Java虚拟机实例负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例就诞生了。当程序结束,这个虚拟机实例也就消亡。
Java 虚拟机
Java虚拟机的主要任务是装载class文件并且执行其中的字节码。由下图可以看出,Java虚拟机包含一个类装载器(class loader),它可以从程序和API中装载class文件,Java API中只有程序执行时需要的类才会被装载,字节码由执行引擎来执行。
Java虚拟机在执行字节码时还进行其它的一些内置的安全机制的操作,他们作为Java编程语言保证Java程序健壮性的特性,同时也是Java虚拟机的特性:
类型安全的引用转换
结构化的内存访问
自动垃圾收集
数组边界检查
空引用检查
为何要用java虚拟机?
一次编译,到处执行:Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
对于不同的平台,有不同的虚拟机,但是有统一的接口。
2.垃圾收集机制
在c/c++语言中,由程序员负责回收无用内存,释放内存是手动处理,要用delete 运算符来释放内存,对编码者来说,这样是很难做到的,在Java中自动完成,垃圾回收机制放在JVM里,JVM完全负责垃圾回收事宜。消除了程序员回收无用内存空间的责任:他提供了一种系统级存储空间的分配情况,并在JVM空闲时,检查并释放那些可被释放的内存。
对象在啥时候被丢弃?
当我们新建一个对象时如:
Cat c=new Cat();
首先会在栈内存分配空间c,在堆内存分配空间存放Cat 对象,栈内存的c会指向堆内存的Cat 对象,但是如果没有指向这个对象的指针时,说明这个对象的存在没有必要了,那么,这个对象就可以被JVM会自动回收了,这就是说,当不存在某个对象的任何引用时,就会告诉JVM,我不需要这个对象了,你可以回收了,JVM的垃圾回收机制对堆空间做实时监测,当发现某对象的引用计数为0时,就将该对象列入待回收列表中,但是并不是马上予以销毁。那什么时候回收呢?
什么时候回收?
JVM 的垃圾回收机制有多个算法,垃圾回收需要占用时间,因此,JVM的垃圾回收机制要在时间和空间之间做平衡,java 运行时系统知识在需要的时候才回收。
总结:
Java虚拟机使得java程序一次编译,导出执行,所以Java 支持平台无关性,安全性和网络移动性,同时Java 的垃圾自动回收机制使得编程者不用关心到底什么时候清理内存,可以很好地利用内存空间。