{"id":229267,"date":"2014-07-15T12:01:03","date_gmt":"2014-07-15T08:01:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=229267"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=229267","title":{"rendered":"<span class=\"post_title\">JBrainfuck \u2014 \u041f\u0438\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Brainfuck \u043f\u043e\u0434 Java VM<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t\u041c\u0435\u043d\u044f \u0434\u0430\u0432\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 Java VM, \u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u044b\u0442\u0430, \u0434\u0430\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e. \u0414\u0430 \u0438 \u043a\u0430\u043a-\u0442\u043e \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438, \u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 \u044d\u0442\u0443 VM. <\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Brainfuck\">Brainfuck<\/a>. \u041e\u043d \u043f\u0440\u043e\u0441\u0442 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u044b, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. <\/p>\n<p>  <b>JBrainfuck<\/b> \u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Brainfuck \u043f\u043e\u0434 Java VM. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f JIT \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<ul>\n<li>\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f: MIT<\/li>\n<li>\u0410\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/SystemX-Files\/jbrainfuck\/\">https:\/\/github.com\/SystemX-Files\/jbrainfuck\/<\/a><\/li>\n<li>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: Linux, Windows, MacOS \u0438 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c Java.<\/li>\n<\/ul>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h4>\n<p>  \u0412\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430 Java.<br \/>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/asm.ow2.org\/\">ASM<\/a>. \u0415\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043a\u0430\u043a Groovy, JRuby \u0438 \u0434\u0440.<br \/>  <a name=\"plugins\"><\/a>\u0427\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 JVM, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0432 \u043d\u0430\u0448\u0443 IDE. <\/p>\n<ul>\n<li><a href=\"http:\/\/asm.ow2.org\/eclipse\/index.html\">Bytecode Outline<\/a> \u2014 \u0434\u043b\u044f Eclipse<\/li>\n<li><a href=\"http:\/\/plugins.jetbrains.com\/plugin\/5918\">ASM Bytecode Outline<\/a> \u2014 \u0434\u043b\u044f IDEA<\/li>\n<\/ul>\n<h4>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0442\u0432\u043e\u0440\u0438\u0442\u044c<\/h4>\n<p>  \u0414\u0443\u043c\u0430\u044e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 \u044f\u0437\u044b\u043a Brainfuck. \u041e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0438\u0437 8 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e \u0442\u044c\u044e\u0440\u0438\u043d\u0433\u0443, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0445\u043e\u0442\u044c \u041e\u0421 (<s>\u0431\u043e\u0436\u0435 \u0443\u043f\u0430\u0441\u0438<\/s>).<br \/>  \u0421\u0443\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0430. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043b\u0435\u043d\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e \u0438\u043b\u0438 \u0432\u043b\u0435\u0432\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0438\u043b\u0438 \u0443\u0431\u0430\u0432\u043b\u044f\u044f \u0435\u0435. <\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434:  <\/p>\n<table>\n<tr>\n<th>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 Brainfuck<\/th>\n<th>\u0410\u043d\u0430\u043b\u043e\u0433 \u0432 Java<\/th>\n<th>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/th>\n<\/tr>\n<tr>\n<td>\u041d\u0430\u0447\u0430\u043b\u043e <br \/>  \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/td>\n<td>\n<pre><code class=\"java\">char[] arr = new char[30000]; int i = 15000; <\/code><\/pre>\n<\/td>\n<td>\u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043b\u0435\u043d\u0442\u0443 <br \/>  \u0438 \u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435<\/td>\n<\/tr>\n<tr>\n<td><code>&lt;<\/code><\/td>\n<td>\n<pre><code class=\"java\">i--;<\/code><\/pre>\n<\/td>\n<td>\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u043b\u0435\u043d\u0442\u0435 \u0432\u043b\u0435\u0432\u043e<\/td>\n<\/tr>\n<tr>\n<td><code>&gt;<\/code><\/td>\n<td>\n<pre><code class=\"java\">i++;<\/code><\/pre>\n<\/td>\n<td>\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u043b\u0435\u043d\u0442\u0435 \u0432\u043f\u0440\u0430\u0432\u043e<\/td>\n<\/tr>\n<tr>\n<td>+<\/td>\n<td>\n<pre><code class=\"java\">arr[i]++;<\/code><\/pre>\n<\/td>\n<td>\u041f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c 1 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0435<\/td>\n<\/tr>\n<tr>\n<td>&#8212;<\/td>\n<td>\n<pre><code class=\"java\">arr[i]--;<\/code><\/pre>\n<\/td>\n<td>\u041e\u0442\u043d\u044f\u0442\u044c 1 \u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438<\/td>\n<\/tr>\n<tr>\n<td>.<\/td>\n<td>\n<pre><code class=\"java\">System.out.print(arr[i]);<\/code><\/pre>\n<\/td>\n<td>\u0412\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438<\/td>\n<\/tr>\n<tr>\n<td>,<\/td>\n<td>\n<pre><code class=\"java\">arr[i] = (char)System.in.read();<\/code><\/pre>\n<\/td>\n<td>\u0412\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0435<\/td>\n<\/tr>\n<tr>\n<td>[<\/td>\n<td>\n<pre><code class=\"java\">while(arr[i] != 0) {<\/code><\/pre>\n<\/td>\n<td>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u0446\u0438\u043a\u043b\u0435, \u043f\u043e\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e<\/td>\n<\/tr>\n<tr>\n<td>]<\/td>\n<td>\n<pre><code class=\"java\">}<\/code><\/pre>\n<\/td>\n<td>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0446\u0438\u043a\u043b\u0430<\/td>\n<\/tr>\n<\/table>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Brainfuck, \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0449\u0435\u0439 \u00abHello, Habr!\u00bb:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>++++++++[&gt;+&gt;++&gt;+++&gt;++++&gt;+++++&gt;++++++&gt;+++++++&gt;++++++++&gt; +++++++++&gt;++++++++++&gt;+++++++++++&gt;++++++++++++&gt;++++++++ +++++&gt;++++++++++++++&gt;+++++++++++++++&gt;++++++++++++++++&lt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;-]&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;.&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;---.+ ++&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;----.++++&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;----.++++&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;-.+&lt;&lt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;----.++++&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;.&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;.&lt;&lt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;+.-&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;++.--&lt;&lt;&lt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;++.--&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;+.-&lt;&lt;&lt;&lt;. <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h5>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/h5>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c, \u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0438 \u0441\u0442\u0430\u0434\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u043b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0434\u0443\u043c\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<h6>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h6>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430, \u044d\u0442\u043e \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u044f \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441\u0436\u0430\u0442\u044c \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0432\u0435\u0441\u0442\u0438 \u043a \u0432\u0438\u0434\u0443 <code>#~<\/code>, \u0433\u0434\u0435 <b>#<\/b> \u2014 \u043a\u043e\u043b-\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430 <b>~<\/b> \u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f.<br \/>  \u0422\u0430\u043a \u0436\u0435 \u043a\u043e\u0434 \u0432\u0438\u0434\u0430 <code>[-]<\/code> \u0438\u043b\u0438 <code>[+] <\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b-\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f\/\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0437\u043d\u0430\u043a\u043e\u043c \u0447\u0438\u0441\u043b\u0430. \u0417\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0438 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e.<br \/>  <a name=\"opcodetable\"><\/a><br \/>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u0434 \u043d\u0435\u0435 \u0438 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.  <\/p>\n<table>\n<tr>\n<th>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/th>\n<th>\u0410\u043d\u0430\u043b\u043e\u0433 java<\/th>\n<th>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/th>\n<\/tr>\n<tr>\n<td>SHIFT(arg)<\/td>\n<td>\n<pre><code class=\"java\">i += arg;<\/code><\/pre>\n<\/td>\n<td>\u0421\u0434\u0432\u0438\u0433 \u043f\u043e \u043b\u0435\u043d\u0442\u0435<\/td>\n<\/tr>\n<tr>\n<td>ADD(arg)<\/td>\n<td>\n<pre><code class=\"java\">arr[i] += arg;<\/code><\/pre>\n<\/td>\n<td>\u041f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0441\u043b\u043e)<\/td>\n<\/tr>\n<tr>\n<td>ZERO<\/td>\n<td>\n<pre><code class=\"java\">arr[i] = 0;<\/code><\/pre>\n<\/td>\n<td>\u041e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<tr>\n<td>OUT(arg)<\/td>\n<td>\n<pre><code class=\"java\">while(arg --&gt; 0) \tSystem.out.print(arr[i]);<\/code><\/pre>\n<\/td>\n<td>\u0412\u044b\u0432\u0435\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0443 <i>arg<\/i> \u0440\u0430\u0437<\/td>\n<\/tr>\n<tr>\n<td>IN(arg)<\/td>\n<td>\n<pre><code class=\"java\">while(arg --&gt; 0) \tarr[i] = (char)System.in.read();<\/code><\/pre>\n<\/td>\n<td>\u0412\u0432\u0435\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0443 <i>arg<\/i> \u0440\u0430\u0437<\/td>\n<\/tr>\n<tr>\n<td>WHILE<\/td>\n<td>\n<pre><code class=\"java\">while(arr[i] != 0) {<\/code><\/pre>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>END<\/td>\n<td>\n<pre><code class=\"java\">}<\/code><\/pre>\n<\/td>\n<td><\/td>\n<\/tr>\n<\/table>\n<p>  <a name=\"opcodeclass\"><\/a>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043a\u043e\u043b-\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class Opcode{     public enum Type{         SHIFT,         ADD,         ZERO,         OUT,         IN,         WHILE,         END     }      public Type type = null; \/\/\u0442\u0438\u043f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438     public int arg = 1; \/\/\u043a\u043e\u043b-\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439      public Opcode(Type type, int arg) {         this.type = type;         this.arg = arg;     }      public Opcode(Type type) {         this.type = type;     }      public Opcode clone(){         return new Opcode(type, arg);     } } <\/code><\/pre>\n<\/div>\n<\/div>\n<h6>\u041b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440<\/h6>\n<p>  \u0412\u044b\u0434\u0435\u043b\u0438\u043c \u043b\u0435\u043a\u0441\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 Brainfuck:  <\/p>\n<table>\n<tr>\n<th>\u041b\u0435\u043a\u0441\u0435\u043c\u0430<\/th>\n<th>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/th>\n<\/tr>\n<tr>\n<td><code>&lt;<\/code><\/td>\n<td>SHIFT \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c &#8212;<\/td>\n<\/tr>\n<tr>\n<td><code>&gt;<\/code><\/td>\n<td>SHIFT \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c +<\/td>\n<\/tr>\n<tr>\n<td><code>+<\/code><\/td>\n<td>ADD \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c +<\/td>\n<\/tr>\n<tr>\n<td><code>-<\/code><\/td>\n<td>ADD \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c &#8212;<\/td>\n<\/tr>\n<tr>\n<td><code>.<\/code><\/td>\n<td>OUT<\/td>\n<\/tr>\n<tr>\n<td><code>,<\/code><\/td>\n<td>IN<\/td>\n<\/tr>\n<tr>\n<td><code>[<\/code><\/td>\n<td>WHILE<\/td>\n<\/tr>\n<tr>\n<td><code>]<\/code><\/td>\n<td>END<\/td>\n<\/tr>\n<tr>\n<td><code>[-]<\/code> \u0438\u043b\u0438 <code>[+] <\/code><\/td>\n<td>ZERO<\/td>\n<\/tr>\n<\/table>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u043b\u0435\u043a\u0441\u0435\u043c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public abstract class Tokenizer{     public static List&lt;Opcode&gt; tokenize(String code) {         \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043b\u0435\u043a\u0441\u0435\u043c (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u043a\u043e\u0434\u0430\u043c\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e)         List&lt;Opcode&gt; retValue = new ArrayList&lt;Opcode&gt;();         int pos = 0;          \/\/\u041f\u0440\u0438\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c         while (pos &lt; code.length()) {             switch (code.charAt(pos++)) {                 \/\/\u041a\u0430\u043a \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b                 case '&gt;': retValue.add(new Opcode(Opcode.Type.SHIFT, +1)); break;                 case '&lt;': retValue.add(new Opcode(Opcode.Type.SHIFT, -1)); break;                  case '+': retValue.add(new Opcode(Opcode.Type.ADD, +1)); break;                 case '-': retValue.add(new Opcode(Opcode.Type.ADD, -1)); break;                  case '.': retValue.add(new Opcode(Opcode.Type.OUT)); break;                 case ',': retValue.add(new Opcode(Opcode.Type.IN)); break;                 case '[':                     char next = code.charAt(pos);                      \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438 ([+] \u0438\u043b\u0438 [-])                     if((next == '+' || next == '-') && code.charAt(pos + 1) == ']') {                         retValue.add(new Opcode(Opcode.Type.ZERO));                         pos += 2;                     } else                         retValue.add(new Opcode(Opcode.Type.WHILE));                     break;                 case ']': retValue.add(new Opcode(Opcode.Type.END)); break;             }         }          return retValue;     } } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h6>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440<\/h6>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0436\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0440\u044f\u0434 \u043a\u043e\u043c\u0430\u043d\u0434 ZERO). <br \/>  \u0412\u0441\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public abstract class Optimizer {     public static List&lt;Opcode&gt; optimize(String code) {         return optimize(Tokenizer.tokenize(code));     }      public static List&lt;Opcode&gt; optimize(List&lt;Opcode&gt; tokens) {         Stack&lt;Opcode&gt; retValue = new Stack&lt;Opcode&gt;();          \/\/\u041f\u0440\u0438\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c         for (Opcode token : tokens) {             switch (token.type){                 case SHIFT:                 case ADD:                 case OUT:                 case IN:                 case ZERO:                     \/\/\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443                     if(retValue.size() == 0) {                         retValue.push(token.clone());                         continue;                     }                      \/\/\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439, \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0441\u0436\u0430\u0442\u0438\u0435                     if(retValue.peek().type != token.type) {                         if(retValue.peek().arg == 0) \/\/\u0435\u0441\u043b\u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0436\u0430\u0442\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 &quot;\u0438\u0441\u0447\u0435\u0437\u043b\u0430&quot;                             retValue.pop(); \/\/\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0435                          if(retValue.peek().type == Opcode.Type.ZERO) \/\/\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 ZERO                             retValue.peek().arg = 1; \/\/\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044b, \u0438\u0431\u043e \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b\u0430                          retValue.push(token.clone()); \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443                         continue;                     }                      \/\/\u0441\u044e\u0434\u0430 \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f                     \/\/\u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439                     retValue.peek().arg += token.arg;                      break;                  case WHILE:                 case END:                     \/\/\u0446\u0438\u043a\u043b\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e                     retValue.add(token.clone());                     break;             }         }          return retValue;     } } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h6>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430<\/h6>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u0430\u043c\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u043f\u043e\u0434 Java VM. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0434\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434, \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 <a href=\"#plugins\">\u0440\u0430\u043d\u0435\u0435<\/a> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f IDE. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043b\u0435\u043d\u0442\u0443 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<pre><code class=\"java\">\/\/\u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 public void test() {     char[] arr = new char[30000];     int i = 15000; \/\/\u043f\u043e\u0437\u0438\u0446\u0438\u044f } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Java \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u00abShow Bytecode outline\u00bb (\u0434\u043b\u044f IDEA \u0442\u0430\u043a). \u0421\u0440\u0435\u0434\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441 \u043d\u0430\u0448\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0431\u0430\u0439\u0442\u043a\u043e\u0434. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e.<br \/>  \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/en.wikipedia.org\/wiki\/Java_bytecode_instruction_listings\">\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 JVM<\/a>.<\/p>\n<pre><code>  public test()V     \/\/\u043c\u0435\u0442\u043a\u0430 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u044b\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 (\u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439)    L0      \/\/\u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c VM, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043d\u0430 5 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u0441 \u043c\u0435\u0442\u043a\u0438 L0     LINENUMBER 5 L0      \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0441\u0442\u0435\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0442\u0438\u043f\u0430 short \u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 30000     SIPUSH 30000      \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0438\u043f\u0430 T_CHAR \u0438 \u043a\u043b\u0430\u0434\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 \u0441\u0442\u044d\u043a, \u043a\u043e\u043b-\u0432\u043e \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0442\u044d\u043a\u0430 (\u0437\u0430\u043e\u0434\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f)     NEWARRAY T_CHAR      \/\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438\u0437 \u0441\u0442\u044d\u043a\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e 1 (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0430\u043d\u0430\u043b\u043e\u0433 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 JVM)     ASTORE 1     L1 \/\/\u0435\u0449\u0435 \u043c\u0435\u0442\u043a\u0430     LINENUMBER 6 L1 \/\/\u0441\u0442\u0440\u043e\u043a\u0430 5 \u0441 \u043c\u0435\u0442\u043a\u0438 L1     SIPUSH 15000 \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0432 \u0441\u0442\u044d\u043a     ISTORE 2 \/\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u0442\u0438\u043f\u0430 integer \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e 2    L2     LINENUMBER 7 L2     RETURN \/\/\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442    L3 \/\/\u044d\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e     LOCALVARIABLE this LByteCodeTest; L0 L3 0     LOCALVARIABLE arr [C L1 L3 1     LOCALVARIABLE i I L2 L3 2     MAXSTACK = 1     MAXLOCALS = 3 <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430. \u0423\u0431\u0435\u0440\u0435\u043c \u043c\u0435\u0442\u043a\u0438, \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435 return. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u044d\u0442\u043e:<\/p>\n<pre><code>\/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 SIPUSH 30000 NEWARRAY T_CHAR  ASTORE 1  \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c SIPUSH 15000 ISTORE 2 \/\/\u0432\u044b\u0445\u043e\u0434 RETURN <\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u0412 JVM \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0442\u044d\u043a\u0430 \u0441\u0432\u043e\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043a\u0430 \u0431\u0435\u0437 \u0446\u0438\u043a\u043b\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u0432\u0432\u043e\u0434\u0435\/\u0432\u044b\u0432\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 <a href=\"#opcodetable\">\u0442\u0430\u0431\u043b\u0438\u0446\u0435<\/a>. <br \/>  \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0435:<\/p>\n<pre><code class=\"java\">public void test() throws IOException { \/\/\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0442 read()     char[] arr = new char[30000];     int i = 15000;      i += 1111;      arr[i] += 2222;      arr[i] = 0;      System.out.print(arr[i]);      arr[i] = (char) System.in.read(); } <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043c\u044b\u0441\u043b \u043a\u043e\u0434\u0430 \u043d\u0430\u043c \u043d\u0435 \u0432\u0430\u0436\u0435\u043d, \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <br \/>  \u0423\u0431\u0435\u0440\u0435\u043c \u043b\u0438\u0448\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code>public test()V throws java\/io\/IOException    \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432   SIPUSH 30000   NEWARRAY T_CHAR   ASTORE 1    \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e   SIPUSH 15000   ISTORE 2    \/\/\u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 1111   IINC 2 1111    \/\/\u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u044f\u0447\u0435\u0439\u043a\u0435 \u0447\u0438\u0441\u043b\u043e 2222   ALOAD 1 \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0441\u0442\u044d\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432   ILOAD 2 \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0441\u0442\u044d\u043a \u043f\u043e\u0437\u0438\u0446\u0438\u044e   DUP2 \/\/\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u044d\u043a\u0435   CALOAD \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0438\u043f\u0430 char \u0432 \u0441\u0442\u044d\u043a, \u0432\u0437\u044f\u0432 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u044d\u043a\u0430 (\u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0443 CASTORE)   SIPUSH 2222 \/\/\u043a\u043b\u0430\u0434\u0435\u043c \u0432 \u0441\u0442\u044d\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 2222   IADD \/\/\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u044d\u043a\u0435   I2C \/\/\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u044d\u043a\u0430 \u043a \u0442\u0438\u043f\u0443 char (\u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u044d\u043a\u0435 \u0442\u0438\u043f\u0430 integer)   CASTORE \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432    \/\/\u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443   ALOAD 1   ILOAD 2   ICONST_0 \/\/\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 JVM \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0430 0 (\u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435)   CASTORE \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432    \/\/\u0432\u044b\u0432\u043e\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438   GETSTATIC java\/lang\/System.out : Ljava\/io\/PrintStream; \/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442) \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430   ALOAD 1   ILOAD 2   CALOAD \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443   INVOKEVIRTUAL java\/io\/PrintStream.print (C)V \/\/\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434    \/\/\u0432\u0432\u043e\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438   ALOAD 1   ILOAD 2   GETSTATIC java\/lang\/System.in : Ljava\/io\/InputStream; \/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c    INVOKEVIRTUAL java\/io\/InputStream.read ()I \/\/\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434   I2C   CASTORE     \/\/\u0432\u044b\u0445\u043e\u0434   RETURN <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0432\u0441\u0435\u0445 \u043d\u0443\u0436\u043d\u044b\u0445 \u043d\u0430\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u0446\u0438\u043a\u043b\u043e\u0432.<br \/>  \u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>I2C<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (\u0432\u044b\u044f\u0441\u043d\u0435\u043d\u043e \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c). \u041c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>CALOAD<\/code> \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 <code>I2C<\/code> \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u043c\u044b\u0441\u043b. \u0415\u0449\u0435 \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>SIPUSH<\/code> \u043d\u0430 <code>LDC<\/code> (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0442\u044d\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0442\u0438\u043f\u0430 integer), \u0438\u0431\u043e \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0432 integer (\u0442\u0438\u043f \u043f\u043e\u043b\u044f arg \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <a href=\"#opcodeclass\">Opcode<\/a>).<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 Java \u0432\u0441\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441. \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 ASM \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u0412\u0441\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 \u043f\u043e\u043b\u0435\u0439, \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041c\u0435\u0442\u043e\u0434\u044b \u0436\u0435 \u0432 \u0441\u0435\u0431\u0435 \u0445\u0440\u0430\u043d\u044f\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 JVM. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0449\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043f\u0443\u0441\u0442\u044c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/lang\/Runnable.html\">Runnable<\/a>. <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:<\/p>\n<pre><code class=\"java\">public class ClassTest implements Runnable {     @Override     public void run() {      } } <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434:<\/p>\n<pre><code>\/\/ class version 52.0 (52) \/\/ access flags 0x21 public class ClassTest implements java\/lang\/Runnable  {   \/\/ access flags 0x1   public &lt;init&gt;()V    L0     LINENUMBER 3 L0     ALOAD 0     INVOKESPECIAL java\/lang\/Object.&lt;init&gt; ()V     RETURN    L1     LOCALVARIABLE this LClassTest; L0 L1 0     MAXSTACK = 1     MAXLOCALS = 1    \/\/ access flags 0x1   public run()V    L0     LINENUMBER 7 L0     RETURN    L1     LOCALVARIABLE this LClassTest; L0 L1 0     MAXSTACK = 0     MAXLOCALS = 1 } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>&lt;init&gt;<\/code>, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u042d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434. <\/p>\n<p>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 <a href=\"http:\/\/asm.ow2.org\/asm50\/javadoc\/user\/org\/objectweb\/asm\/tree\/ClassNode.html\">ClassNode<\/a>, \u0430 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <a href=\"http:\/\/asm.ow2.org\/asm50\/javadoc\/user\/org\/objectweb\/asm\/tree\/MethodNode.html\">MethodNode<\/a>.<br \/>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a (\u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u043e\u043a \u0438 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0441\u0442\u0440\u043e\u043a):<\/p>\n<pre><code class=\"java\">ClassNode cn = new ClassNode();  cn.version = V1_8; \/\/\u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0435\u043e\u0442\u0435\u043a\u0438 ASM cn.access = ACC_PUBLIC + ACC_SUPER; \/\/\u043a\u043b\u0430\u0441\u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 ACC_SUPER, \u043c\u043e\u0433\u0443 \u043b\u0438\u0448\u044c \u0433\u0430\u0434\u0430\u0442\u044c cn.name = &quot;ClassTest&quot;; \/\/\u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 cn.superName = &quot;java\/lang\/Object&quot;; \/\/\u0438\u043c\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 cn.interfaces.add(&quot;java\/lang\/Runnable&quot;); \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441  {     \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 public void &lt;init&gt;()     MethodNode mn = new MethodNode(ACC_PUBLIC, &quot;&lt;init&gt;&quot;, &quot;()V&quot;, null, null);     \/\/\u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u0430     InsnList il = mn.instructions;      \/\/\u0432\u044b\u0437\u044b\u0432\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440     \/\/\u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u0438\u0434\u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c \u0441 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c JVM     il.add(new VarInsnNode(ALOAD, 0));      il.add(new MethodInsnNode(INVOKESPECIAL, cn.superName, &quot;&lt;init&gt;&quot;, &quot;()V&quot;, false));      \/\/\u0432\u044b\u0445\u043e\u0434     il.add(new InsnNode(RETURN));      \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043a \u043a\u043b\u0430\u0441\u0441\u0443     cn.methods.add(mn); } {     \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 public void run()     MethodNode mn = new MethodNode(ACC_PUBLIC, &quot;run&quot;, &quot;()V&quot;, null, null);     \/\/\u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u0430     InsnList il = mn.instructions;      \/\/\u0432\u044b\u0445\u043e\u0434     il.add(new InsnNode(RETURN));      \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043a \u043a\u043b\u0430\u0441\u0441\u0443     cn.methods.add(mn); }  \/\/\u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 COMPUTE_FRAMES \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u0447\u0435\u0442 \/\/ \u043a\u043e\u043b-\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u044d\u043a\u0430 (\u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f JVM) \/\/ \u0430 \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u044b\u0436\u043a\u0438 \u043f\u043e \u043c\u0435\u0442\u043a\u0430\u043c ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);  \/\/\u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c ClassNode \u0441 ClassWriter cn.accept(cw);  cw.toByteArray(); \/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434 <code>run<\/code> \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 Brainfuck. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>switch<\/code>.<\/p>\n<pre><code class=\"java\">\/\/\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \/\/\u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 opcodes, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 Brainfuck public byte[] toByteCode(String className, int memorySize){         \/\/ ......................            MethodNode mn = new MethodNode(ACC_PUBLIC, &quot;run&quot;, &quot;()V&quot;, null, null);         InsnList il = mn.instructions;          \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c memorySize         il.add(new LdcInsnNode(memorySize)); \/\/\u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0432 \u0441\u0442\u044d\u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0442\u0438\u043f\u0430 integer         il.add(new IntInsnNode(NEWARRAY, T_CHAR)); \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432         il.add(new VarInsnNode(ASTORE, 1)); \/\/\u043a\u043b\u0430\u0434\u0435\u043c \u0435\u0433\u043e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e 1          \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e         il.add(new LdcInsnNode(memorySize \/ 2));          il.add(new VarInsnNode(ISTORE, 2)); \/\/\u043a\u043b\u0430\u0434\u0435\u043c \u0435\u0433\u043e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e 2          \/\/\u0438\u0434\u0435\u043c \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439         for (Opcode opcode : opcodes) {             switch (opcode.type) {                 case SHIFT: \/\/\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u0430 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430 opcode.arg                                        il.add(new IincInsnNode(2, opcode.arg));                     break;                 case ADD: \/\/\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f opcode.arg \u043a \u044f\u0447\u0435\u0439\u043a\u0435                     il.add(new VarInsnNode(ALOAD, 1));                     il.add(new VarInsnNode(ILOAD, 2));                     il.add(new InsnNode(DUP2));                     il.add(new InsnNode(CALOAD));                     il.add(new LdcInsnNode(opcode.arg));                     il.add(new InsnNode(IADD));                     il.add(new InsnNode(CASTORE));                      break;                 case ZERO: \/\/\u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438                     il.add(new VarInsnNode(ALOAD, 1));                     il.add(new VarInsnNode(ILOAD, 2));                     il.add(new InsnNode(ICONST_0));                     il.add(new InsnNode(CASTORE));                      break;                 case OUT: \/\/\u0432\u044b\u0432\u043e\u0434\u0438\u043c \u044f\u0447\u0435\u0439\u043a\u0443 opcode.arg \u0440\u0430\u0437                     for (int i = 0; i &lt; opcode.arg;+i) {                         il.add(new VarInsnNode(ALOAD, 0));                         il.add(new FieldInsnNode(GETFIELD, cn.name, &quot;out&quot;, &quot;Ljava\/io\/PrintStream;&quot;));                         il.add(new VarInsnNode(ALOAD, 1));                         il.add(new VarInsnNode(ILOAD, 2));                         il.add(new InsnNode(CALOAD));                         il.add(new MethodInsnNode(INVOKEVIRTUAL, &quot;java\/io\/PrintStream&quot;, &quot;print&quot;, &quot;(C)V&quot;, false));                     }                      break;                 case IN: \/\/\u0432\u0432\u043e\u0434\u0438\u043c \u044f\u0447\u0435\u0439\u043a\u0443 opcode.arg \u0440\u0430\u0437                     for (int i = 0; i &lt; opcode.arg;+i) {                         il.add(new VarInsnNode(ALOAD, 1));                         il.add(new VarInsnNode(ILOAD, 2));                         il.add(new VarInsnNode(ALOAD, 0));                         il.add(new FieldInsnNode(GETSTATIC, cn.name, &quot;in&quot;, &quot;Ljava\/io\/InputStream;&quot;));                         il.add(new MethodInsnNode(INVOKEVIRTUAL, &quot;java\/io\/InputStream&quot;, &quot;read&quot;, &quot;()I&quot;, false));                         il.add(new InsnNode(CASTORE));                     }                      break;                 case WHILE:                     break;                 case END:                     break;             }         }          \/\/ ...................... } <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0446\u0438\u043a\u043b\u0430\u043c\u0438. \u0421\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0435\u043c \u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0443 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"java\">public void test() {     char[] arr = new char[30000];     int i = 15000; \/\/\u043f\u043e\u0437\u0438\u0446\u0438\u044f      while(arr[i] != 0) {         i += 10000000;     } } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0435\u0433\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"sql\">public test()V    L0     LINENUMBER 6 L0     SIPUSH 30000     NEWARRAY T_CHAR     ASTORE 1    L1     LINENUMBER 7 L1     SIPUSH 15000     ISTORE 2    L2     LINENUMBER 9 L2    FRAME APPEND [[C I] \/\/\u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434     \/\/\u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438     ALOAD 1     ILOAD 2     CALOAD     IFEQ L3 \/\/\u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u0442\u043e \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u043a \u043c\u0435\u0442\u043a\u0435 L3 (\u043a\u043e\u043d\u0435\u0446 \u0446\u0438\u043a\u043b\u0430)    L4     LINENUMBER 10 L4      \/\/\u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430     ILOAD 2     LDC 10000000     IADD     ISTORE 2      \/\/\u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043d\u0446\u043e\u043c \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u043a L2 (\u043d\u0430\u0447\u0430\u043b\u043e \u0446\u0438\u043a\u043b\u0430 - \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f)     GOTO L2     L3     LINENUMBER 12 L3    \/\/FRAME SAME \/\/\u0441\u043d\u043e\u0432\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434      RETURN <\/code><\/pre>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u043e\u0432 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0438 \u0438 \u043f\u0440\u044b\u0436\u043a\u0438 \u0434\u043b\u044f \u043d\u0438\u0445. <br \/>  \u0414\u043b\u044f \u043c\u0435\u0442\u043e\u043a \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <a href=\"http:\/\/asm.ow2.org\/asm50\/javadoc\/user\/org\/objectweb\/asm\/tree\/LabelNode.html\">LabelNode<\/a>, \u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043a\u0430. \u041a\u0443\u0434\u0430 \u0435\u0433\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0442\u0443\u0434\u0430 \u043c\u044b \u0438 \u043f\u0440\u044b\u0433\u043d\u0435\u043c.<br \/>  \u0414\u043b\u044f \u043f\u0440\u044b\u0436\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 <a href=\"http:\/\/asm.ow2.org\/asm50\/javadoc\/user\/org\/objectweb\/asm\/tree\/JumpInsnNode.html\">JumpInsnNode<\/a>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0438\u043f \u043f\u0440\u044b\u0436\u043a\u0430 (\u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445) \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0441\u0430\u043c\u0430 \u043c\u0435\u0442\u043a\u0430, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d \u043f\u0440\u044b\u0436\u043e\u043a.<br \/>  \u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u043a \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0441\u0442\u044d\u043a\u043e\u043c. \u0422.\u0435. \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u043e \u0446\u0438\u043a\u043b\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0432 \u0441\u0442\u044d\u043a, \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446, \u0432\u044b\u0442\u0430\u0449\u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u044b\u0436\u043a\u0438.<br \/>  \u0412\u043e\u0442 \u043e\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"java\">\t\t\/\/\u0441\u0442\u044d\u043a \t\tStack&lt;LabelNode&gt; lbls = new Stack&lt;LabelNode&gt;(); \t\tMethodNode mn = new MethodNode(ACC_PUBLIC, &quot;run&quot;, &quot;()V&quot;, null, null);  \t\t\/\/ ......................\t\t  \t\tfor (Opcode opcode : opcodes) { \t\t\tswitch (opcode.type) { \t\t\t\t\/\/ ........................  \t\t\t\tcase WHILE: \t\t\t\t\t\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043c\u0435\u0442\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \t\t\t\t\tLabelNode \t\t\t\t\t\t\tbegin = new LabelNode(), \t\t\t\t\t\t\tend = new LabelNode(); \t\t\t\t\t \t\t\t\t\t\/\/\u043a\u043b\u0430\u0434\u0435\u043c \u0438\u0445 \u0432 \u0441\u0442\u044d\u043a \t\t\t\t\tlbls.push(end); \t\t\t\t\tlbls.push(begin);  \t\t\t\t\t\/\/\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u043e \t\t\t\t\til.add(begin); \t\t\t\t\t\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \t\t\t\t\til.add(new VarInsnNode(ALOAD, 1)); \t\t\t\t\til.add(new VarInsnNode(ILOAD, 2)); \t\t\t\t\til.add(new InsnNode(CALOAD)); \t\t\t\t\til.add(new JumpInsnNode(IFEQ, end)); \/\/\u043f\u0440\u044b\u0433\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \t\t\t\t\tbreak; \t\t\t\tcase END: \t\t\t\t\t\/\/\u043f\u0440\u044b\u0433\u0430\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \t\t\t\t\til.add(new JumpInsnNode(GOTO, lbls.pop())); \t\t\t\t\t\/\/\u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0435\u0446 \t\t\t\t\til.add(lbls.pop()); \t\t\t\t\tbreak; \t\t\t} \t\t} <\/code><\/pre>\n<h6>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430<\/h6>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e Java \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e API \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0435\u043c \u043a \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u0432\u043e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c (<s>\u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043d\u0438\u0445<\/s>):<\/p>\n<pre><code class=\"java\">public class ByteCodeLoader extends ClassLoader {     public static final ByteCodeLoader clazz = new ByteCodeLoader();      public Class&lt;?&gt; loadClass(byte[] bytecode) {         return defineClass(null, bytecode, 0, bytecode.length);     } } <\/code><\/pre>\n<p>  \u0410 \u0441\u0430\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">Class&lt;?&gt; aClass = ByteCodeLoader.clazz.loadClass( \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043c \u043a\u043b\u0430\u0441\u0441         toByteCode( \/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434                 &quot;BrainFuckJit&quot;, \/\/\u0438\u043c\u044f                 30000 \/\/\u043e\u0431\u044a\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438         ) );          ((Runnable)aClass.newInstance()).run(); \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <\/code><\/pre>\n<h4>\u0422\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0448\u0443\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 Brainfuck, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 \u0445\u043e\u0440\u043e\u0448\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code>&gt;+&gt;+&gt;+&gt;+&gt;++&lt;[&gt;[&lt;+++&gt;-  &gt;&gt;&gt;&gt;&gt;  &gt;+&gt;+&gt;+&gt;+&gt;++&lt;[&gt;[&lt;+++&gt;-    &gt;&gt;&gt;&gt;&gt;    &gt;+&gt;+&gt;+&gt;+&gt;++&lt;[&gt;[&lt;+++&gt;-      &gt;&gt;&gt;&gt;&gt;      &gt;+&gt;+&gt;+&gt;+&gt;++&lt;[&gt;[&lt;+++&gt;-        &gt;&gt;&gt;&gt;&gt;        +++[-&gt;+++++&lt;]&gt;[-]&lt;        &lt;&lt;&lt;&lt;&lt;      ]&lt;&lt;]&gt;[-]      &lt;&lt;&lt;&lt;&lt;    ]&lt;&lt;]&gt;[-]    &lt;&lt;&lt;&lt;&lt;  ]&lt;&lt;]&gt;[-]  &lt;&lt;&lt;&lt;&lt; ]&lt;&lt;]&gt;. <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u0441 \u043a\u043e\u0434\u043e\u043c 202, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<br \/>  \u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043c 6 \u0442\u0435\u0441\u0442\u043e\u0432. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Brainfuck, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434 JVM \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0432 VC++. \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0431\u0435\u0437 (\u0443 Brainfuck).<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0430 (\u043c\u0435\u043d\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435):<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/7bb\/596\/bc3\/7bb596bc34ff4a6b932eddb233fdf347.png\"\/><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043d\u0430\u0448\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0438 \u043d\u0435 \u0437\u0440\u044f. JIT \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Java VM \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e \u0438 \u0434\u043e\u0432\u0435\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  Java VM \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. VM \u0441 \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0442\u043a\u0438\u0435 \u0441\u0440\u043e\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a. <br \/>  \u0425\u043e\u0442\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 \u043f\u043e ASM \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u0432\u0430\u0441 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0440\u0435\u0432\u043d\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<br \/>  \u0418 \u0446\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b \u0438 \u0434\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0432\u043e\u0440\u0438\u0442\u044c.<br \/>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043c\u043d\u0435 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!      \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/229267\/\"> http:\/\/habrahabr.ru\/post\/229267\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t\u041c\u0435\u043d\u044f \u0434\u0430\u0432\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 Java VM, \u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u044b\u0442\u0430, \u0434\u0430\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e. \u0414\u0430 \u0438 \u043a\u0430\u043a-\u0442\u043e \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438, \u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 \u044d\u0442\u0443 VM. <\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Brainfuck\">Brainfuck<\/a>. \u041e\u043d \u043f\u0440\u043e\u0441\u0442 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u044b, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. <\/p>\n<p>  <b>JBrainfuck<\/b> \u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Brainfuck \u043f\u043e\u0434 Java VM. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f JIT \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<ul>\n<li>\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f: MIT<\/li>\n<li>\u0410\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/SystemX-Files\/jbrainfuck\/\">https:\/\/github.com\/SystemX-Files\/jbrainfuck\/<\/a><\/li>\n<li>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: Linux, Windows, MacOS \u0438 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c Java.<\/li>\n<\/ul>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-229267","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/229267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=229267"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/229267\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=229267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=229267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=229267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}