here are the contents of the FrontPage as of 2006-09-28
Apache_Harmony_Proposal_Spanish - Propuesta Inicial del proyecto Apache Harmony en castellano
Apache_Harmony_Proposal_Portuguese - Proposta Inicial do projeto Apache Harmony em português
Apache_Harmony_Proposal_Italian - Proposta iniziale del progetto Apache Harmony in italiano
Apache_Harmony_Proposal_Turkish - Teklifin Türkçe Versiyonu
Apache_Harmony_Proposal_Czech - Návrh v češtině
Apache_Harmony_Proposal_German - Deutsche Übersetzung des Antrags
Apache_Harmony_Proposal_Chinese - Apache Harmony Proposal in Chinese
Initial_FAQ_Spanish - Incomplete (FAQ in spanish - FAQ en castellano)
Initial_FAQ_Portuguese - Incomplete (FAQ in portuguese - FAQ em português)
Initial_FAQ_Italian - (FAQ in italian - FAQ in italiano)
HarmonyArchitecture Proposed Harmony Architecture (Overview)
HarmonyArchitectureItalian Architettura Proposta Per Harmony (Overview) (incompleta)
HarmonyArchitectureChinese Proposed Harmony Architecture (Overview) 中文
Resources
- IRC: #harmony on irc.freenode.net
Add yourself on our People page if you are interested in getting involved.
Mini Projects
The following have been suggested on the list and are either things that are needed, or good little experiments for interested people
* CommandLineCompiler Create a "javac" compatible command-line java compiler using the eclipse compiler
Motivations
- Focus on modular, interchangeable components
- exploit existing compilers, memory managers etc
- promote configurability (different components for different contexts)
- allow diversity in development approaches
- encourage large-scale contributions (here's a compiler)
- Bootstrap the project rapidly
- capture momentum
- seed the project with an existing VM-core (or cores)
- Design a clean core (or cores) from scratch
- do this concurrently with work on components in existing core/s
- the core should be lightweight
- multiple cores may make sense
- the needs of different contexts may require this
- competing approaches may be healthy
Requirements
- Nice Clean Super-Fast VM
- J2SE 5.0 Implementation
Performance - Performance Comparison of Java/.NET Runtimes
- Debuggability
- Platform Coverage (including Win32)
Existing work for pluggability
Boehm GC. NOTE: Kaffe has two GC thingies kaffe-gc and boehm-gc
Other usable components
- zlib
- fdlibm
- APR
Components
- VM
- GC
- kaffe-gc and boehm gc in kaffe
- simple copying gc and generational copying gc in SableVM
- Compiler
Bytecode Verifier (Note: BCEL, libgcj, IKVM)
- OS Layer (interfacing to files, sockets, threads)
GUI Layer (AWT/Swing) - GUI Toolkit Diagram
- JNLP
- Java plugin
Decisions
- Object Layout
- synchronization
- getting the class pointer
- does the object point to the vtable?
- how does the GC know about the layout of the object?
- plain old ordering and packing of the fields
- Method Dispatch
- c++-style vtables vs constant-time dispatch tables
- Exception Handling
- biased for speed
One Concerte Option
- Use two VMs as seeds
- Jikes RVM is a possible candidate
- Focus energy on cleaning it up and modularizing it. This is
- something we've already begun (see earlier post), but will take a lot of work.
- Get a very good optimizing compiler
- Get an efficient and modular memory management toolkit
- (MMTk)
- Need to deal with licensing issues and gain the consent of
- the community (not insurmountable)
- Need hard work to achieve modularity goal for whole VM
- Focus energy on cleaning it up and modularizing it. This is
- Another very different VM (kaffe?)
- amenable to modularization
- amenable to other components (drop in MMTk?)
- Jikes RVM is a possible candidate
- Leverage extensive experience to build new core/s
- Start with a clean slate
- Leverage all of our diverse experience (gcj, kaffe, ovm, joqe,
jnode,...)
- Work concurrently with above work on components in old core/s,
- miminize loss of momentum, try to really think it through carefully.
- May be sensible to develop more than one core
- Develop new components
- Extract components from existing work, apply to new VM/s
- Develop new components from scratch
- Encourage porting of existing compilers etc into this framework
Issues
- What do we do about com.sun.* internal classes?
- Process for getting bugs fixed in Classpath?
- Use java for bulk of the code (like JikesRVM?)
- modularity is compile-time?
- handling memory fragmentation in a long running process?
Volunteers with contributions
Random Thoughts
- write a new jikesrvm back end?
- write a new vm around llvm?
- m4 to speeup things?
- writing an excellent jit is not easy, reuse is perhaps more efficient, eg use LLVM for that chunk?
Bookmarks
Papers
A PORTABLE RESEARCH FRAMEWORK FOR THE EXECUTION OF JAVA BYTECODE
Cost-Effective Compilation Techniques for Java Just-in-Time Compilers
Articles
Tutorials
Dynamic Compilation and Adaptive Optimization in Virtual Machines
The Design and Implementation of the Jikes RVM Optmizing Compiler
The Design and Implementation of the Jalapeño Research VM for Java
Related Pages
IRC channels on irc.freenode.net
- #harmony
- #kaffe
- #classpath
- #sablevm