我理解的JVM

1.什么是JVM?

JVM:因为Java源代码到Java的运行分为三部,Java源文件------javac编译成.class文件-------JVM运行,所以JVM就是用来运行Java字节码文件的

JRE:JVM+Java标准类库

JDK:JRE+Java开发工具集

2.JVM内存模型

 

- 线程私有

        - 程序计数器

                - 程序计数器的作用有两个:

                 1.记录程序运行的行号,从而实现代码的流程控制;

                 2.在多线程的情况下,程序计数器⽤于记录当前线程执行的位置,从⽽当线程被切换回来的时 候能够知道该线程上次运行到哪⼉了。

        - Java虚拟机栈

                - Java虚拟机是JVM运行Java代码生成的栈叫Java虚拟机栈

                - 每一个栈帧中都拥有局部变量表和操作数栈

                - 虚拟机栈会遇到的问题:栈内存溢出和堆内存溢出

        - 本地方法栈

                - 本地方法栈是JVM运行本地方法的时候生成的区域

- 线程共有

        - 堆:堆是内存比较大的区域,new出来的对象和数组都在堆中分配内存

                是Java回收的主要区域,所以也叫Java堆。

                堆分为新生代和老生代,新生代是分为Eden区和Survior区

        - 方法区:存放的是已经被加载的类信息、常量和静态变量

                        方法区从jdk1.8之后就变成 直接内存中的元空间

        - 直接内存:直接内存并不会受堆内存的影响,但是 会收到本机内存大小的影响

3.堆内存的分配机制

3.1 对象优先分配进入Eden区

3.2 大对象直接进入老年代

3.3 长期存活的对象进入老年代

4.如何判断这个对象可以回收

4.1 引用计数法

        给对象中添加⼀个引⽤计数器,每当有⼀个地⽅引⽤它,计数器就加1;当引⽤失效,计数器就 减1;任何时候计数器为0的对象就是不可能再被使⽤的。

4.2 跟可达算法

        通过⼀系列的称为 “GC Roots” 的对象作为起点,从这些节点开始向下 搜索,节点所⾛过的路径称为引⽤链,当⼀个对象到 GC Roots 没有任何引⽤链相连的话,则证 明此对象是不可⽤的。

5.垃圾回收算法

5.1 标记清除

⾸先标记出所有不需要回收的对象, 然后回收

问题:内存空间不连续

5.2 标记整理

⾸先标记出所有不需要回收的对象, 让所有存活的对象向⼀端移动 ,然后回收

5.3 复制算法

将内存分为大⼩相同的两块,每次使⽤其中的⼀块,当这⼀块的内存使⽤完后,就将还存活的对象复制到另⼀块去,然后再把使⽤的空间⼀次 清理掉。

这样就使每次的内存回收都是对内存区间的⼀半进行回收。

5.4 分代收集算法

新生代复制算法,老生代垃圾清除或者垃圾收集算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值