JVM笔记

---------------垃圾收集算法---------------
新生代:复制算法。将新生代分成一块较大的Eden空间和两块较小的survivor空间。每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地赋值到另外一块Survivor空间上,最后,清理掉Eden和刚才用过的Survivor空间。

老生代:标记-整理算法。先标记出存活的对象,然后,让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

分代收集算法:根据对象存活周期的不同将内存划分为几块。把java堆分为新生代和老年代。新生代使用“复制算法”,老年代使用“标记-整理”算法。

---------------垃圾收集器---------------
新生代垃圾收集器:Serail, ParNew, Parallel Scavenge
老年代垃圾收集器:CMS, Serial Old, Parallel Old
跨新生代和老年代的收集器:G1

---------------内存分配与回收策略---------------
Java自动内存管理指两方面:给对象分配内存以及回收分配给对象的内存。
对象主要分配在新生代的Eden区上。
1.对象优先在Eden分配。当Eden区没有足够空间进行分配时,虚拟机发起一次Minor GC。

新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。

老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。

2.大对象直接进入老年代
最典型的大对象就是那种很长的字符串以及数组
经常出现大对象容易导致内存还有不少空间时就提前触发垃圾收集以获取足够的连续空间来“安置”它们。

为什么大对象要直接进入老年代呢?这样避免在Eden区及两个Survivor区之间发生大量的内存赋值。


3.长期存活的对象将进入老年代
如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并且对象年龄设为1。
当它的年龄增加到一定程度(默认为15岁),就将会被晋升到老年代中。

4.动态对象年龄判定
如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一般,年龄大于或等于该年龄的对象就可以直接进入老年代。

5.空间分配担保

类文件结构

1.魔数与Class文件的版本
魔数的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。4个字节。0xCAFEBABE。
接下来4个字节存储的是Class文件的版本号:5、6字节是次版本号(Minor Version),7、8字节是主版本号(Major Version)。
高版本的jdk能向下兼容以前版本的Class文件,不向上兼容。

2.常量池
主版本号之后的是常量池入口。常量池可以理解为Class文件之中的资源仓库,它是Class文件结构中与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一。
常量池容量计数值(constant_pool_count)占用2字节。
常量池中主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。
符号引用包括3类常量:
类和接口的全限定名(Fully Qualified Name)
字段的名称和描述符(Descriptor)
方法的名称和描述符

3.常量池之后是访问标志(access_flags)
占用2字节。这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定义为abstract类型;如果是类的话,是否被声明为final等。

4.类索引、父类索引与接口索引集合
类索引:确定这个类的全限定名,占用2字节。
父类索引:确定这个类的父类的全限定名,占用2字节。
接口索引集合:用来描述这个类实现了哪些接口,这些被实现的接口将按implements语句(如果这个类本身是一个接口,则应当是extends语句)后的接口顺序从左到右排列在接口索引集合中。

对于接口索引集合,入口的第一项——u2类型的数据为接口计数器(interfaces_count),表示索引表的容量。

5.字段表集合
字段(field)包括类级变量以及实例级变量,但不包括在方法内部声明的局部变量。

6.方法表集合
依次包含访问标志(access_flags)、名称索引(name_index)、描述符索引(descriptor_index)、属性表集合(attributes)

7.属性表集合






程序猿的日常——JVM内存模型与垃圾回收

JVM基础概念总结:数据类型、堆与栈(棒棒的)

Java垃圾回收机制
JVM内存模型(没看完)

Jvm之用java解析class文件




























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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值