TLAB的话会归还给内存池还是操作系统
时间: 2023-07-21 21:47:27 浏览: 37
TLAB(Thread Local Allocation Buffer)是一种线程本地内存分配器,它为每个线程分配一块私有的内存区域,用于线程的对象分配。当线程分配对象时,就从自己的TLAB中分配内存,这样可以减少线程之间的锁竞争,提高分配效率。
当一个线程的TLAB空间不足时,会向共享内存池申请一定大小的内存。当线程结束时,线程的TLAB会被释放,并将其中的未使用内存块返还给共享内存池,而不是归还给操作系统。这样可以避免频繁向操作系统申请和释放内存的开销,提高性能。
相关问题
什么情况下TLAB会被归还给共享内存池
TLAB(Thread Local Allocation Buffer)是一种线程本地内存分配器,它为每个线程分配一块私有的内存区域,用于线程的对象分配。当线程分配对象时,就从自己的TLAB中分配内存,当TLAB中的内存不够时,会向共享内存池申请一定大小的内存,这个过程被称为TLAB扩容。而当一个线程结束时,线程的TLAB会被释放,并将其中的未使用内存块返还给共享内存池,以便其他线程能够使用。
除了线程结束时,TLAB也会在以下情况下被归还给共享内存池:
1. 线程的TLAB空间不足,无法分配对象,需要向共享内存池申请更多的内存。
2. 线程的TLAB内存使用率过低,超过了一定比例(默认为50%),为了避免内存浪费,需要将未使用的内存返还给共享内存池。
3. 程序执行过程中出现了内存抖动(Memory Thrashing)的情况,即程序反复申请和释放内存,导致频繁进行TLAB扩容和回收,这时可以考虑将TLAB的大小设置得更大一些,或者直接禁用TLAB,让所有线程共享同一个内存池。
需要注意的是,TLAB的大小是可以动态调整的,可以根据程序的实际情况进行调整,以达到更好的性能表现。
空间内数据是被销毁还是归还给内存池了
如果一个对象的生命周期结束了,那么这个对象所占用的内存空间会被系统回收,而不是被销毁。当内存空间被回收时,这个空间会被归还给内存池或者操作系统,以供下次使用。
如果这个内存空间属于某个线程的TLAB,那么当这个线程的TLAB被归还给共享内存池时,其中的未使用内存块会被返还给共享内存池,以供其他线程使用。如果这个内存空间不属于任何线程的TLAB,那么当这个内存空间被回收时,这个空间会被归还给内存池或者操作系统,以供其他进程或者系统使用。
因此,空间内数据既没有被销毁也没有被归还给内存池,而是被系统回收并归还给内存池或者操作系统。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)