JVM体系结构
Java虚拟机主要分为五大模块:
- 类装载器子系统
- 运行时数据区
- 执行引擎
- 本地方法接口
- 垃圾收集模块
- 1、JVM一共分为五个区,分别为方法区、堆、Java栈、本地方法栈、程序计 2、方法区、堆为线程共享区域,GC会对二个区进行垃圾回收;
-
3、Java栈、本地方法栈、程序计数器为线程私有区域;
4、程序计数器:程序计数器是一块较小的内存空间,是当前线程所执行的字节码的行号指示器•程序计算器处于线程独占区•如果线程执行的是java方法,记录的是正在执行的虚拟机字节 码指令的地址,如果是native方法,这个计数器值为undefined;
5、Java栈:栈也叫栈内存,主管Java程序的运行,是在线程创建时 创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。8种基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配,栈里有栈帧,有返回对象、本地变量表、操作数栈、动态连接。
6、本地方法栈:它的具体做法是NativeMethod Stack中登记native方法,在ExecutionEngine执行时加载本地方法库;
7、方法区:方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定 义的方法的信息都保存在该区域,此区属于共享区间
方法区是一种特殊的堆,栈里面不会有垃圾,用完就弹出了,否则阻塞了main方法吗,垃圾几乎都在堆里,所以JVM性能调优%99都针对于堆