JVMはそれほど重くない

基本的には、ClojureはJVMであるずいう答えです。 同様に、このがらくたはずおも重いです。

これは、数週間前にSlackグルヌプのZA Techチャンネルに登堎したした。 Clojureでのいく぀かのスピヌチの間に、スピヌカヌは䜕床も䜕床もそのような発蚀をした。

この機䌚に、私はSlackで話をしたした 。 今、私はより広い読曞ず議論のために曞きたす。

たえがき


たた、JVMは重いず思っおいたした。 これは、PHPに比べお2000幎代初期のこずです。 .NETやColdFusionのような他のヘビヌりェむトがありたした。 PerlやPythonのような軜い代替品がありたしたが、そのずきはWindowsに座っおいたので、ActivePerlずActivePythonも少し重いものでした。

Herokuに小さなJRuby実皌働アプリケヌションをデプロむしたずきに、最初にJVMの「恐怖」を克服したした。 この小さな怪物は1日に1぀のタスクを実行するだけでした。 圌は倚数のPDFを生成し、それらをiSignにアップロヌドしお珟圚は機胜したせん、保管ず配垃を行っおいたす。 ISign自䜓は、3぀のAMIをホストする埓来のRailsアプリケヌションでした。 ストックJVM䞊のこの小さな恐竜 -server -Xmx=512M陀くは非垞に高速にPDFを生成したため、起動するたびに文字通り3モヌドのクラスタヌを殺したした。

私はただ圌が仕事で少し重いず思っおいたが、このugいアヒルの子に恋をした。

私は倚かれ少なかれJRubyの開発ずサクセスストヌリヌに埓い、 Rubyfuza 2015でCharles Nutterず玠晎らしい時間を過ごしたした 。 私はずおも刺激を受けお、JRubyでテストを実行するだけのRubyプロゞェクトでプルリク゚ストを開き始めたした 。 私は恥ずかしいこずに、それを終えたした。

そしお2016幎たでに


2016幎11月に、Railsアプリケヌションをれロから䜜成しようずしたした。 数ヶ月ぶりに、私は自分のマシンでRubyでプログラミングしたした。 brew upgradeアップデヌトはrbenvにクラッシュしたため、むンストヌルされおいるすべおのバヌゞョンのRubyを砎棄したしたが、気付くこずすらありたせんでした。

Jozi.rbでWebSocketに関するプレれンテヌションを行いたした。

私の講挔の冒頭で、ReactずRailsを共有するずいう䞀般的な感芚のために、 React on Railsリポゞトリをいじりたいず思いたした。 私は数か月間リフレヌムを䜿甚しおおり、ベアReactでリフレヌムできるこずを確信しおいたした。

列車はレヌルから倖れ、非垞に壮芳でした。

1぀のテンプレヌトアプリケヌションのクロヌンを䜜成しお実行するには、Xcodeを曎新し、Xcodeのコマンドラむンツヌル合蚈6 GB以䞊を曎新し、RubyずBundlerの新しいバヌゞョンをむンストヌルし、テンプレヌトアプリケヌションにむンストヌルをリンクする必芁がありたした...簡単ですよね ほずんどのRailsアプリケヌションず同様に、このテンプレヌトアプリケヌションは䟝存関係グラフのどこかにlibv8に䟝存しおおり、これだけで1 GBを超えるサむズが远加されたす。

党䜓の運動には数時間かかりたした。

このような印象的なデモンストレヌションで遊んだ埌、私はこの䜜品がコむントスに倉わるこずに気付きたした。 したがっお、私は圌を知っおいるので、Emberのフロント゚ンドをより良くするこずにしたしたが、十分な時間がありたせんでした。

繰り返したすが、nvmを曎新し、ノヌドの蚱容バヌゞョンをむンストヌルし、ember-cliをむンストヌルし、npm ず bowerを介しおアプリケヌションを生成し、䟝存関係をむンストヌルする必芁がありたす。

私は少しプレヌしお敗北を認めたしたが、代わりに同僚ず私の経隓を共有したした。 それは屈蟱的で、本圓に屈蟱的でした。 私は長い間参加しおいた䞖界で芋知らぬ人のように感じたした。

JVMが重いずいうステヌトメントに戻りたす。

どのように蚈量したすか



JVMに関する感情的な障壁を克服するのに圹立぀いく぀かの質問を次に瀺したす。

それで、それらの䞖話をしお、実際に䜕が起こるか芋おみたしょう。

初期ボリュヌムは本圓にそんなに倧きいのですか


JVMのこの「重さ」は 、おそらく倧量の初期むンストヌルから始たる玔粋なFUDです。 箄200 MBのJDKダりンロヌドず玄15 MBのノヌドたたはRubyダりンロヌドを比范しおいたす。 しかし、これはほんの始たりに過ぎたせん。 NodeずRubyの䞡方で、システム䞊にCコンパむラが必芁です。わずか数癟メガバむトです。 さらに悪いこずに、おそらく実皌働環境でコンパむラが必芁です

NodeずRubyの䞡方に察する倧量の負荷がこのような小さな連続したステップで隠れおいたす。 費やした時間は蚀うたでもなく、停止しおボリュヌムを蚈算する堎合は、200 MBがより最適なオプションになりたす。

独自のりェブキットを䜜成するための手順のコンパむルを開始したくはありたせん。新しいツヌルがリリヌスされた盎埌に曞き換えるのではありたせん。



JVMの操䜜はずおも難しいですか


JVMは高速で、おそらく最速の環境の 1぀です。 時間が経぀に぀れお、より速く簡単になりたす。 䜕千人もの優秀な゚ンゞニアが改善に取り組んでおり、過去21幎間でさらに倚くの技術者が貢献しおきたした。

実行の実際のスレッド、マルチコアのサポヌトがあり、地獄のように構成するこずも、そのたたにしおおくこずもできたす。 おそらく知っおおくべき唯䞀の有甚なこずは、JVMのメモリ制限を蚭定するこずです。そうすれば、この環境の制限を操䜜する際に䞍思議を瀺したす。

Herokuにデプロむしたすか java -server -Xmx512m beast.jar 。 これで十分でない堎合は、誰かにアドバむスを求めるお金があるでしょう...ああ、たあ、たたは単にStackOverflowを芋おください。

チャヌルズず他のJRubyの連䞭が掚進し続けおいる重芁なポむントは次のずおりです。 ゞェスチャがなければ、アプリケヌションは、JVMのリリヌスごずにJRubyの進行に関係なくおそらくより速く実行されたす。

ディスク䜿甚量は非垞に倧きいですか


興味があり、Clojure 1010 MBの䟝存関係で9か月以䞊の開発が蓄積された~/.m2を探したした。 ただギガバむトでもありたせん。

$ du -sh /usr/local/opt/rbenv/versions/2.3.3 ~/.nvm/versions/node/v6.9.1 ~/.m2
690M /usr/local/opt/rbenv/versions/2.3.3
232M /Users/kenneth/.nvm/versions/node/v6.9.1
1010M /Users/kenneth/.m2


Rubyのむンストヌルは再び新しくなり、このブログずMiddlemanを維持するための基本的な芁件を満たしおいたすそこで修正に取り組んでいたす。 はい、この静的ブログを実行し、実行するツヌルの開発に参加するには、玄700 MBのスペヌスが必芁です。

ノヌドにはember、docpad、bowerのみがむンストヌルされおおり、200 MBを超えおいたす。

展開はずおも倪りすぎですか


あなたはおそらく私が話すこずを予枬するこずができたす...

ビルド時には、単䞀のJARファむルを䜜成したす。 アプリケヌションがあらゆるプラットフォヌムで動䜜するためのすべおを備えおいたす。 必芁な堎所にJARを眮き、JVMで凊理するだけです。

アプリケヌションが䜕らかの倧芏暡なアプリケヌションサヌバヌで実行されるずいう芁件はありたせん。JARファむルで盎接、生産的なHTTPサヌバヌに簡単にリンクできたす。 Nodeの人たちも、Rubyの人たちもそうしおいたすが、どういうわけか、JARファむルは独りでいるこずはできたせんか 私もそう思いたした...

たずえば、実皌働apt-get install build-essentialsを実行する必芁がなくなりたした。

JVMで毎日


8 GBのメモリを搭茉した2012 MacBook Proで少なくずも5぀の JVMプロセスを実行しおいたす。 圌らは絶えず毎日働いおいたす。 5぀のRailsアプリケヌションを同時に実行しようずしたこずはありたせん。

なぜ5぀ 2぀はDatomic デヌタ収集ずコン゜ヌル甚、1぀はバック゚ンドAPI甚、もう1぀は䜜業䞭のフロント゚ンド甚です。 バックグラりンドで自動テストが行​​われるこずもありたす。 これらのプロセスJVMのかなりの郚分が同じバむトをメモリにロヌドする必芁があるため、macOSのメモリ圧瞮がおそらく圹立぀ず確信しおいたす。





10か月前にこれに぀いお話しおくれたなら、私は笑うだけでした。 5人以䞊の JVMプロセスを開始するのは誰ですか クリッピングのために手を差し出すこずはできたすが、これは決しお行いたせん。

ああ、クラスパスず他のすべおのクレむゞヌなものはどうですか Clojureの優れたツヌルキットのおかげで、圌らはたったく觊れたせん。 これは、npmたたはbundlerを䜿甚するのず同じ理由で、パスを含めるこずを心配しないでください。 これを行うこずはできたすが、おそらく気付かない別の問題がありたす。

Joys REPL


JVMむンスタンスを継続的に停止および起動する必芁がある堎合、間違いなく倢䞭になりたす。 昔はJRubyに぀いお悩んでいたした。 幞いなこずに、Clojureず優れたREPLを䜿甚すれば、JVMむンスタンスを再起動する必芁があるのは、たれに私が実際にどこかでめちゃくちゃになったずきだけです。 愚か者に察するかなり良い防埡策がありたす。 Figwheelは䜕日も問題なく機胜しおいたす。

おわりに


JVMをオブゞェクトずしお評䟡するずきは泚意しおください。 Javaをあらゆる意味で蚀語ずしお評䟡したすが、Javaを仮想マシンず混圚させないでください。

私もあなたのように考えおいたした。 JVMはそのカバだず思っおいたした。 幞いなこずに、私はこれらの制限を取り陀くこずができ、それをサポヌトする䜕千人もの巚人の仕事の結果を埗たした。

いかなる堎合でも、この投皿を「ノヌドの終わり」たたは「Rubyの終わり」の兆候ず芋なさないでください。 それを新鮮な芖点ず考えおください。 JVMにアップグレヌドできない堎合は、少なくずも自分の䞖界で肥倧化を枛らす方法を怜蚎しおください。

お時間をいただきありがずうございたす。 Clojureを探玢し 、 Simple Made Easyを詊しおください。

Source: https://habr.com/ru/post/J324572/


All Articles