The RecursiveCharacterTextSplitter is not very good at getting nice overlaps. However it will always try to overlap the chunks, if possible. The overlap is decided by the size of the splits of the separator. So if the first separator does a good split (all chunks less than chunk_size), the others will not be used to get a finer overlap split.
For example:
You have chunk_size=500 and overlap=50
The first separator splits the document into 7 chunks with the following lengths:
[100, 300, 100, 100, 100]
The chunks will then be merged together until the next split in line will exceed the limit.
So chunks 0, 1, and 2 will be merged together to form a final document chunk. Since the last chunk in the merge (chunk 2), has size 100 which is bigger than the allowed overlap it will not be included in the next merge of chunks 3 and 4 thus giving no overlap.