Giter Club home page Giter Club logo

jvm's Introduction

Java Virtual Machine

Introdução

Implementação em C++ de uma Java Virtual Machine simplificada com base no Java 2 para a disciplina de Software Básico na Universidade de Brasília do semestre 2/2015.

A maior parte das instruções presentes no bytecode do Java 2 estão implementadas, exceto: monitorenter, monitorexit, athrow.

A implementação também simula funcionalidades básicas de I/O (e.g. System.out.println()) e de strings.

Instruções e Recomendações

  • Siga o fluxograma proposto e sugira melhorias.
  • Para criar sua funcionalidade, sempre crie um branch a partir do dev.
  • Sempre faça pull antes de começar a trabalhar e de fazer um push.
  • Sempre crie commits explicativos, para que possamos voltar pra algum commit caso dê algo errado.
  • Antes de fazer o merge de sua funcionalidade no dev, sempre faça o rebase com o dev, resolva os conflitos (quando houver), e verifique se está tudo funcionando.
  • Se a funcionalidade estiver pronta (e também compilando e funcionando) após o rebase com o dev, faça o merge com o dev.
  • Documente o código usando o Doxygen no padrão Javadoc.
  • Sempre que criar um novo arquivo .c/.cpp, adicione-o em CMakeLists.txt.

Pastas do Projeto

  • Os arquivos .c/.cpp estão contidos na pasta /src
  • Os arquivos .h/.hpp estão contidos na pasta /include
  • Exemplos de programas .java (e seus respectivos .class) estão em /exemplos
  • A documentação está contida na pasta /docs

Geração de Arquivos .class

Para gerar um arquivo .class de um programa .java, rode o seguinte comando:
javac -source 1.2 -target 1.2 programa.java

Compilação do Projeto

Para compilar o projeto, primeiro crie uma pasta na raiz do projeto:
mkdir build && cd build
Com isso feito, rode o CMake e faça o make:
cmake .. && make
O arquivo executável será então criado, pronto para ser executado.

Execução

  • ./jvm arquivo.class (irá executar o programa contido em arquivo.class)
  • ./jvm arquivo.class saida.txt (irá executar o programa contido em arquivo.class e irá mostrar a estrutura formatada do arquivo .class em saida.txt)

Existe o arquivo Test.class na pasta examples, um simples programa que calcula o 42º elemento da sequência de Fibonacci, você pode usar ele como teste para a primeira execução. Lembre-se de colocar o arquivo .class no mesmo diretório que o executável.

Além disso, verifique se a pasta java se encontra no mesmo diretório que o executável, para que a classe Object.class possa ser encontrada pela JVM. O CMake irá automatizar isso, mas saiba disso caso compile o projeto de outra maneira.

Gerando a Documentação

Para gerar a documentação, rode o seguinte comando na raiz do projeto: doxygen
Com isso feito, a documentação em HTML estará em doxygen/html/ e em LaTeX estará em doxygen/latex/.

Referências

Desenvolvedores

  • Ana Paulino
  • Arthur Emídio
  • Gabriella Esteves
  • Matheus Andrade
  • Matheus Bastos

jvm's People

Contributors

arthuremidio avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.