jvm学习第二天

今天是jvm学习的第二天,继续坚持吧,才刚刚开始。

 

一、垃圾收集算法,由于垃圾收集算法涉及大量的程序细节,而且每个平台的虚拟机操作内存的方法又各有不同,所以只介绍几种垃圾收集算法的思想。

 

(1)标记清除算法:先标记处需要回收的对象,然后统一收集,这种方法不好的地方是会产生大量不必要的碎片,当以后程序运行过程中需要分配较大的内存空间时无法找到足够连续的内存单元,从而引发新一轮的垃圾回收

(2)复制算法:为了解决标记清除算法的效率问题,出现了复制算法,它将可用内存分割为大小相等的很多块,每次只是用其中一块,当着一快的内存用完时,就把存活着的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。避免了内存碎片,这样的代价是将内存缩小为原来的一半。

(3)标记整理算法:和标记清楚算法的前半部分一样,但是标记之后,不是一下子对可回收的对象进行回收操作,而是将存活对象向一边移动,然后移除边界之外的可回收对象。

(4)分代收集算法:现代商业虚拟机的垃圾回收都采用分代收集,即按照对象的存活周期划分为新生代和老生带,在新生代中,对象存活率低,可以使用复制算法,以保证用最小的空间完成垃圾的回收。但是在老生带,对象的存活率高,可以使用标记清除算法或者标记整理算法。

 

二、垃圾收集器:

serial收集器:串行的收集方式,也就是说在收集的过程中,会停下其他工作线程,其实也就是几十毫秒最多一百毫秒的时间,只要不是频繁发生,这种方式还是很高效的。

parNew收集器:serial的多线程版本。

 

三、内存分配与回收策略

(1)对象优先在eden分配,如果发现不够了,会发生minorGC,而在gc期间如果发现survivor不足以存放,那么就会通过分配担保机制转移到老年代去。  

(2)大对象直接进入老年代

(3)长期存活的对象将进入老年代

如果对象在eden出生并经过一次minorGC后仍然存活,并且能被survivor容纳的话,将被放到里面,并将对象年龄设置为1,对象在survivor每熬过一次GC,年龄就加1,当达到一定程度时,就会被晋升为老年代,因为新年代里存放的都是朝生夕灭的对象。

(4)动态对象年龄的判断,为了能更好的适应不同程序的内存状况,虚拟机并不总是要求对象年龄达到峰值才晋升老年代,而是在survivor空间中相同年龄所有对象的大小总和大于survivor空间的一半,年龄大于或者等于的对象就可以晋升老年代了。

 

三、虚拟机性能监控与故障处理工具

四、jvm性能调优实践(暂且掠过,目前还接触不到这方面的知识)

 

五、无关性,平台无关性和语言无关性的基石都是虚拟机和字节码存储格式,只要符合class文件的结构,就可以在jvm上运行

 

1、class文件的结构

class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件中,中间没有添加任何分隔符。当遇到需要占用8位字节以上的空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值