JVM

JVM

Class文件结构

魔数
主次版本号
常量池
访问标志
类索引
字段表
方法表
属性表

类加载

类加载过程:加载、验证、准备、解析、初始化。
加载:将class文件以二进制文件流的形式加载到JVM
验证:文件格式验证、元数据验证、字节码验证和符号引用验证
准备:
解析:
初始化:

双亲委派模型

向上委托、向下委派。好处:保证程序的安全性、类加载的顺序性。
启动类加载器:加载JAVA_HOME/lib目录下的类
扩展累加载器:加载JAVA_HOME/lib/ext目录下的类
应用类(系统类)加载器:
自定义类加载器:

运行时数据区

运行时数据区

运行时数据区包括:程序计数器、堆、方法区、虚拟机栈、本地方法栈
堆、方法区是线程共享的;程序计数器、虚拟机栈、本地方法栈都是线程私有的;
堆:线程共享;唯一目的是存放对象实例。在空间不足时会抛出OOM异常。通过-Xmx和-Xms设置初始容量和最大容量。
方法区:线程共享。用以存储虚拟机加载的类型信息、常量......
运行时常量池:方法区的一部分。
栈帧:用以支持虚拟机进行方法调用和方法执行背后的数据结构。存储了方法的局部变量表、操作数栈、动态链接和方法返回地址。
调用一次方法生成一个栈帧。本地方法栈是为了JNI(调用本地方法)服务。

垃圾回收

可达性分析算法

“GC Roots”作为起始节点,根据引用关系向下搜索,搜索所走过的路径成为“引用链”;

GC Roots有哪些

  1. 虚拟机栈中引用的对象;
  2. 方法区中静态属性引用的对象;方法区中常量引用的对象;
  3. Sync锁持有的对象;
  4. Java虚拟机中内部使用的引用。

引用类型

强、软、弱、虚
软引用:在空间不足时,会被回收。有用对象但不是必须的。
弱引用:最多存活到下次GC。
虚引用:幽灵引用,最弱的引用方式,不影响。

对象不可达后一定会被回收吗?

分代收集理论

弱分代假说:大部分对象都是朝生夕死;
强分代假说:熬过越多次收集的对象越不容易消亡;
跨代引用:跨代引用占比极少;

垃圾回收算法

标记清除
标记复制
标记整理

安全点

GC时需要所有线程到达安全点,例如:方法调用、循环跳转、异常跳转

记忆集和卡表

用以解决“跨代引用”问题

三色标记

白色:对象不可达;
黑色:对象存在引用;
灰色:还没扫描完成(并发标记可能产生新引用指向对象)

7种垃圾收集器

垃圾收集器

年轻代(新生代)

Serial:一个线程工作的收集器(指在GC时必须暂停其他线程);
ParNew:实质上是Serial的多线程版本;
Parallel Scavenge:关注吞吐量的收集器。

老年代收集器

Serial Old:采取标记-整理算法。基本废弃。
Parallel Old:标记-整理。与Parallel Scaveng配合,关注吞吐量。

CMS

CMS是一种以最短回收停顿时间为目标的收集器,基于标记-清除。
收集过程:
a. 初始标记:需要“stop the world”,仅标记GC Roots,速度极快;
b. 并发标记:遍历整个对象图,耗时较长;与用户线程并发执行。
c. 重新标记:“stop the world”,
d. 并发清除:“stop the world”

G1--Garbage First

开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。
G1仍然遵循分代收集理论,每一个Region都可以根据需要,成为eden、s、或老年代,根据不同类型的Region进行不同的处理策略。还有一类特殊区域,H区,专门用来存储大对象。超过region区域一半大小的对象就是大对象,region空间大小可以通过-XX:G1HeapRegionSize设定,取值范围为1M-32M。

G1可预测停顿时间。

G1执行过程:
初始标记:
并发标记:
最终标记:
筛选回收:可以根据计算的回收效益来筛选回收。

内存分配策略

一个对象从Eden,经过15次MinorGC到老年代的过程。。。

哪些情况下对象会进入老年代

大对象直接进入老年代;
长期存活的对象(默认15岁)也将进入老年代;
其他一些情况,如:年龄相同的对象占所有对象大小的一半以上,该年龄及以上的对象进入老年代。

空间担保策略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容