Given that RMI-IIOP does not support distributed garbage collection (unlike RMI-JRMP), do I need to do something explicitly to GC beans, or is it magically handled by the EJB framework?
It is the Containers' responsibility to handle distributed garbage collection. This is how EJB's were designed.
Looking at Stateful Session Beans (SFSB) or Entity Beans. When you write a SFSB, you must implement ejbActivate() and ejbPassivate(). Implementing these methods, mean that the container can passivate your bean, hence take it out of memory and store its state on disk or in a datastore somewhere.
The article also mentions the importance of "Dynamic Glue" which is not using statically generated stubs and skeletons. This is in fact possible with RMI-IIOP using DII (Dynamic Invoacation Interface), but he fails mention how this technology is used in building systems and why it is important. He says that it is why CORBA has failed, which is wrong. EJB is a logical extension of and most Containers are built on top of CORBA.
He also mentions the overheads of intra-vm calls. This is something that most products provide optimizations for and something he clearly hasn't researched as this is a feature that CORBA ORB's have supported for quite a while.