Critically analyse how the three limitations of the Java data types interact with one another. If memory efficiency is your prime criterion for choosing a data type, consider when and how this principle might come into conflict with maximum and minimum ranges. Identify strategies that you can use to balance these factors in selecting types effectively.