stab

史上最全GC原理

蓝咒 提交于 2021-01-27 11:01:04
史上最全GC原理 什么是垃圾 定义 释放已占用的内存,防止内存泄露 清除已经死亡或者长时间未使用的对象内存 语言特性 c++手动回收垃圾 忘记回收 回收多次 java 自动回收 如何定位垃圾 引用计数法 对象头中分配一片空间用于存储对象引用次数 程序执行过程中完成,非STW 注意:Recycler 算法可解决循环引用,但在多线程环境下,引用计数变更也要进行昂贵的同步操作,性能较低,早期的编程语言会采用此算法 根可达性分析算法 GC Root 虚拟机栈中引用的对象 public static void testGC(){ StackLocalParameter s = new StackLocalParameter(“localParameter”); s = null; } 方法区中类静态属性引用的变量 方法区中常量引用的对象 本地方法栈JNI中引用的对象 任何 native 接口都会使用某种本地方法栈,实现的本地方法接口是使用 C 连接模型的话,那么它的本地方法栈就是 C 栈。当线程调用 Java 方法时,虚拟机会创建一个新的栈帧并压入 Java 栈。然而当它调用的是本地方法时,虚拟机会保持 Java 栈不变,不再在线程的 Java 栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。 通过GC roots对象作为起点开始向下搜索引用的对象

exynos4412—链接脚本复习

て烟熏妆下的殇ゞ 提交于 2021-01-20 10:42:32
在u-boot下,定义变量, 编译,编译完后 使用arm-linux-nm arm 没有去头的二进制可执行文件   都在BSS段,均为初始化。 打印之后会出算随机值。   目前还处于uboot阶段,如果在根文件系统的话,加载器把二进制可执行文件加载到内存,并将BSS段清零。 放在BSS段的变量所对应的空间,在二进制可执行文件中不占空间。放在Data段才分配空间。 ld --help    默认链接脚本:arm-linux-ld -verbose 1 GNU ld (GNU Binutils) 2.20 . 1.20100303 2 Supported emulations: 3 armelf_linux_eabi 4 armelfb_linux_eabi 5 using internal linker script: 6 ================================================== 7 /* Script for -z combreloc: combine and sort reloc sections */ 8 OUTPUT_FORMAT( " elf32-littlearm " , " elf32-bigarm " , 9 " elf32-littlearm " )    //小端存储的arm 10 OUTPUT_ARCH(arm) 11

华为HCIA-传输介质简介

荒凉一梦 提交于 2021-01-19 12:34:22
链路 双绞线 光纤 同轴电缆 同轴电缆:粗电缆 10Base5 500米 细电缆 10Base2 200米 双绞线:橙白 橙 绿白 蓝 蓝白 绿 棕白 棕 1 2 3 6(1和2输出,3和6输入。用来传输数据,剩下的四根线用作电话线) T568A 绿白 绿 橙白 蓝 蓝白 橙 棕白 棕 三层以上的设备 路由 PC 防火墙等等可以配置IP的设备 二层设备 交换机 因为现在的设备是智能的,同类型设备的网卡会自动调整当A设备两个输出线发送数据到B设备的时候,B设备的网卡会自动将这两个线便跟为输入 双绞线 有效传输距离一百米 光纤(高锟发明) 单模(1310nm) 传输距离远 多模(850nm) 接口类型 ST(stab trist插入旋转) FC(Fernule Connect金属连接器)一般运营商使用 防灰尘能力强 SC(Square Connect方形连接器) 操作简单 不易氧化 LC(Lucent Connect光连接器) HUB为共享网络:转发数据是靠广播 一个HUB下联的设备都在冲突域中 交换机:转发数据是靠交换机内部学习的MAC地址表 CSMA/CD(载波侦听多路访问冲突检测)四个步骤: 先听再发 边听边发 冲突停发 延迟再发 来源: oschina 链接: https://my.oschina.net/u/4375265/blog/4912314

美团面试官问我: ZGC 的 Z 是什么意思

我怕爱的太早我们不能终老 提交于 2020-11-23 23:06:57
> 本文的阅读有一定的门槛,请先了解 GC 的基本只知识。 现代垃圾收集器的演进大部分都是往减少停顿方向发展。 像 CMS 就是分离出一些阶段使得应用线程可以和垃圾回收线程并发,当然还有利用回收线程的并行来减少停顿的时间。 基本上 STW 阶段都是利用多线程并行来减少停顿时间,而并发阶段不会有太多的回收线程工作,这是为了不和应用线程争抢 CPU,反正都并发了慢就慢点(不过还是得考虑内存分配速率)。 而 G1 可以认为是打开了另一个方向的大门: 只回收部分垃圾来减少停顿时间 。 不过为了达到只回收部分 reigon,每个 region 都需要 RememberSet 来记录各 region 之间的引用。这个内存的开销其实还是挺大的,可能会占据整堆的20%或以上。 并且 G1 还有写屏障的开销,虽说用了 logging wtire barrier,但也还是有开销的。 当然 CMS 也用了写屏障,不过逻辑比较简单,啥都没判断就单纯的记录。 其实 G1 相对于 CMS 只有在大堆的场景下才有优势,CMS 比较伤的是 remark 阶段,如果堆太大需要扫描的东西太多。 而 G1 在大堆的时候可以选择部分收集,所以停顿时间有优势。 今天的主角 ZGC 和 G1 一样是基于 reigon 的, 几乎所有阶段都是并发的,整堆扫描,部分收集 。 而且 ZGC 还不分代,就是没分新生代和老年代。

GCC 生成的符号表调试信息剖析

Deadly 提交于 2020-07-24 05:38:19
原文地址:http://blog.csdn.net/KataDoc360/article/details/3898016 GCC把C语言源文件('.c')编译成汇编语言文件('.s'); 汇编器把汇编语言文件翻译成目标文件('.o'); 最后由链接器链接所有的目标文件和有关的库生成可执行文件('a.out')。 如打开'-g'选项,GCC编译'.c'文件时,把附加的调试信息插进'.s'文件,这些调试信息经汇编器和链接器稍加转换一直传到可执行文件中。这些调试信息包括行号、变量的类型和作用域、函数名字、函数参数和函数的作用域等源文件的特性。 在某些目标文件中,调试信息用'.stab'打头的一类汇编指导命令表示,这些指导命令穿插在汇编代码中,这种调试信息格式叫'Stab',即符号表(Symbol table)。XCOFF和a.out目标文件格式采用Stab调试信息格式。此外,GCC也能在COFF和ECOFF目标文件格式中产生Stab。如要生成Stab调试信息,在GCC编译源文件时,打开编译选项'-gstabs+'(此选项将产生GNU调试器扩展的Stab的调试信息)或'-gstabs'。 汇编器处理'.stab'打头指导命令,把Stab中的调试信息填入'.o'文件的符号表和串表(string table)中,链接器合并所有'.o'文件生成只含有一个符号表和一个串表的可执行文件

Keil5配置GCC编译器编译STM32工程

自作多情 提交于 2020-04-24 14:10:23
Keil一般使用ARMCC编译MCU工程代码。偶然听说Keil也是支持内嵌GCC编译器的。于是尝试了网上博客所述的一些方法,最终找到了一篇博客 http://blog.csdn.net/lan120576664/article/details/46806991 按照文中所述,发现仍存在一些其他错误,后来又查找了其他相关资料,在这作以总结 一、下载GCC编译器 https://launchpad.net/gcc-arm-embedded/ 二、安装GCC GCC解压到keil的安装目录下面。如下图 三、配置Keil 如下图所示进行相关设置: Prefix:arm-none-eabi- Folder:D:\keil_MDK\Keil_v5\ARM\GCC\ (注:这里是刚刚安装的GCC所在位置) 四、配置工程设置 1.配置CC编译规则 注意勾选一下选项,填写规则 Misc Controls : -mcpu=cortex-m3 -mthumb -fdata-sections -ffunction-sections 注: 1.这里我用的cortex-m3,如果你是m4内核就改成4) 2.-mthumb的意义是:使用这个编译选项生成的目标文件是Thumb的 3.-fdata-sections和-ffunction-sections和下文连接规则一起说 2.配置Assembler编译规则