java-ee JVM

1.JVM类加载:把.class文件加载到内存,得到类对象这样的过程

类加载的过程:加载、验证、准备、解析、初始化

加载:找到.class文件,并读取文件内容

验证:确保.class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求

准备:给类对象分配内存空间

解析:针对字符串常量进行初始化

初始化:执行类构造器方法的过程

双亲委派模型:发生在类加载的第一个步骤的找.class文件这个过程

JVM内置了三个类加载器:

Bootstrap ClassLoader:负责加载java标准库中的类

Extension ClassLoader:负责加载非标准库的类但是Sun/Oracle扩展的类

Application ClassLoader :负责加载项目中自己写的类以及第三方库的类

三者的关系是Bootstrap ClassLoader是Extension ClassLoader的父类;Extension ClassLoader是Application ClassLoader的父类

当Application ClassLoader这个加载器收到了类加载的请求,它先不会去执行这个请求即不会自己尝试去加载这个类,而是把这个请求委派给父类Extension ClassLoader这个加载器,此时这个Extension这个加载器也不会自己尝试加载这个类,也是把这个请求委派给父类Bootstrap ClassLoader,这个加载器也是如此。当Bootstrap ClassLoader这个加载器没有父类时,先尝试在自己的区域中找到这个类,若无法完成这个加载的请求,则将反馈给子类Extension ClassLoader这个加载器去完成加载,Extension ClassLoader加载器也是如此。

2.垃圾回收(GC)

帮助程序员自动释放内存,能够有效的减少内存泄漏出现的概率

GC是以对象为单位进行释放的

一个对象如果后续再也不用了就可以认为是垃圾,即一个对象没有引用指向他,此时这个对象一定是无法被使用的

Ⅰ找垃圾

①引用计数算法

给对象增加一个引用计数器,放有引用指向它是,计数器就+1,当引用不指向它是,计数器就-1;任何时刻计数器为0时,可以认为是垃圾

②可达性分析算法(java实际采取的方法)

把对象之间的引用关系理解成一个树形结构,从一些特殊的起点(GC Root)出发,进行遍历。只要能遍历访问到的对象,就是可达,再把不可达的当成垃圾。

可以作为GC Root的对象包含以下几种:

(1)虚拟机栈中引用的对象

(2)方法区中类静态属性引用的对象

(3)方法区中常量引用的对象

(4)本地方法栈中引用的对象

Ⅱ垃圾回收

①标记清除算法

标记出需要回收的垃圾,在标记完成后统一回收被标记的对象。

②复制算法

将内存划分成两个块每次使用其中一块。当这个内存需要进行垃圾回收时,将不是垃圾的复制到另外一块区域上,然后把使用的这一块内存进行垃圾回收处理。

③标记整理算法

标记出需要回收的垃圾,让所有不是垃圾的都移动到另外一端,然后直接清理掉端边界以外的内存

④分代算法

根据对象存活周期的不同将内存划分为新生代和老年代。在新生代中,每次垃圾回收都有大批的对象死去,只有少量存活,因此我们采用复制算法,而老年代中对象存活率较高,没有额外空间对他进行分配担保,就必须采用标记清除或者标记整理算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值