Flight of the FINCH through the java wilderness

Michael Orlov, Moshe Sipper

Research output: Contribution to journalArticlepeer-review

68 Scopus citations


We describe Fertile Darwinian Bytecode Harvester (FINCH), a methodology for evolving Java bytecode, enabling the evolution of extant, unrestricted Java programs, or programs in other languages that compile to Java bytecode. Our approach is based upon the notion of compatible crossover, which produces correct programs by performing operand stack-based, local variables-based, and control flow-based compatibility checks on source and destination bytecode sections. This is in contrast to existing work that uses restricted subsets of the Java bytecode instruction set as a representation language for individuals in genetic programming. We demonstrate FINCH's unqualified success at solving a host of problems, including simple and complex regression, trail navigation, image classification, array sum, and tic-tac-toe. FINCH exploits the richness of the Java virtual machine architecture and type system, ultimately evolving human-readable solutions in the form of Java programs. The ability to evolve Java programs will hopefully lead to a valuable new tool in the software engineer's toolkit.

Original languageEnglish
Article number5685268
Pages (from-to)166-182
Number of pages17
JournalIEEE Transactions on Evolutionary Computation
Issue number2
StatePublished - 1 Apr 2011


  • Automatic programming
  • Java bytecode
  • genetic programming (GP)
  • software evolution

ASJC Scopus subject areas

  • Software
  • Theoretical Computer Science
  • Computational Theory and Mathematics


Dive into the research topics of 'Flight of the FINCH through the java wilderness'. Together they form a unique fingerprint.

Cite this