Window sizes are used by the receiver to let the sender know how much memory (buffer) it has for that particular TCP connection. The size will keep dropping until the receiver sends am ACK to the sender which acknowledges it has received the traffic the sender has sent. At this point in time the window size is increased to accommodate the size of the traffic which had been acknowledged. For example, if 8KB of data was sent, the window size would drop by 8KB. If then 3KB is acknowledged, it will be increased by 3KB at that point in time.
If the sender does not send an ACK, the window size will eventually drop to 0 and the sender will stop sending new traffic to the receiver until it receives an ACK (it will resend old data if it doesn't receive an ACK within a reasonable amount of time (this is called a retransmission)).
In regards to the maximum window size, this can be increased using the window scaling option. This option is used to allow more data to be sent before the sender has to wait for an ACK. This is to ensure that high latency links can still fully utilise their links (see Long Fat Networks and Bandwidth Delay Product for more information).
Also, please see this link for more information on both TCP windows and scaling.