Vejamos… se seu bean tiver 30 atributos de 32 bytes, serão 960 bytes por bean.
Se você tiver 300.000 registros: 288.000.000 bytes ou 274MB.
Tem certeza que isso é muito? Ponha uma máquina de 2GB de ram e configure o Java para poder ocupar todo esse espaço. Uma boa política é também não carregar tudo na TreeView.
Outra coisa: procure só carregar na tree view os nós que forem abertos.
Outra opção é também repensar na arquitetura desse sistema. É impossível que um usuário consiga visualizar 300.000 registros.
Nem alguém com MUITA boa vontade não faz isso. Converse com os coboleiros e explique que o Windows é inferior ao OS/390… e então, reestruture o sistema para carregar só dados mais úteis.
Na pior das hipóteses, use um processo para criar uma pequena base intermediária (um buffer no disco do micro), e então use essa base para leitura.
Momento nostalgia: Esse dragão desenhado na capa do D&D original, ainda da TSR, me traz boas lembranças. 
Se não é o mesmo, lembra muito.