{"id":18982997,"url":"https://github.com/openpatch/java-memory-playground","last_synced_at":"2026-03-14T15:45:58.056Z","repository":{"id":210102295,"uuid":"725020384","full_name":"openpatch/java-memory-playground","owner":"openpatch","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-25T21:50:38.000Z","size":354,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-11-08T16:15:28.067Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://jmp.openpatch.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openpatch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-29T09:20:17.000Z","updated_at":"2024-09-28T10:46:13.000Z","dependencies_parsed_at":"2023-11-30T20:29:35.900Z","dependency_job_id":"238542b7-022f-4c72-9761-3bbc56bae312","html_url":"https://github.com/openpatch/java-memory-playground","commit_stats":null,"previous_names":["openpatch/java-memory-playground"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpatch%2Fjava-memory-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpatch%2Fjava-memory-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpatch%2Fjava-memory-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpatch%2Fjava-memory-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openpatch","download_url":"https://codeload.github.com/openpatch/java-memory-playground/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232076580,"owners_count":18469236,"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-08T16:15:35.905Z","updated_at":"2026-03-14T15:45:58.047Z","avatar_url":"https://github.com/openpatch.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Memory Playground\n\nA visual playground for understanding the internals of the stack and heap in Java applications. Create interactive diagrams to visualize objects, references, variables, and method calls.\n\n## For Users\n\n### Using the Playground\n\nVisit **[jmp.openpatch.org](https://jmp.openpatch.org)** to start using the Java Memory Playground in your browser.\n\n### Features\n\n- **Visual Memory Modeling**: Create and visualize Java objects, variables, and method calls\n- **Stack and Heap Visualization**: See how the stack (method calls and local variables) and heap (objects) interact\n- **References**: Connect variables to objects with visual reference arrows\n- **Class Definitions**: Define custom classes with attributes\n- **Garbage Collection**: Simulate garbage collection to see which objects would be removed\n\n### Saving and Sharing\n\nWhen you click the **\"Save (URL)\"** button, your current project state is saved directly to the URL. This means:\n\n- **Persistence**: The URL contains all your work - no account needed\n- **Sharing**: Copy and share the URL with others to share your memory diagram\n- **Reloading**: Bookmark or save the URL to return to your project later\n\nThe URL uses compressed encoding to efficiently store your entire project state in the browser's address bar.\n\n### Teaching Use Case\n\nFor educators, the Java Memory Playground is perfect for teaching memory concepts:\n\n1. **Prepare**: Create a memory diagram showing a specific concept (linked lists, object references, method call stack, etc.)\n2. **Save**: Click \"Save (URL)\" to encode your diagram in the URL\n3. **Share**: Copy the URL and share it with your students via email, LMS, or messaging\n4. **Learn**: Students can open the URL to see your exact diagram, explore it, and modify it for learning\n\nNo setup or installation required for students - they just open the link and start learning!\n\n## For Developers\n\n### Prerequisites\n\n- Node.js (v14 or higher)\n- npm\n\n### Installation\n\nClone the repository and install dependencies:\n\n```sh\ngit clone https://github.com/openpatch/java-memory-playground.git\ncd java-memory-playground\nnpm install\n```\n\n### Development\n\nStart the development server with hot reload:\n\n```sh\nnpm run dev\n```\n\nThe application will be available at `http://localhost:5173` (or another port if 5173 is in use).\n\n### Building\n\nBuild the project for production:\n\n```sh\nnpm run build\n```\n\nThe build output will be in the `dist` directory.\n\n### Testing\n\nRun the test suite:\n\n```sh\nnpm test\n```\n\n### Project Structure\n\n- `src/` - Source code\n  - `MemoryView.tsx` - Main canvas for creating memory diagrams\n  - `ConfigView.tsx` - Configuration view for defining classes and options\n  - `store.ts` - State management with URL persistence\n  - `serde.ts` - Serialization/deserialization for URL encoding\n  - `memory.ts` - Type definitions for memory objects\n- `public/` - Static assets\n- `dist/` - Build output (generated)\n\n### Technologies\n\n- **React** - UI framework\n- **TypeScript** - Type-safe JavaScript\n- **Vite** - Build tool and dev server\n- **@xyflow/react** - Flow diagram rendering\n- **Zustand** - State management\n- **Pako** - Compression for URL encoding\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenpatch%2Fjava-memory-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenpatch%2Fjava-memory-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenpatch%2Fjava-memory-playground/lists"}