Jvm基础知识与概念--笔记1
JVM内存区域划分
大概可将JVM的内部体系结构分为三部分,类装载器子系统,运行时数据区,和执行引擎。
类装载器
每一个Java虚拟机都由一个类加载器子系统,负责加载程序中的类型(类和接口),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎负责执行被加载类中包含的指令。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。
运行时数据区:主要包括:方法区(包含了常量池),堆,Java栈,PC寄存器,本地方法栈
- 方法区和堆由所有线程共享
堆:存储对象实例
方法区:当JVM的类装载器加载.class文件,并进行解析,把解析的类型信息放入方法区。(存储运行时常量池,已被虚拟机加载的类信息、常量、静态变量、即时编译编译后的带码等数据)
- Java栈和PC寄存器由线程私有
JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址的引用变量。
- 本地方法栈:存储本地方法调用的状态
执行引擎:它或者在执行字节码,或者执行本地方法
主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式 。