JVM(Java Virtual Machine,Java虚拟机)
定义:Java Virtual Machine = java 程序的运行环境 ( java二进制字节码的运行环境 )。 JVM是一套规范,由不同的厂商实现。
好处:
1.使得java程序可以一次编写,到处运行,Java虚拟机从软件层面屏蔽了不同操作系统之间的底层差异。
2.提供了自动内存管理机制,垃圾回收功能。
3.数组下标越界检查。
4.多态机制的实现。
JVM内存区域划分
JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。
类装载器:
每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。
执行引擎:
主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式 。
自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行。
运行时数据区主要包括:
方法区、堆、栈、程序计数寄存器、本地方法等
栈定义:
JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址
堆
定义:
通过new关键字创建的对象,都会使用堆内存。
特点:
1.是线程共享的内存区域,堆中的对象都要考虑线程安全问题。
2.有垃圾回收机制。