
در اکتبر ۲۰۲۵، تیم توسعه Go قابلیت جدیدی به نام Green Tea Garbage Collector را معرفی کرد که بهعنوان یک سیستم جمعآوری زباله (GC) آزمایشی در نسخهٔ Go 1.25 قابل استفاده است. این بهروزرسانی میتواند نحوهٔ مدیریت حافظه در برنامههای Go را بهطور قابلتوجهی بهبود دهد و مسیر زبان را به سمت کارایی بالاتر در آینده ترسیم کند.
در هر برنامهای که از حافظهٔ heap استفاده میکند، مشخص کردن زمان آزاد کردن حافظهای که دیگر استفاده نمیشود، یکی از مهمترین چالشهاست. در Go، این کار بهصورت خودکار توسط GC انجام میشود تا توسعهدهنده مجبور به مدیریت دستی حافظه نباشد.
قبلاً Go از الگوریتم «mark-and-sweep» مبتنی بر اشارهگرها (tri-color) استفاده میکرد که همزمان با اجرای برنامه فعالیت میکرد و سعی داشت زمان «pause» (توقف) را به حداقل برساند.
Green Tea GC یک پیادهسازی جدید و آزمایشی برای جمعآوری زباله در Go است که روی کارایی، مقیاسپذیری و استفادهٔ بهتر از معماری حافظهٔ مدرن تمرکز دارد. در این روش، بهجای اسکن تکتک اشیاء در heap، واحد اسکن به «spans» (بلاکهای حافظه) تغییر میکند.
span: بلوکی از حافظه که چندین شیء هماندازه را در خود جای میدهد و واحد اساسی مدیریت حافظهٔ Go است.
الگوریتم جدید بهجای دنبال کردن اشارهگرها از شیء به شیء، کل spanها را بهعنوان واحد کاری در نظر میگیرد. این رویکرد چند مزیت مهم دارد:
پردازش کل span باعث میشود حافظههایی که در نزدیکی هم هستند در cache پردازنده بارگذاری شوند، در نتیجه تعداد cache missها کاهش مییابد و عمل اسکن حافظه سریعتر میشود.
به جای کار با اشیاء پراکنده، کار روی spans به threadها اجازه میدهد کارهای بزرگتر و منسجمتری انجام دهند، که این موضوع میزان هماهنگی (synchronization) بین threadها را کمتر میکند.
در اغلب تست ها، Green Tea توانسته بین ۱۰٪ تا ۴۰٪ مصرف CPU مرتبط با GC را کاهش دهد — در نتیجه برنامهها زمان کمتری را در GC صرف میکنند.
تستهای اولیه نشان دادهاند که:
در بسیاری از برنامهها، GC کمتر از گذشته CPU را درگیر میکند.
در برخی سناریوها بهبودها چشمگیر است، اما در workloadهایی که اشیاء پراکندهاند ممکن است تأثیر کمتری مشاهده شود.
✔ کاهش مصرف CPU در GC
✔ بهتر شدن locality حافظه و عملکرد cache
✔ آماده شدن برای استفاده در معماریهای multi-core مدرن
این قابلیت هنوز آزمایشی است و برای برخی برنامهها ممکن است تأثیر کمی داشته باشد.
تا زمانی که بهعنوان گلوبال در نسخههای پایدار بهکار نرود، نیاز به ارزیابی دقیق برای استفادهٔ در پرداکشن دارد.
برای استفاده از Green Tea در پروژهٔ خود، کافیست هنگام کامپایل Go از متغیر محیطی زیر استفاده کنید:
GOEXPERIMENT=greenteagc go build
بدون نیاز به تغییر در کد برنامه.
Green Tea GC نشاندهندهٔ یک جهش بزرگ در مدیریت حافظهٔ Go است. با تمرکز بر طراحی موازی، بهینهسازی cache و کاهش سربار GC، این قابلیت میتواند راهنما و پیشدرآمدی برای آیندهٔ Go باشد. اگر شما هم با برنامههای بزرگ، سیستمهای توزیعشده یا workloadهای پر حافظه کار میکنید، Green Tea میتواند اجرای برنامهها را روانتر و سریعتر کند — هر چند باید قبل از استفادهٔ در پرداکشن آن را بهخوبی آزمایش کنید.