JVM Java虚拟机

JVM的结构:


Java源文件编译生成class文件


类加载器


加载流程:


Loading:类的信息从文件中获取并载入到JVM的内存里

Verifying:检查读入的结构是否符合JVM规范的描述

Preparing:分配一个结构来存储类的信息

Resolving:把这个类的常量池中所有的符号引用改变成直接引用

Initalizing:执行静态初始化程序,把静态变量初始化成指定的值

JVM的内存管理

Java栈区:

    作用:它存放的是Java方法执行时的所有数据

    组成:由栈帧组成,一个栈帧代表一个方法的执行

Java栈帧:

    每个方法从调用到执行完成就对应一个栈帧在虚拟机栈中入栈到出栈

    局部变量表、栈操作数、动态链接、方法出口

本地方法栈:

    作用:本地方法栈是专门为native方法服务的

方法区:

    存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后等数据

堆区:

    作用:通过所有new创建的对象的内存都在堆中分配

    特点:是虚拟机中最大的一块内存,是GC要回收的部分



垃圾回收:

垃圾回收算法:

    引用计数算法:通过是否引用来判断是否要回收,(缺点,如果有不可达的引用,就不能回收)

    可达性算法(根搜索算法):


引用的类型:

强引用、软引用、弱引用、虚引用

最常用的就是强引用和弱引用


回收算法:


缺点:造成内存碎片



成本较高,适合在数量少的引用时使用


触发回收:

Java虚拟机无法再为新的对象分配内存空间

手动调用System.gc()方法(强烈不推荐)

低优先级的GC线程被运行时就会执行GC



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值