This paper describes a run-time specialization system for the Java language. One of the main difficulties of supporting the full Java language resides in a sound yet effective management of references to objects. This is because the specialization process may share references with the running application that executes the residual code, and because side-effects through those references by the specialization process could easily break the semantics of the running application. To cope with these difficulties, we single out a set of requirements that ensures correct run-time specialization. Based on them, we design and implement a run-time specialization system for the Java language. Our preliminary experiments reveal, for instance, approximately 20-25% speed-up factor for a ray-tracing application.