1.JVM内存区域划分
为什么要划分区域,因为JVM Java虚拟机是仿照真实的机器,真实的操作系统进行设计的,真实的操作系统中,对于进程的地址空间是进行了分区域的设计,JVM也就仿照了操作系统的情况,也进行了分区域的设计。
2.JVM具体怎么划分
核心区域有四个:
1.程序计数器:很小的区域,只是用来记录当前指令执行到那个地址。
2.元数据区:保存当前类被加载好的数据;保存类对象(类的名字,继承的类,实现的接口;有哪些属性,属性的名字,属性的类型,private/publlic;有哪些方法,叫什么名字,参数列表等)
3.栈:保存方法的调用关系,写代码的时候,肯定会有方法调用,每次调用方法,就会进入方法内部执行,当方法执行完毕,返回到调用位置,继续往后走。
4.堆:程序中创建的所有对象都在保存在堆中。堆是JVM中最大的空间区域,往集合类里面添加元素,如果堆上的对象,不再使用了的话,就需要被释放掉。
非静态成员,处于堆上;静态成员,处于元数据区;局部变量,处于栈上;
元数据区和堆整个Java进程共用同一份;程序计数器和栈,一个进程中可能有多份(每个线程有一份)。
3.JVM类加载
类加载本身是一个比较复杂的事情,我们主要从两方面展开:
1.类加载的步骤
步骤如图:
其中前5步是固定的顺序并且也是类加载的过程,其中中间的3步我们都属于连接,所以对于类加载 来说总共