嵌入式golang占用内存高

golang怎么把interface转化为map

var src []map[string]stringvar dest []map[string]interface{}for i := range src { m := src[i] n := make(map[string]interface{}) for k,v := range m { n[k] = interface{}(v) } dest = append(dest, n)}

golang底层运行机制?

Golang的一大特色就是其简单高效的天然并发机制,使用goroutine和channel实现了CSP模型。 理解channel的底层运行机制对灵活运用golang开发并发程序有很大的帮助,看了Kavya的分享,然后结合golang runtime相关的源码(源码开源并且也是golang实现简直良心!

大多数的编程语言的并发编程模型是基于线程和内存同步访问控制,Go 的并发编程的模型则用 goroutine 和 channel 来替代。Goroutine 和线程类似,channel 和 mutex (用于内存同步访问控制)类似。

Channel 则天生就可以和其他 channel 组合。我们可以把收集各种子系统结果的 channel 输入到同一个 channel。Channel 还可以和 select, cancel,

为什么gc后堆区内存会变大?

首先得知道JVM堆内存分为old和 young ,young又由eden 和survivor组成 而 survivor又由s0和s1组成。

当Eden区域达到一定的量时,触发了Minor GC,即将Eden和S0中的存活的对象复制S1中 然后清空Eden和S0,然后下一次触发Minor GC时就将Eden和S1中的存活的对象复制S0中,然后清空Eden和S1 循环往复,当某个对象对复制次数达到16次,该对象就会被送到Old中。

如果我们手动将JVM内存设置小一点,GC会更明显。

在eclipse中设置,可以看到我们设置的JVM初始堆大小为128M ,再看内存,它的GC会更加频繁

Golang有自带的缓存函数吗如 Cache

主存一般是指内存,cache就是高速缓存,当CPU读取数据时会第一时间向cache提取,如果cache没有的话,就向内存提取,说白了职cache就是为了减轻内存的压力而设计的