マイクラのサーバー、JavaからC言語に書き直したらメモリ消費量が16GBから16MBに激減。オブジェクト指向は愚かな考え

1 : 2026/04/27(月) 15:33:29.06 ID:GMSd2vTq0

Minecraftのサーバーは、16GBを超えるメモリを積んだPCで動かすのが当たり前になっている。そこに挑んだのが、Redditユーザー angelthebox(GitHub: 4ngel2769)氏の自作プロジェクト「Macerun」だ。16MBのフラッシュとOctal PSRAMを搭載したESP32-S3マイコン上で、Minecraft Java Edition 1.16.5のサーバーをベアメタルで動作させる。

特徴はJavaランタイムもLinuxカーネルも使わず、ソースコードはすべてC言語で記述されている点だ。FreeRTOS上で動作し、ネットワーク処理はlwIPの生TCPソケットを直接扱う。Minecraft Java版プロトコル754の制約されたサブセットを実装し、最大4名のプレイヤーが同時接続できる。

ワールドは事前生成ではなく、2Dバイオーム生成とバイリニア補間によるハイトマップをオンザフライで計算して送信する方式だ。プレイヤーによるブロック変更やインベントリは、ESP32のNVS(Non-Volatile Storage)パーティションに直接書き込む。

実装済みの機能は、サーバー接続、移動、ブロックの破壊と設置、2×2のインベントリ内クラフト、チャット、基本的な物理演算、体力と空腹の管理など。未実装はMobのスポーンとAI、3×3クラフトテーブル、チェストやかまどといったコンテナ、プレイヤー切断時のインベントリと座標の保存だ。

着想元は、PortalRunner氏がESP32向けに開発した同種プロジェクト「bareiron」。angelthebox氏は、bareironより機能は少ないがESP32-S3とFreeRTOS向けに一から書いた学習目的のプロジェクトだと説明している。ソースコードはGPL-3.0で公開され、ビルドにはESP-IDF v6.0.0が必要。機能追加のPull Requestも歓迎するとしている。

C言語自作のマイクラサーバー、ESP32-S3で動作 | FabScene(ファブシーン)
angelthebox氏が、ESP32-S3マイコン上でMinecraft Java Edition 1.16.5のサーバーをベアメタルで動作させるプロジェクト「Macerun」を公開した。JavaランタイムもLinuxもなく、すべてC言語とFreeRTOSで実装されている。最大4名が同時接続可能。
レス1番のリンク先のサムネイル画像
2 : 2026/04/27(月) 15:34:19.27 ID:1uYN9zOl0
糞beアホ過ぎワロタ
3 : 2026/04/27(月) 15:34:22.24 ID:GMSd2vTq0
Hello worldの実行ファイルが1MB近くになる時点で気がつくべきだった
4 : 2026/04/27(月) 15:34:39.13 ID:kcOzIYwz0
マイクラってクソみたいなグラフィックで15年ぐらい前のゲームだろ

最新PCでやる意味ある?

9 : 2026/04/27(月) 15:39:06.01 ID:H26S0BLU0
>>4
最新スマホで5chをやるようなものだな
18 : 2026/04/27(月) 15:54:35.27 ID:9QehZOKs0
>>4
パワーがあればあるほど快適になるゲームだから
5 : 2026/04/27(月) 15:35:30.81 ID:9nHBQgls0
ver12辺りから格段に重くなるんだよな、でもこれサーバーの話だろ
6 : 2026/04/27(月) 15:36:06.39 ID:80BeBWha0
16Mとか 1.6Mでも多い
7 : 2026/04/27(月) 15:36:34.11 ID:H/LxpU+t0
マイクラディーバレンタインか
8 : 2026/04/27(月) 15:37:03.32 ID:7pbBMy6H0
Cだけは甘えアセンブラも加えろ
10 : 2026/04/27(月) 15:39:35.85 ID:FkWn/h5r0
C言語プログラマーに最適化させるよりメモリ増設したほうが安い
11 : 2026/04/27(月) 15:39:39.29 ID:zrca07kK0
生成AIがマシン語を習得したらもっと凄いことになるのでは?
12 : 2026/04/27(月) 15:40:58.36 ID:wrwRch+tH
オブジェクト指向じゃなくてJava使ってんのがそもそもの問題やろ
13 : 2026/04/27(月) 15:42:29.21 ID:eHIIXsU4H
1.6MB(?_?)
98NOTEや(´;ω;`)
14 : 2026/04/27(月) 15:44:06.38 ID:6oKB04zv0
Android(JAVAベース)とiPhone(ObjectiveCベース)のメモリ使用量と速度比べればわかるだろ
15 : 2026/04/27(月) 15:46:28.06 ID:HjGsHhQ90
Codexで全部書き直せ
16 : 2026/04/27(月) 15:51:35.30 ID:zF51dKh90
最適化すりゃあまあそうかもな
マイクラレベルで注目されてるものじゃないと誰もやらんだけで
17 : 2026/04/27(月) 15:53:50.08 ID:VNFfAfqN0
そりゃそうでしょ
オブジェクト指向ってのはその名の通り開発側の都合なんだから
なんならCもやめてアセンブラで書いたら?
もっと効率良くなるよ
19 : 2026/04/27(月) 15:56:14.00 ID:Ie9Ktz3Q0
元のマイクラを開発出来なかった時点でホルホルする権利はない
20 : 2026/04/27(月) 15:56:19.74 ID:XzXuyILGa
やはりcの速さは魅力だよね
21 : 2026/04/27(月) 15:57:30.92 ID:5swBRPBM0
cに書き換えただけでそんなに差が出るわけないだろ。
ガベコレがかなり溜まってからやるってなってただけじゃねーの
31 : 2026/04/27(月) 16:15:53.76 ID:3Ap2W3HR0
>>21
書き方次第だけどそれなりに差は出るよ
33 : 2026/04/27(月) 16:17:15.47 ID:5swBRPBM0
>>31
1000倍違うってよっぽどだぞ。
enumで済むところを全て文字列で持たせるくらいのアホコーディングしてもここまで差はつかんわ
22 : 2026/04/27(月) 15:58:27.63 ID:waAgt8pJ0
たりメーよ
いちいち構造体コピーして容量食うバカが悪い

設計思想がない

23 : 2026/04/27(月) 15:59:01.09 ID:waAgt8pJ0
いちいち値渡しする馬鹿
24 : 2026/04/27(月) 16:02:12.98 ID:3rJRzjx+0
同時接続数を4人にまで絞ればそりゃ軽くなるだろうよ
25 : 2026/04/27(月) 16:02:15.05 ID:S1i8/0d2H
たぶん新しい言語で統一される時が来るよ
26 : 2026/04/27(月) 16:02:55.08 ID:VdhhupuCH
16Gってなんだよ
立方体とテクスチャだけのどこにそんな使うんだよ
28 : 2026/04/27(月) 16:12:38.39 ID:Gv2odOT+0
いやオブジェクト志向で作って変更に強い形にサーバーアプリを運用してみて運用がうまくいって用件が固定化した段階でC言語みたいなバカっ早いやつで書き直すのでいいでしょ。書き直すのをAIでやればいいし、サーバーアプリの外部仕様を自動テストに落とし込んでレベルダウンを防ぐとかありでは?
29 : 2026/04/27(月) 16:14:21.12 ID:uCmPC+L60
26年前の2chかよ
30 : 2026/04/27(月) 16:14:42.12 ID:io4PO1qL0
容量ほぼ画像だろ
32 : 2026/04/27(月) 16:16:33.28 ID:UhOwdFTs0
Javaが出た当初から言われてたこと
JVMがクソなだけでオブジェクト指向とかそんなの関係ない
34 : 2026/04/27(月) 16:17:42.78 ID:8p86+UvdH
開拓されてるマップの広さが違うとかそんな落ちだろ
35 : 2026/04/27(月) 16:19:27.14 ID:UhOwdFTs0
そもそもJavaだから必ずしもオブジェクト指向ってわけでもないしな
staticおじさんはこの板でも話題になってたはず
36 : 2026/04/27(月) 16:21:23.08 ID:gHIfW6uu0
プログラム言語だけでそこまで変わるとは…
Javaひょっとして糞だったのか
37 : 2026/04/27(月) 16:30:44.77 ID:AtTYhZup0
Cに全部書き直せば速くなるのは当然
開発コストと保守性が跳ね上がるが

コメント

タイトルとURLをコピーしました