自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Go内存分配(三、内存管理组件和总结)

Go语言内存分配器采用多级缓存机制,包含线程缓存(mcache)、中心缓存(mcentral)和页堆(mheap)三个层级组件。mcache为每个处理器私有,用于微对象(0-16B)和小对象(16B-32KB)的无锁分配;mcentral为全局中心缓存,提供特定大小的mspan;mheap管理大对象(>32KB)和向操作系统申请内存。基本单元mspan管理8KB页的内存块,通过67种跨度类(size class)实现高效内存分配。

2025-06-25 23:03:53 626

原创 Go内存分配详解(二、虚拟内存布局和地址空间)

Go语言在1.11版本前采用连续内存布局,将虚拟内存划分为spans(512MB)、bitmap(16GB)和arena(512GB)三个区域。为解决C与Go混合使用时内存冲突问题,1.11版本改为稀疏内存布局,使用二维heapArena数组管理64MB内存单元。运行时通过操作系统抽象层管理内存状态转换,支持mmap等系统调用实现跨平台内存管理。稀疏内存解决了地址冲突问题,但增加了管理复杂度。

2025-06-25 22:25:54 823

原创 Go内存分配详解(一、概述和设计原理)

Go语言内存管理采用TCMalloc算法实现高效分配,核心机制包括:1) 批量预申请系统内存,减少系统调用;2) 分级管理降低锁粒度;3) 对象回收时优先复用内存块,闲置过多才归还系统。内存分为栈区(编译器管理)和堆区(分配器+GC管理)。分配器采用线性分配器(指针移动式)和空闲链表两种方法,通过虚拟内存布局优化地址空间利用,实现高性能内存管理。

2025-06-25 22:07:05 979

转载 一文了解JVM

转载于:https://segmentfault.com/a/1190000019845827一、什么是JVMJVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是平台无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在

2021-07-05 15:43:06 194

原创 Go中slice作为参数传递注意点

Go中slice作为参数传递注意点slice 本质上是基于数组实现的当传参时,函数接收到的参数是数组切片的一个复制,虽然两个是不同的变量,但是它们都有一个指向同一个地址空间的array指针,当修改一个数组切片时,另外一个也会改变,所以数组切片看起来是引用传递,其实是值传递。// 案例type TestStruct struct { Id uint32 Num uint32}...

2018-11-28 11:50:49 2090

原创 Go语言slice基本原理

slice 的本质slice 本质上是基于数组实现的,slice 可以看作是由三个元素组成的结构体: struct slice { ptr len cap} 其中 ptr 是指向底层数组的指针, len 表示当前 slice 中元素的数量, cap 表示当前底层数组大小.我们用 make 来创建 slice 的时候, 最多可以指定三个参数: ...

2018-11-27 15:50:51 491

转载 Go中Map类型和Slice类型的传递

转自https://www.cnblogs.com/snowInPluto/p/7477365.html关于 Go 中 Map 类型和 Slice 类型的传递Map 类型先看例子 m1:func main() { m := make(map[int]int) mdMap(m) fmt.Println(m)}func mdMap(m map[int]int) { ...

2018-06-28 14:47:56 412

原创 Golang中Bit数组的实现

Go语言实现Bit数组常用方法Go语言里的集合一般会用map[T]bool这种形式来表示,T代表元素类型。集合用map类型来表示虽然非常灵活,但我们可以以一种更好的形式来表示它。例如在数据流分析领域,集合元素通常是一个非负整数,集合会包含很多元素,并且集合会经常进行并集、交集操作,这种情况下,bit数组会比map表现更加理想。一个bit数组通常会用一个无符号数或者称之为“字”的slice来...

2018-05-23 12:12:49 2633

原创 git常用操作命令

1.创建版本库:在没有库的情况下,刚开始创建仓库的时候才需要。什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。通过git init命令把这个目录变成Git可以管理的仓库:$ git initInitialized em...

2018-05-16 17:48:08 229

原创 Redis在Windows下的部署及开启多个端口服务

一、以默认端口启动和安装服务器1.安装服务redis-server --service-install redis.windows.conf2.启动服务redis-server --service-start3.停止服务redis-server --service-stop二、开启多个端口服务器1.配置文件将redis.windows-ser

2018-03-07 12:59:24 6290 1

转载 Java += 操作符实质

##Java += 操作符实质###问题 我之前以为: i += j 等同于 i = i + j; 但假设有:int i = 5;long j = 8;这时 i = i + j 不能编译,但 i += j 却可以编译。这说明两者还是有差别的 这是否意味着,i += j,实际是等同于 i= (type of i) (i + j)呢?###回答 这个问题,其实官方

2017-09-22 18:27:16 215

转载 Java中的Switch对整型、字符型、字符串型的具体实现细节

Java中的Switch对整型、字符型、字符串型的具体实现细节    Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进。到目前为止switch支持这样几种数据类型:byte short int char String 。但是,作为一个程序员我们不仅要知道他有多么好用,还要知道它是如何实现的,witch对整型的支持是怎么实现的呢?对字符型是怎么实

2017-09-20 16:42:32 272

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除