2017-05-02 40 views
11

Kavramını açık bir şekilde açıklayacak kapsamlı bir kaynak bulamadım. Benim anlayışım, bir nesneye, yeni nesneler tahsis ettiği öğede bir miktar bellek verildiği. Rakip bir iş parçacığı, biraz ardışık bir ödev parçasıyla sonuçlanacaktır. İlk iş parçacığı TLAB'sinde boş alan biterse ne olur? Yeni bir cennet istemek ister mi?TLAB (Thread Local Allocation Buffer) nedir?

+0

Son sorunuzla ilgili olarak, yeni bir TLAB iş parçacığı için ayrılır sanırım. Basit bir optimizasyon gibi küçük bellek parçaları yerine TLAB'leri ayırmayı düşünün, kilit gerektirmek yerine sık sık iş parçacığı yerel hale getirin. – maaartinus

cevap

15

TLAB'nin fikri, iplikler arasındaki senkronizasyon ihtiyacını azaltmaktır. TLAB'leri kullanarak, herhangi bir iş parçacığının kullanabileceği bir alana sahip olması ve bu alanı kullanan tek iş parçacığı olmasını beklemesi nedeniyle bu gereksinim azalır. Bir TLAB'nin 100 nesne tutabileceğini varsayarsak, bir iş parçacığının yalnızca 101 nesneyi ayırırken daha fazla bellek olduğunu iddia etmek için bir kilitlemeye gerek duyması gerekir. TLAB'lar olmadan, bu her nesne için gerekli olacaktır. Dezavantajı elbette ki potansiyel olarak boşa harcanır. Büyük nesneler, tipik olarak bir senkronize bellek ayırma sıklığını azaltma avantajını geçersiz kıldığından bir TLAB'nin dışında tahsis edilir. Bazı nesneler bir TLAB'nin içine bile sığamayabilir.

Bir TLAB boyutunu -XX:TLABSize bayrağını kullanarak ayarlayabilirsiniz, ancak genellikle bu ayarlarla çözebileceğiniz bir sorun bulamazsanız, bu ayarlarla uğraşmanızı tavsiye etmiyorum.

+0

Teşekkürler. 1) Bir iplik bir TLAB'yi tahsis ettiğinde, yine de bir ipliğin, birinci ipliğin yaptığı alanda bir TLAB'yi tahsis etmemesi için bir kilit alması gerekir. Bu varsayım doğru mu? 2) Bir TLAB'ye uymayan her yeni nesneyi ayırmak için bir kilit alınması gerektiğinden, TLAB dışındaki bir nesneyi tahsis etmek her zaman pahalıdır. – user1745356

+1

0AB'den 99'a kadarki bir TLABfromu ve 100'den 199'a ofsetleri olduğunu iddia eden 2 numaralı ipi düşünün. Sözleşme, bir kez talep edildiğinde, 2. parçanın 0-99 arasında tahsis edemediğini ve 1'in 100-199'da dişin tahsis edilemeyeceğini belirtiyor. Hiçbir iş parçacığı, bu alanı gelecekteki ayırma arabelleği olarak da iddia edebilir. Bu şekilde, her bir nesne, her bir nesne varsayımsal yuvalardan birini alırsa, senkronize edilmeden 100 nesne tahsis edebilir. Bir TLAB'nin dışına çıkılması çok pahalı değildir, ancak bir TLAB içinde olduğundan daha pahalıdır, çünkü diğer iş parçacıkları ile iletişim kurmayı gerektirebilir. –

+0

Maalesef, sorum açık değilse, başka bir şekilde belirtmeye çalışacağım - iki rakip iş parçacığı bir sonraki 100 nesne için bellek ayırmak istiyorsa ve bir sonraki kullanılabilir bellek adresi 100'den başlıyorsa, o zaman kilit 100'den 199'a kadar adres alacaktır ve ikinci iş parçacığı 200 - 299'dur. Bu doğru mu? – user1745356

İlgili konular