Bom dia!
Quando tratamos em Java/JDBC a questão de conexões em banco de dados, é como o João disse, o Pool mantém um certo número de conexões abertas disponíveis com o banco de dados.
Existe uma parametrização de limitação de mínimo e máximo de conexões disponíveis. O mínimo define quantas conexões o pool gerará já no load. Este número cresce de acordo com a necessidade, até chegar ao limite máximo.
A questão do connection pool é com relação ao seu uso. Depende muito da codificação do sistema. Se o seu sistema, no login, disponibilizar uma conexão e mantê-la para aquele usuário, até o encerramento da sessão, você terá um número limitado de usuários "online"
Agora, vamos pensar grande. O sistema de mobile bank de um banco, tendo 5000 clientes simultâneos navegando no sistema. Não é boa prática você dimensionar um pool tão grande - nem tampouco limitar seu sistema de tal forma - ele deve estar disponível 99% de tempo (estou deixando 1% para manutenções de TI, rsrs).
Assim, na programação , disponibilizamos a conexão somente no momento em que ela for necessária, e no momento seguinte da ação - consulta, insert, etc., ela deve ser imediatamente devolvida. Deste modo, não é necessária configuração de um pool imenso para atender grande concorrência de acesso.
Quanto ao fechamento da conexão, ela pode ter vários motivos. O principal, é o restart do banco, que acarreta no encerramento de todas as conexões. Mas o pool, se devidamente configurado, pode fazer um teste de conexão antes de testar a aplicação. Se a conexão não estiver ok, ele descarta e estabelece uma nova, para garantir a entrega para a aplicação.
Bons estudos!