面2-JVM
1、JDK、JRE
1、 Java程序-运行过程:
xxx.java -> javac -> xxx.class -> java -> JVM -> windows机器码、linux机器码
2、栈
1、放局部变量
2、每个线程都有自己的栈内存,用于放线程自己的局部变量
3、栈帧:
(1)一个方法对应一块栈帧内存区域
(2)main线程 —》 栈 --》栈1(方法1)栈帧、main栈帧
(3)包含:局部变量表、操作数栈、动态链接、方法出口(回到主方法的代码位置)
(4)对象:堆里面的对象和局部变量表中的区别?放的是地址
3、栈与堆之间的联系
栈放的是堆中元素的地址
4、程序计数器
1、作用:用于多线程
5、方法区
1、放常量、静态变量、类信息
6、本地方法区
1、native修饰
2、底层为C语言实现
3、调用了本地方法,分配给本地方法的一块内存
7、堆
、
1、eden区:
(1)存放对象
(2)minor gc:数据满了之后,垃圾收集
(3)可达性分析算法:gc roots(线程栈的本地变量、静态变量、本地方法栈的变量)
将 gc roots 对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余的对象都是垃圾对象