Freelists

Master Free List
There is only one per segment. Every process has access to this so contention increases when several processes simultaneously insert.

Process Free Lists
These are explicitly created whenever the FREELISTS parameter has been specified in a CREATE/ALTER command. They are used to improve performance of OLTP applications with a high degree of concurrent transactions performing inserts or updates (requiring new space).
They improve performance but can waste disk space.

A block is put on a freelist if the free space in the block is greater than the space reserved by PCTFREE. A block is unlinked from a free list if the free space in the block is not enough to allow a new row insert, and if the percentage of the used space remains above PCTUSED.
Free space comes from 2 places. Blocks above the highwater mark that are allocated. Blocks that are below the highwater mark that have free space in them as just specified.
In each data block there is a flag to indicate if the block is linked in a free list chain.