{"id":19112081,"url":"https://github.com/nginx-clojure/jamvm","last_synced_at":"2025-02-22T11:30:17.643Z","repository":{"id":136468792,"uuid":"217985932","full_name":"nginx-clojure/jamvm","owner":"nginx-clojure","description":"A fork of inactive project  https://sourceforge.net/projects/jamvm/","archived":false,"fork":false,"pushed_at":"2019-10-28T07:10:16.000Z","size":1259,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-03T04:34:45.009Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nginx-clojure.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-28T07:07:40.000Z","updated_at":"2019-10-28T07:11:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"c987998a-bc35-4180-9304-f36cda5629ef","html_url":"https://github.com/nginx-clojure/jamvm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nginx-clojure%2Fjamvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nginx-clojure%2Fjamvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nginx-clojure%2Fjamvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nginx-clojure%2Fjamvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nginx-clojure","download_url":"https://codeload.github.com/nginx-clojure/jamvm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240170064,"owners_count":19759139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T04:31:27.256Z","updated_at":"2025-02-22T11:30:17.604Z","avatar_url":"https://github.com/nginx-clojure.png","language":"C","readme":"JamVM 2.0.0\n===========\n\nWelcome to the twenty-eighth release of JamVM!\n\nJamVM is an open-source Java Virtual Machine that aims to support the\nlatest version of the JVM specification, while at the same time being\ncompact and easy to understand.\n\nClass Libraries\n===============\n\nJamVM must be used in conjunction with a Java class-library to make\na full Java Runtime Environment.  Compatible class-libraries are GNU\nClasspath or the class-library from OpenJDK.\n\nGNU Classpath\n-------------\n\nGNU Classpath is a community-driven reimplementation of the Java\nclass-libraries.  For many years it was the only library supported by\nJamVM.  Since the open-sourcing of Java, development of GNU Classpath\nhas slowed but it is still active and maintained.  The latest release\nis 0.99, released on 16th March 2012.\n\nWhen configured for GNU Classpath, JamVM provides a shared library\n(libjvm.so) for use with the JNI Invocation API, and a standalone\nexecutable (jamvm) to run Java programs.\n\nGNU Classpath is mostly Java 1.5 compliant, with some APIs from Java 1.6.\nAlthough JamVM supports Java 7 and Java 8, these features are disabled\nwhen used with GNU Classpath.  GNU Classpath, however, is much smaller\nthan OpenJDK, which makes it suitable for embedded systems.\n\nBy default, if no class-library is specified when configuring JamVM,\nJamVM is built to use GNU Classpath. \n\nOpenJDK/IcedTea\n---------------\n\nOpenJDK is the official open-source implementation of the JDK resulting\nfrom the open-sourcing of Java in 2007.  It consists of a class-library,\na virtual machine (HotSpot) and a java compiler (plus other tools).\n\nJamVM is compatible with the class-library from OpenJDK 6, 7 and 8 (the\nlatest).  When configured for use with OpenJDK, JamVM provides a\nshared library (libjvm.so) which can be used to replace the libjvm.so\ncontaining HotSpot.  The existing OpenJDK launcher (java) is used, which\nnow runs JamVM.\n\nIcedTea is a build harness for OpenJDK that initially replaced encumbered\nparts of OpenJDK with free components.  In addition to HotSpot, IcedTea\nalso packages and supports alternative virtual machines such as JamVM.  To\nuse JamVM, the -jamvm option is given on the java command line.  This\ndirects the launcher to load the libjvm.so from the jamvm directory rather\nthan the standard server or client directory.\n\nThe easiest way to get OpenJDK/IcedTea is to install a pre-built package\nfor your system.  You can then replace HotSpot or the existing JamVM library\nwith the library you have built.\n\nSupported Platforms/Architectures\n=================================\n\nJamVM has been written for a Unix/Posix-compliant system.  Unfortunately,\nincompatibilities between Unixes still exist, and JamVM needs to use several\nnon-portable calls (mostly threading related).  In addition, some architecture\nspecific definitions are required (memory barriers, etc.).  Finally, the\nnative calling convention (or ABI) is both platform and architecture\ndependent.  This is needed by JamVM when constructing a call frame to invoke\na native method.  For most platform/architectures this is provided by\nhighly-efficient hand-written native assembler, although libffi is also\nsupported for all platforms (specified by --with-libffi when configuring).\nLibffi is less efficient than the hand-written assembler although recent\nversions of JamVM also includes stubs for common method signatures.\n\nThe following platforms/architectures are recognised by configure.  Those\nmarked with * must be configured to use libffi.\n\n- Linux: x86, x86_64, ARM, PowerPC, PowerPC64(*), MIPS, HPPA\n- FreeBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)\n- OpenBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)\n- Mac OS X/Darwin: x86, x86_64, ARM, PowerPC, PowerPC64\n- Solaris/OpenSolaris: x86, x86_64\n- KFreeBSD: x86\n\nJamVM \"Features\"\n================\n\nFor those interested in the design of virtual machines, JamVM includes a number\nof optimisations to improve speed and reduce foot-print.  A list, in no\nparticular order, is given below.\n\n- Uses native threading (posix threads).  Full thread implementation\n  including Thread.interrupt()\n\n- Object references are direct pointers (i.e. no handles)\n\n- Supports class loaders\n\n- Efficient thin locks for fast locking in uncontended cases (the\n  majority of locking) without using spin-locking\n\n- Two word object header to minimise heap overhead (lock word and\n  class pointer)\n\n- Execution engine supports many levels of optimisation (see\n  configure --help) from basic switched interpreter to inline-threaded\n  interpreter with stack-caching (aka code-copying JIT, equivalent\n  performance to a simple JIT).\n\n- Stop-the-world garbage collector, with separate mark/sweep\n  and mark/compact phases to minimise heap fragmentation\n\n- Thread suspension uses signals to reduce supend latency and improve\n  performance (no suspension checks during normal execution)\n\n- Full object finalisation support within the garbage collector\n  (with finaliser thread)\n\n- Full GC support for Soft, Weak and Phantom References.  References\n  are enqueued using a seperate thread (the reference handler)\n\n- Full GC support for class and class-loader unloading (including\n  associated shared libraries)\n\n- Garbage collector can run synchronously or asynchronously within its\n  own thread\n\n- String constants within class files are stored in hash table to\n  minimise class data overhead (string constants shared between all\n  classes)\n\n- Supports JNI and dynamic loading for use with standard libraries\n\n- Uses its own lightweight native interface for internal native methods\n  without overhead of JNI \n\n- VM support for invokedynamic (JSR 292)\n- VM support for type annotations (JSR 308)\n- VM support for lambda expressions (JSR 335)\n- VM support for method parameter reflection\n\n- JamVM is written in C, with a small amount of platform dependent\n  assembler, and is easily portable to other architectures.\n\n\nThat's it!\n\nRobert Lougher \u003crob@jamvm.org.uk\u003e\n30th July 2014.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnginx-clojure%2Fjamvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnginx-clojure%2Fjamvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnginx-clojure%2Fjamvm/lists"}