20161017
来源:互联网 发布:网络犯罪的特征有() 编辑:程序博客网 时间:2024/05/22 06:54
jvm运行时数据区
pc,记录线程执行的字节码的行号,控制流程以及线程切换
栈,后进先出结构,方法调用,栈桢,局部变量表,操作数栈,方法出口等
堆,逻辑上连续,存储对象
方法区,class文件,class对象,常量,static变量
运行时常量池,存在于方法区,保存class文件中的常量池的符号引用,常量,直接引用
创建对象
- 加载类
new对象时,先检查运行时常量池有没有new的类的符号引用,没有的话需要加载类
- 分配空间
为对象分配空间:类似栈的分配方法,移动指针,当垃圾清理是复制或标记整理模式时使用;采用记录表记录堆中空闲段来分配,当垃圾清理是标记清理模式时使用;tlab模式,即为每个线程分配堆空间,在这个空间里new对象,这样保证线程安全
- 设置对象
设置对象头,记录对象对应的类,hash,锁,gc分代等信息
初始化对象空间,成员变量都变成0
- 初始化
执行init方法
对象的内存布局
- 对象头
存储对象自身的运行时数据,类型指针,数组还有数组长度
- 对象数据
对象实例数据,父类对象数据也在内
- 对齐填充
对象访问
- 句柄访问
jvm有句柄池,句柄池记录对象地址和类地址,栈区的reference指向句柄池,优势:垃圾清理时减少指针数据变动
- 直接指针
对象头直接存对象地址和类地址,优势:访问快
垃圾回收
- 对象无用
引用计数器,无法解决循环引用
GC root可达性分析,通过引用链决定哪个对象无用,GC root包括:栈,静态变量,常量,本地栈
- 引用分类
strong, 普通引用
weak, 内存不够时回收
soft, 下一次垃圾回收时回收
phantom,不影响垃圾回收,只是为了得到回收通知
finalize方法
gc root时候,如果对象没有重写finalize或者finalize已经被调用,必被回收;如果重写了finalize方法,把他加入f-queue队列,jvm会调用这个队列执行finalize,但这个方法只被执行一次
垃圾回收算法
复制算法
标记清除
标记整理
垃圾回收器
- 新生代serial单线程复制,parnew多线程复制,parallel scavenge多线程,注重吞吐量复制
- 老生代cms并发,减少停顿标记清除,serial old单线程标记整理,parallel old多线程,注重吞吐量标记整理
- g1
- cms过程:初始标记,并发标记,重新标记,并发清除
0 0
- 20161017
- 20161017
- 【Java每日一题】20161017
- android developer tiny share-20161017
- ios developer tiny share-20161017
- [李景山php]每天laravel-20161017|ResponseTrait.php
- [李景山php]每天laravel-20161017|UploadedFile.php
- IO流之PrintWriter 、PrintStream
- 20161008
- 【Derivation】Nyquist采样定理
- 20161009
- 顺序表实例1
- 20161017
- HashMap中tableSizeFor的一个精巧的算法
- 20161018
- 删除cookie
- ssoj2868(最大不相交区间)
- 20161019
- 话说C语言const用法
- 20161020
- 跟我一起学C++之按引用传递