Win7蓝屏beginning dump of physical memory【WIN7蓝屏怎么处理】

更新:01-31 民间故事 我要投稿 纠错 投诉

OpenJDK16 ZGC 源码分析

ZGC 在 JDK11 中作为实验性功能引入后,已经经过了 5 个版本的演进,目前较之前版本有了较大的变化。本文将分析 ZGC 的设计思想和原理。

ZGC 主要设计理念如下:

  • ZGC 为了支持 TB 级内存,采用了基于 Page 的分页管理(类似于 G1 的 Region)。
  • 同时,为了加快内存访问速度,快速的进行并发标记和 relocate,ZGC 新引入了 Color Pointers;Color Pointers 与 Shenandoah GC 使用的 Brooks Pointers 机制不同,依赖内核提供的多视图映射,因此仅能支持部分操作系统的 64 位版本,适用性不如 Shenandoah GC,同时也无法支持指针压缩 CompressedOops。
  • 另外,为了高效内存管理,设计了两级内存管理系统。

zGlobals_x86.cpp

  • ZGC 指针布局有三种方式,分别用于支持 4TB、8TB、16TB 的堆空间,以上代码用于为 layout 3 支持 16TB 的布局;
  • 43-0 bit 对象地址;
  • 47-44 对象视图,分为三种对象视图:
    • Marked0、Marked1
    • Remapped
  • x86 和 aarch64 架构下最多仅支持 48 位指针,主要是因为硬件限制。通常为了节约成本,64 位处理器地址线一般仅 40-50 条,因此寻址范围远不及 64 位的理论值。

ZGC 将同一段物理内存映射到 3 个不同的虚拟内存视图,分别为 Marked0、Marked1、Remapped,这即是 ZGC 中的 Color Pointers,通过 Color Pointers 区分不同的 GC 阶段。

ZGC 的多视图映射依赖于内核提供的 mmap 方法,具体代码如下

zPhysicalMemory.hpp, zPhysicalMemory.cpp, zPhysicalMemoryBacking_linux.cpp

  • ZPhysicalMemory 是 ZGC 对于物理内存管理的抽象,收敛 ZGC 对于物理内存的访问。
  • ZPhysicalMemory 底层根据宿主操作系统调用不同的 ZPhysicalMemoryBacking 实现,进行多视图映射。

ZGC 对于物理内存的管理主要在 ZPhysicalMemory 类中,此处需要注意,ZGC 上下文中的物理内存,不是真正的物理内存,而是操作系统虚拟内存。

ZGC 中管理物理内存的基本单位是 segment。segment 默认与 small page size 一样,都是 2MB。引入 segment 是为了避免频繁的申请和释放内存的系统调用,一次申请 2MB,当 segment 空闲时,将加入空闲列表,等待之后重复使用。

zGlobals_x86.hpp

ZPhysicalMemorySegment 是 ZGC 对于物理内存 segment 的抽象,定义如下:

zPhysicalMemory.cpp

ZGC 中内存管理的基本单元是 Page(类似于 G1 中的 region),ZGC 有 3 种不同的页面类型:小型(2MB),中型(32MB)和大型(2MB 的倍数)。

zGlobals_x86.hpp

zGlobals.hpp

medium 页 size 的计算方法如下:

zHeuristics.cpp

  • 取堆最大容量(Xmx)的 0.03125 unclamped;
  • 如果 unclamped 在 2MB 到 32MB 之间,clamped 赋值 unclamped;如果 unclamped 小于 2MB,则 clamped 赋值 2MB;如果 unclamped 大于 32MB,则 clamped 赋值 32MB;
  • 向下取 clamped 最接近的 2 的幂数,即为 medium 页 size;
  • 考虑到目前的硬件环境,通常的 medium 页 size 为 32MB;
  • ZObjectSizeLimitMedium 为 ZPageSizeMedium / 8,则通常情况下,medium 页的对象 size 限制为 4MB。超过 4MB 的对象需要放入 large 页。

对于 large page 的处理如下:

zObjectAllocator.cpp

  • 分配大对象时,触发分配 large page;
  • 对齐大对象 size 到 2MB 的倍数后分配 large page。

zObjectAllocator.cpp

  • 当对象 size 大于 medium 页对象 size 限制时,触发大对象分配;
  • 因此,large 页的实际 size 很可能小于 medium 页 size。

Page 分配的入口在 ZHeap 的 alloc_page 方法:

zHeap.cpp

zPageAllocator.cpp

  • 阻塞分配与非阻塞分配,由系统参数 ZStallOnOutOfMemory 控制,默认阻塞分配。阻塞分配时,如果分配失败,则触发 GC,等待 GC 结束后再次分配,直到分配成功。

自从 JDK10 中的引入了 JEP 304: Garbage Collector Interface 后,OpenJDK 定义了一整套关于 GC 的虚方法,供具体的 GC 算法实现。极大了简化了开发难度和代码的可维护性。

JEP 304 定义了 CollectedHeap 类,每个 GC 都需要实现。CollectedHeap 类负责驱动 HotSpot 的 GC,以及和其他模块的交互。GC 应当实现如下功能:

  • CollectedHeap 的子类;
  • BarrierSet 集合类的实现,提供在运行时各种屏障功能;
  • CollectorPolicy 类的实现;
  • GCInterpreterSupport 的实现,提供 GC 在解释执行时各种屏障功能(使用汇编指令);
  • GCC1Support 的实现,提供 GC 在 C1 编译代码中各种屏障功能;
  • GCC2Support 的实现,提供 GC 在 C2 编译代码中各种屏障功能;
  • 最终 GC 指定参数的初始化;
  • 一个 MemoryService,提供内存池、内存管理等。

通常地,对象分配的入口在 InstanceKlass::allocate_instance,该方法调用 heap->obj_allocate()进行分配。

对象分配一般遵循如下流程:

ZCollectedHeap 重载了 CollectedHeap 的方法,其中包含了对象分配的相关方法。而核心逻辑在放在 ZHeap 中。ZCollectedHeap 中主要的成员方法如下:

ZHeap 是 ZGC 内存管理的核心类。主要变量如下:

对象分配的主要逻辑在 ZObjectAllocator。

ZObjectAllocator 的主要变量如下:

对象分配的核心方法是 alloc_object

  • 按对象的 size,决定调用 small page 分配、medium page 分配还是 large page 分配。
  • 分配入参除了 size 外,还有个 ZAllocationFlags。ZAllocationFlags 是个 8bit 的配置参数。

large page 分配方法如下:

  • small page 分配和 medium page 分配都会调用到 alloc_object_in_shared_page 方法;
  • 小对象和中对象的分配略有不同,小对象是根据所在 CPU 从共享页面中分配对象。而中对象则是全部线程共享一个 medium page。

page 内的对象分配主要是两个方法 alloc_object_atomic 和 alloc_object,其中 alloc_object 没有锁竞争,主要用于新 page 的第一次对象分配。

先看 alloc_object_atomic

再看看 alloc_object

可以看到上述两个方法在分配结束都调用了 ZAddress::good 返回 colored pointer。看看 ZAddress::good 的实现。

  • good 方法其实挺简单,先取 4 位染色值,然后或操作实际地址,获取 colored pointer。
  • colored pointer 将在 load barrier 中使用,后文将详细介绍 load barrier 机制。

对于并发 GC 来说,最复杂的事情在于 GC worker 在标记-整理,而 Java 线程(Mutator)同时还在不断的创建新对象、修改字段,不停的更新对象引用关系。因此并发 GC 一般采用两种策略 Incremental Update(增量更新、CMS) 和 SATB(snapshot at beginning、G1) ,两种策略网上介绍文章很多,此处不再赘述。

SATB 重点关注引用关系的删除,可以参考我之前的博客JVM G1 源码分析(四)- Dirty Card Queue Set(https://blog.csdn.net/a860MHz/article/details/97631300),而 Incremental Update 重点关注引用关系的增加。

Win7蓝屏beginning dump of physical memory【WIN7蓝屏怎么处理】

而 ZGC 并没有采取类似方式,而是借助读屏障、colored pointer 来实现并发标记-整理。

  • 一小段在最佳位置由 JIT 注入的代码
    • 从堆中加载一个对象引用时
  • 检查这个引用是否是 bad color
    • 如果是,则自愈

从堆中加载对象引用时触发 load barrier。

当引用类型 n 被赋值修改后,在下一次使用 n 前,会测试 n 的染色指针是否为 good。此时测试为 bad color 可知 n 的引用地址进行过修改,需要自愈。

触发 load barrier 的伪代码如下:

对应的汇编代码:

zGlobals.hpp

zAddress.inline.hpp

从以上两段代码可以很清晰看出,colored pointer 的状态是 Good/WeakGood/Bad/WeakBad 由 GoodMask 及 BadMask 来测定。

同时,GoodMask、BadMask 由 GC 所处的阶段决定。

比如,ZGC 初始化后,地址视图为 Remapped,GoodMask 是 100,BadMask 是 011。进入标记阶段后,地址视图切换为 M0,GoodMask 和 BadMask 变更为 001 和 110。

accessDecorators.cpp

zBarrierSet.cpp

load barrier 的入口代码在 zBarrier.inline.hpp

  • barrier 接收两个模板函数指针,根据输入函数的执行结果决定走 fast path 还是 slow path;
  • fast path 仅需一次类型转换;
  • slow path 执行后,还需要进行指针自愈,最后返回前做类型转换。

fast path 根据执行场景和 colored pointer 不同有不少选择,使用比较多的如下:zBarrier.inline.hpp

同样的 slow path 根据场景不同,也有好几个选择,但是使用较多的就是 load_barrier_on_oop_slow_path zBarrier.cpp

zHeap.inline.cpp zRelocate.cpp

zBarrier.cpp zHeap.inline.cpp

zBarrier.inline.hpp

总的来说,ZGC 的 load barrier 是个非常精巧的设计,借助 colored pointer 和多视图,有效地避免了 load barrier 带来的性能压力。

我们是线索智能营销团队,负责字节跳动线索营销型产品研发。致力于帮助百万中小广告主更快速、更高效地获取高价值客户。利用字节的精准流量、数据智能技术,为广告主提供了具有线索获取、线索跟进、培育销转和再营销增长闭环的一站式客户线索管理平台。期待您的加入。

社招:https://job.toutiao.com/s/LK66Cf7

实习生:https://job.toutiao.com/s/LK61qf7

用尿洗头,这对夫妻过了9年野人生活

这是一条有味道的推送……

今天故事的主角是一对外国夫妻,34岁的荷兰人Miriam和64岁的新西兰人Peter。

Via Channel 5

9年前,他们放弃了原来的工作、房子和社交圈子,搬进了新西兰的荒原。每天用尿洗头,用弓箭,过上了原始人的生活。

其实他们在认识对方之前,一切都和普通人一样。

Miriam是一个撑杆跳运动员,还参加过青年奥林匹克运动会。

Via Channel 5

她在荷兰的村庄长大,父母在法国经营一家B&B。小时候她就向往世外桃源的禅意生活,所以22岁那年她去了印度旅行,在那里认识了后来的丈夫Peter。

Peter原本在一家新西兰大学做生态学讲师。厌倦了教书生活的他,也给自己订了一张去印度的机票。

Via Channel 5

两人在旅行中遇到后一拍即合,不仅擦出了爱情的火花,然后一起做出了一个惊人的决定。

卖掉所有家产,去深山里过原始人的生活,一过就是9年。

In 2010, Lancewood, who is Dutch, and her now-husband Peter, a long-haired, weather-beaten former lecturer at Massey University, ended the lease on their white weatherboard cottage and headed into the South Marlborough wilderness.

2010年,Miriam和Peter,结束了他们房子的租约并前往新西兰马尔堡的荒野。

Via Stuff.com

Via Channel 5

Win7蓝屏beginning dump of physical memory【WIN7蓝屏怎么处理】

Everything they owned was stuffed into two 85-litre backpacks. They had 12 buckets of food to last them through the winter – honey, milk powder, flour, yeast, beans, rice and vegetables they’d grown and dried.

他们把拥有的所有东西都塞进了两个85升的背包中。他们带了12桶食物: 蜂蜜,奶粉,面粉,酵母,豆类,大米和自己种的脱水蔬菜。

Via Stuff.com

这对夫妻一直居无定所,四处为家。荒野生活教会了他们很多生存技能。

Some things only life in the wilderness could teach. Lancewood learnt how to be alone, how to be afraid, how to be bored. She learnt how to trap animals, skin and butcher them. She learnt how to cross a river, how to build a hut. She discovered the benefits of sleeping more than 12 hours a day.

在荒野中生活,Miriam学会了如何独处,体验到了害怕和无聊。她学会了如何做陷阱捕捉动物,剥皮和屠宰。如何过河,建造小屋。 她发现了每天睡眠超过12小时的好处。

Via Stuff.com

ViaMurdo Macleod/Observer

这对夫妇独立于社会,但彼此依赖。平日里Miriam负责,Peter负责砍柴做饭。

Via Channel 5

When it comes to survival Peter is tasked with the cooking while Miriam takes on the role of gatherer, hunting animals for their meat using a bow and arrow, something she admits is a far cry from her former life. It took her two years to teach herself how to hunt.

为了生存,Miriam不得不用弓箭,这与她以前的素食主义生活相去甚远。

Via Daily Mail

’At the beginning it was quite shocking, I killed something it was quite traumatic’ she adds.

’But then you eat it and it’s so filled with energy. I feel a bit like I become that hare or I become that goat – a bit wilder in a way.’

起初我非常痛苦,因为我要残忍地杀害他们。但是你吃了它,就充满了能量。 我觉得有点像我变成那只野兔或者那只山羊 ,变得更有野性。

Via Daily Mail

野外生活要怎么清洁呢?

这对夫妻也有惊人的方法,用自己的尿!!

Via Channel 5

After asking the host to fill a cup up with his own they head down to the stream where, after wetting their heads, she instructs him to pour the urine over his head, allowing it to soak for 20 minutes before rinsing.

Miriam说自己需要洗头的时候就跑到小溪边,把头发弄湿,然后把一小杯尿浇在头上,浸泡20分钟,再漂洗干净。

Via Daily Mail

有时候他们也会搭便车从石器时代溜回大城市发送电子邮件或补充供应。这算不算作弊呢?

Peter disagrees. “Because we’re living outside society, there are no rules. We can move from the stone age to the big city and back. It’s a unique combination of primitive living and modernity.”

Peter不同意。 “因为我们生活在社会之外,本来就没有规则可寻。 我们可以从石器时代搬到大城市再回来。 它是原始生活和现代社会的独特结合。”

Via The Guardian

目前,这对夫妻也没有决定什么时候回归文明社会,或是不回去。

Miriam说她只想过不一样的生活。

”If you grow up in a poor household, you just want to get some physical security, and the possessions that go with it,” she says.

“如果你在一个贫穷的家庭中长大,你只是想获得一些物质上的安全感,以及随之而来的财产,”她说。

”When you come out of a rich background, like me, then you can say, ’Oh jeez, actually, all those possessions don’t make you happy.’”

“只有当你真正放弃了物质生活,你才会发现所有这些财产并不能让你开心。”

Via The Guardian

你会愿意放下所有,来一次荒野求生吗?

文:小亮亮

图:外媒、网络

用户评论

惦着脚尖摘太阳

遇到这种情况真是让人头疼!我之前也经常碰到Win7蓝屏,当时还查了好多资料也没能解决,后来偶然发现清理内存很有效,建议大家看看有没有程序占用太大,赶紧释放一下吧

    有13位网友表示赞同!

浮世繁华

win7真的太容易蓝屏了,有时候刚打开电脑就蹦出一个蓝屏,这还没算完,还会报这个beginning dump of physical memory,也不知道怎么解决啊!是不是系统文件被病毒感染了?

    有15位网友表示赞同!

不忘初心

我的Win7用到现在都没蓝屏过,看来运气比较好。如果遇到这种情况,建议先检查电脑硬件的运作状况,还有看看最近有没有安装新软件导致的问题,总之不能慌张,冷静地进行分析和处理.

    有19位网友表示赞同!

呆檬

这个“physical memory dump”听着就像专业程序员用的词啊,我这种小白根本看不懂... 希望能详细点讲解一下, layman's terms里解释下为什么蓝屏还有啥解决方法

    有8位网友表示赞同!

ok绷遮不住我颓废的伤あ

写得真好!刚好我的Win7又蓝屏了,这次看到这个“physical memory dump”, 突然觉得好像能找到一些线索!要赶紧试试这些方法!希望可以尽快解决问题...

    有9位网友表示赞同!

等量代换

说真的,蓝屏的解决方案真的是一成不变的,格式化重装也是办法之一吧 ?不过每次都是很麻烦的操作啊,希望这篇文章能更新一些新方法

    有18位网友表示赞同!

巴黎盛开的樱花

我Win7系统一直还挺稳定的,偶尔也会出现一下类似情况,主要是磁盘空间满了之后就容易出问题,一定要定期清理垃圾文件,保持足够的内存空闲

    有10位网友表示赞同!

醉枫染墨

这个蓝屏的问题真是让人无比头疼!每次都是电脑突然闪退,然后就报这一堆英文错误信息,看着就烦躁… 希望能有更直白的中文解释和操作方法,这样才能更容易上手...

    有15位网友表示赞同!

夜晟洛

我之前遇到过类似问题,后来发现是显卡驱动出现了问题,将显卡驱动升级或者更新后就好了,这个物理内存的dump文件内容也可能是存储在日志文件中的驱动信息?

    有10位网友表示赞同!

玻璃渣子

对于技术小白来说,这篇文章解释有点深奥,希望能提供一些更具体的步骤和图解,这样更容易理解和操作!期待后续文章能更加深入地讲解Win7蓝屏问题以及解决方法!

    有11位网友表示赞同!

执笔画眉

这个"beginning dump of physical memory"听起来确实很专业啊,感觉像是工程师会说的话... 但是我这种一般用户真的很难懂.... 希望能提供一些更通俗易懂的解释和解决方法

    有12位网友表示赞同!

孤者何惧

我win7系统用的很久了,最近出现蓝屏越来越频繁,这次终于知道怎么回事了!就是这个物理内存dump file导致的问题。明天就去试试看文中提到的那些解决方法!

    有10位网友表示赞同!

浅嫣婉语

看到你们都在抱怨Win7蓝屏,我也表示很认同,这系统确实是容易出问题... 之前也遇到过很多次类似情况,浪费了很多时间去处理...

    有18位网友表示赞同!

罪歌

好啦,别再抱怨了!既然这个文章已经提到了 “physical memory dump”,那应该是有解决方法的,我们还是积极一点,按照文章的方法去尝试吧!

    有14位网友表示赞同!

金橙橙。-

Win7蓝屏真是个头疼的问题!每次都让人抓狂!看到这篇文章挺希望他能提供有效且简单易行的方法,解决我的烦恼...

    有15位网友表示赞同!

暖瞳

蓝屏这个事情真的非常困扰人啊!明明电脑用的好好的,突然就报出错误信息,各种文件丢失... 这要是放在关键时刻真让人崩溃!

    有20位网友表示赞同!

还未走i

希望这篇文章能带来实际帮助!我最近也遇到了Windows7蓝屏频繁的问题,每次看到蓝色屏幕,都让人感觉像是在看恐怖片一样...

    有13位网友表示赞同!

百合的盛世恋

其实对于Win7系统来说,蓝屏问题很常见,我们应该尽量去预防和解决,而不是被蓝屏困扰。希望所有遇到这个问题的人都能早日摆脱烦恼!

    有6位网友表示赞同!

旧事酒浓

我也遇到过这种“beginning dump of physical memory”的错误,当时以为是电脑坏掉了... 後来才发现是系统文件损坏导致的,通过一些操作修复即可恢复正常...

    有16位网友表示赞同!

【Win7蓝屏beginning dump of physical memory【WIN7蓝屏怎么处理】】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:win7蓝牙在哪里 win7怎么调出蓝牙【详解】、win7 蓝牙在哪儿 下一篇:win7自带office2007怎么卸载 win7自带office2007卸载方法【win7系统office2007怎么卸载干净】