No está claro para mí lo que está tratando de lograr. Así que supongo que está tratando de asegurarse de que su código sea 100% compatible con Java 1.4, mientras que también intenta y hace uso de las mejoras (hipotéticas) en el compilador de códigos de bytes de Java 1.5. La manera simple es hacer dos compilaciones:
Compila con Java 1.4 para verificar que tu código sea compatible con la biblioteca Java 1.4.
Compila una segunda vez usando Java 1.5 con -source 1.4 y -target 1.4.
El problema es que esto sólo se detecta desajustes API estáticas, y se perderá los problemas de las que se utilizan las API de forma reflexiva o cuando las incompatibilidades están en comportamiento de la clase en lugar de firmas.
La otra cosa a tener en cuenta es que compilar Java en una plataforma nueva para ejecutar en una plataforma anterior no es probable que ayude ... si eso es lo que está tratando de lograr.
Los compiladores de código de bytes de Java no hacen mucho optimización, y por lo tanto una nueva versión de código de bytes no producirán mucho más rápido.
Es probable que los compiladores JIT mejoren significativamente de una publicación a otra, pero el compilador JIT es parte de la plataforma de ejecución.
El otro lugar donde las mejoras de rendimiento podrían ocurrir es en la implementación de las bibliotecas de clases Java, y estas también son parte de la plataforma de ejecución.
En resumen, si se compila el código con el compilador JDK 1.5 javac
y luego se ejecuta en una plataforma Java 1.4, no obtendrá el beneficio de mejoras en el rendimiento en Java 1.5.