jvm总结

jvm即java虚拟机

java代码经过编译生成字节码,字节码通过类加载器,到达工作数据区,其包含程序计数器、java虚拟机栈、本地方法栈、堆、方法区,数据区再连接执行引擎以及连接本地方法接口,接口连接本地方法库。

其中数据区可按照线程是否私有分为

线程私有:

程序计数器:记录当前线程字节码的执行位置,在多线程情况下就可以通过程序计数器在线程切换后恢复到正确的执行位置

java虚拟机栈:方法的入栈出栈就是在这里执行的,每个线程的方法在执行的过程就会创建一个栈帧,存储局部变量表、方法出口等信息,出入栈代表方法执行结束和开始。

本地方法栈:是为了执行本地方法而创建的栈。

线程共享:

堆:gc垃圾回收的主要场所,用于存储创建的对象。

方法区:用于存储已被虚拟机加载的类信息、静态变量、常量等信息。

hotspot虚拟机

对象的创建

虚拟机遇到new这个指令的时候,会到方法区的常量池看看是否已经加载过这个类信息了,如果未加载,则进行类的加载、解析、初始化,然后为对象在堆上分配一个空间然后初始化。

当方法栈中调用方法,需要引用对象时,通过指针指向堆中的对象地址。

判断对象是否已经“死亡”

可达性分析

是一颗树的结构,通过gcroot这个根节点,向下搜索走过的路径,当一个对象无法与root节点相联系的时候,说明这个对象已经“死亡”,可以在下一次gc中回收。

GC

新生代(包含大比例的伊甸园区和小比例的两个幸存者区)

算法:标志清除算法,复制算法

标志清除算法:就是可以gc回收的对象做上标志,然后清除

复制算法:把可用内存一次只使用一半,当一半使用完了,复制存活的对象到另一半,然后对原先的一半进行清空。好处是不会产生碎片。

老年代

当新生代中gc未能回收的对象就来到老年代,强GC

算法:标记整理算法

通过对可gc回收的对象做标记,再一次性进行回收,然后把存活的对象往一端移动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值