рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо: рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдереНрд░реЗрдбреНрд╕ рдХрд░реАрдм рд╣реИрдВ

рдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ, рд░реЙрди рдкреНрд░реЗрд╕рд▓рд░ рдиреЗ рд▓реВрдо рдХреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ , рдЬреЛ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЖрд▓рд╕реА рдЬрд╛рд╡рд┐рд╕реНрдЯ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд▓реЗрдЦ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдкрдХ рд╣реИрдВ, рдЬреЛ рдореИрдВ рд╕реНрд░реЛрдд рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рдЕрдм рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рд╕рдВрджреЗрд╣ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдЪрдореБрдЪ рдПрдХ рдШрдВрдЯреЗ рдмрд╛рдж, рд░реЙрди рдХреА рдУрд░ рд╕реЗ рдПрдХ рдЬрд╡рд╛рдм рдЖрдпрд╛ - "рдФрд░ рддреБрдо рдХреЛрд╢рд┐рд╢ рдХрд░реЛ!" ред рдЦреИрд░, рдореБрдЭреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдереАред

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:


рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдХреЙрд░рдЯреАрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ ред рдЙрджрд╛рд╣рд░рдг рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

public class Main {
    public static void main(String[] args) {
        var c = new AtomicLong();
        for (var i = 0; i < 1_000_000; i++) {
            new Thread(() -> {
                c.incrementAndGet();
            }).start();
        }

        System.out.println(c.get());
    }
}

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдЕрднреА рднреА рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣:

javac Main.java && java Main

рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрднрд╛рд╕реА рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛:

for (var i = 0; i < 1_000_000; i++) {
    Thread.startVirtualThread(() -> {
        c.incrementAndGet();
    });
}

рдкрд░рд┐рдгрд╛рдо рдЖрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИ:

1000000

рдХрд┐рддрдирд╛ рд▓рдВрдмрд╛?
, .
-, Gil Tene, тАФ .
-, Project Loom, . , тАФ .

рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдЕрдВрдд рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╕рд╛рде, рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рд░реЙрди рдиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдХреЛ рджреЗрд░реА () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдерд╛, рдЬреЛ рдХрд┐ рдХреЛрд░рдЯрд╛рдЗрди рдХреЛ "рд╕реЛ рдЬрд╛рдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдереНрд░реЗрдб.рд╕реНрд▓реАрдк () рд╡рд░реНрддрдорд╛рди рдХреЛрд░рдЯрд╛рдЗрди рдХреЛ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдереНрд░реЗрдб, рдЬреЛ рдХрдИ рдирд╣реАрдВ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдорд╛рддреНрд░рд╛ рд╕реЗ рдирд╣реАрдВред рд╕реА рдкреА рдпреВ

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

for (var i = 0; i < 1_000_000; i++) {
  Thread.startVirtualThread(() -> {
    c.incrementAndGet();
    try {
        Thread.sleep(1_000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
  });
}

рдкрд░рд┐рдгрд╛рдо:

- 400K

рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ! рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рдХреЗ рд╕рд╛рде, рдереНрд░реЗрдб.рд╕реНрд▓реАрдк () рдореЗрдВ рдХреЙрд▓ рдпрд╣ рднреЗрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдереНрд░реЗрдб рдореЗрдВ рд╣реИ рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдереНрд░реЗрдб рдореЗрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рдорд╕реНрдд рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЦреЛрджреЗрдВ:

var threads = new ArrayList<Thread>();
var cores = 10;
for (var i = 0; i < cores; i++) {
    var t = Thread.startVirtualThread(() -> {
        var bestUUID = "";
        for (var j = 0; j < 1_000_000; j++) {
            var currentUUID = UUID.randomUUID().toString();
            if (currentUUID.compareTo(bestUUID) > 0) {
                bestUUID = currentUUID;
            }
        }
        System.out.println("Best slow UUID is " + bestUUID);
    });
    threads.add(t);
}

for (var i = 0; i < cores; i++) {
    var t = Thread.startVirtualThread(() -> {
        var bestUUID = UUID.randomUUID().toString();
        System.out.println("Best fast UUID is " + bestUUID);
    });
    threads.add(t);
}

for (Thread t : threads) {
    t.join();
}

рдпрд╣рд╛рдВ рд╣рдо 10 рдзреАрдореЗ рдХрд╛рд░реНрдп рдФрд░ 10 рддреЗрдЬ рдХрд╛рд░реНрдп рдЪрд▓рд╛рддреЗ рд╣реИрдВред рддреЗрдЬреА рд╕реЗ рдХрд╛рд░реНрдп рдПрдХ рд▓рд╛рдЦ рдЧреБрдирд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рдерд╛:

Best slow UUID is fffffde4-8c70-4ce6-97af-6a1779c206e1
Best slow UUID is ffffe33b-f884-4206-8e00-75bd78f6d3bd
Best slow UUID is fffffeb8-e972-4d2e-a1f8-6ff8aa640b70
Best fast UUID is e13a226a-d335-4d4d-81f5-55ddde69e554
Best fast UUID is ec99ed73-23b8-4ab7-b2ff-7942442a13a9
Best fast UUID is c0cbc46d-4a50-433c-95e7-84876a338212
Best fast UUID is c7672507-351f-4968-8cd2-2f74c754485c
Best fast UUID is d5ae642c-51ce-4b47-95db-abb6965d21c2
Best fast UUID is f2f942e3-f475-42b9-8f38-93d89f978578
Best fast UUID is 469691ee-da9c-4886-b26e-dd009c8753b8
Best fast UUID is 0ceb9554-a7e1-4e37-b477-064c1362c76e
Best fast UUID is 1924119e-1b30-4be9-8093-d5302b0eec5f
Best fast UUID is 94fe1afc-60aa-43ce-a294-f70f3011a424
Best slow UUID is fffffc24-28c5-49ac-8e30-091f1f9b2caf
Best slow UUID is fffff303-8ec1-4767-8643-44051b8276ca
Best slow UUID is ffffefcb-614f-48e0-827d-5e7d4dea1467
Best slow UUID is fffffed1-4348-456c-bc1d-b83e37d953df
Best slow UUID is fffff6d6-6250-4dfd-8d8d-10425640cc5a
Best slow UUID is ffffef57-c3c3-46f5-8ac0-6fad83f9d4d6
Best slow UUID is fffff79f-63a6-4cfa-9381-ee8959a8323d


рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗрд╡рд▓ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдзреАрдореЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдкрдХреЗ рд╕реАрдкреАрдпреВ рдХреЗ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реЛред

рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ - рдлрд┐рд▓рд╣рд╛рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рд╕рд╛рдорд╛рдиреНрдп ForkJoinPool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрднрд╛рд╕реА рдзрд╛рдЧреЗ "рдкреВрд░реНрд╡рд╕реВрдЪрдХ" рд╣реИрдВ, рдлрд┐рд▓рд╣рд╛рд▓ рд╡реЗ "рд╕рд╣рдХрд╛рд░реА" рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрд░рд╛рдЙрдЯрд┐рдиреНрд╕ рдХреА рддрд░рд╣ред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрд░реНрдпреБрдХреНрдд рд▓реЗрдЦ рдореЗрдВ, рд░реЙрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ рдХрд┐ рд╡рд╣ рднреА рд╕рд╛рдорд╛рдиреНрдп рдереНрд░реЗрдбреНрд╕ рдХреА рддрд░рд╣, рдЬрдмрд░рди рдкреНрд░реАрдореЗрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдзрд╛рдЧреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЧреЛ 1.14 рдореЗрдВ, рдЬрдмрд░рди рдкреНрд░реАрдореАрд╢рди рдХреЛ рдЪреБрдкрдЪрд╛рдк рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓, рдЧреЛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдирд┐рд▓рдВрдмрд┐рдд, рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рддреЛ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЖрдк Thread.yield (), рдпрд╛ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ IO рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: System.out.println (""), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред

рдЧрдгрдирд╛ рд╕рд░рд▓ рд╣реИ - рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрд╡рд░реБрджреНрдз рдЖрдИрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдЙрд╕рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖:


рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд╕рдВрджреЗрд╣ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реВрдо рдиреЗ рдореБрдЭреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рд▓реНрдХреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдХреНрд░рд╛рдВрддрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рднреА рдмрд╛рд░-рдмрд╛рд░ рд╕рдВрдЧрд╛рдорд┐рддрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗред рдЕрдм, JDK15 рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ JVM рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореЗрдореЛрд░реА (GC) рдФрд░ рдХреЛрдб (JIT) рдЕрдиреБрдХреВрд▓рди рдХреЛ JVM рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рдереЗред рдпрджрд┐ рдЖрдк рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкрдврд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ

рдореЗрд░реЗ рдореВрд▓ рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

All Articles