title: Is the creation of Java class files deterministic?
body: <p>When using the <em>same JDK</em> (i.e. the same <code>javac</code> executable), are the generated class files always identical? Can there be a difference depending on the <em>operating system</em> or <em>hardware</em>? Except of the JDK version, could there be any other factors resulting in differences? Are there any compiler options to avoid differences? Is a difference only possibly in theory or does Oracle's <code>javac</code> actually produce different class files for the same input and compiler options?</p>
  
  <p><strong>Update 1</strong> I'm interested in the <em>generation</em>, i.e. compiler output, not whether a class file can be <em>run</em> on various platforms.</p>
  
  <p><strong>Update 2</strong> By 'Same JDK', I also mean the same <code>javac</code> executable.</p>
  
  <p><strong>Update 3</strong> Distinction between theoretical difference and practical difference in Oracle's compilers.</p>
  
  <p>[EDIT, adding paraphrased question]<br>
  "What are the circumstances where the same javac executable,when run on a different platform, will produce different bytecode?" </p>