为什么这段代码执行两次直接占用了3600M的内存?

package main

import (
	"fmt"
	"github.com/golang/freetype/truetype"
	"io/ioutil"
	"os"
)

func main() {
	for i := 0; i < 2; i++ {
		newTrueTypeTest()
	}
	Pause()
}

func newTrueTypeTest() {
	bs, err := ioutil.ReadFile("SourceHanSansCN-Normal.ttf")
	if err != nil {
		panic(err)
	}
	ttf, err := truetype.Parse(bs)
	if err != nil {
		panic(err)
	}
	face := truetype.NewFace(ttf, &truetype.Options{Size: 800})
	defer face.Close()
	fmt.Println(face.Metrics().Height)
}

func Pause() {
	buf := make([]byte, 1)
	for {
		_, e := os.Stdin.Read(buf)
		if e != nil {
			panic(e)
		}
		if buf[0] == '\n' {
			break
		}
	}
}

image.png

我写了一个接口,功能是首先image包绘制一张图片,然后使用github.com/golang/freetype 这个库在图片上绘制文字。我第一次调用truetype.NewFace的时候会占用120M的内存,但是第二次请求这个接口的时候会瞬间占用3600M的内存,而且内存也不会被回收掉。网上搜索貌似没人遇到这样的问题。

SourceHanSansCN-Normal.ttf 是一个10M的字体文件

共 2 个回复


bbqw

是这个

"github.com/golang/freetype/truetype" package

出了问题仅仅在windows上。。。自己慢慢查看修改把,给你的提示就这么多,一步一步调试都能调出来

# 0