This is what I do, and it works ok for me.
At any given time I am doing a few things.
1) I'm in daily contact with code, mostly work, so basic language skills stay up. (I don't think this is a big problem area).
2) I study a specific topic, currently design
patterns, for however long it takes to get a good deep understanding (the topic may be strictly technical, java only, broader programming skills, architecture, ect.. ).
3) While studying I make a short list of good reference areas/books.
4) I have a daily routine that hits several java sites, browse the headlines, ect... to stay abreast of new tech.
I don't fight very hard to keep all the knowledge in my head. I try to keep a heads up as to what I will be working on, and if it something that I have studied I have a good place to get a refresher.
I find that if I get a good deep understanding of a topic, even if I can't remember the details I can always remember enough to know what/where I need to look for the answer.
I'd be really interested to hear what others do.