рдЦрд░реЛрдВрдЪ рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрдд

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдпрд╣ рдпрд╣рд╛рдВ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ: habrahabr.ru/post/112676 ред рдореИрдВ рдЬреЗрд╡реАрдПрдо рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдФрд░ рдорд╛рддреНрд░рд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬреАрд╕реА рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдорд╛рддреНрд░рд╛рддреНрдордХ рд▓рдХреНрд╖рдг


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрддрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╕рдордЭреМрддрд╛ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕реБрдзрд╛рд░ рд╕реЗ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдЖрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рднреА рддреАрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдПрдХ рдпрд╛ рджреЛ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ - рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред

рдЬреАрд╕реА рдЯреНрдпреВрдирд┐рдВрдЧ рдореВрд▓ рдмрд╛рддреЗрдВ



рдЬреАрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдмреБрдирд┐рдпрд╛рджреА рдореВрд▓рднреВрдд рдирд┐рдпрдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЬреЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓реМрдЯрд╛ рд╣реБрдЖ рдкрд░рд┐рдгрд╛рдо рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИ), рдЬрд┐рд╕рдореЗрдВ рдореЗрдХрдУрдмреНрдЬреЗрдХреНрдЯ () рд╡рд┐рдзрд┐ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рд▓реВрдк рд▓рдЧрд╛рддрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдвреЗрд░ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдПрдХ рджреЗрд░реА рдХреА рдЬрд╛рддреА рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рд╡рд┐рдзрд┐ рд╕реЗ рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЬреАрд╕реА рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
package ru.skuptsov; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MemoryConsumer implements Runnable { private static final int OBJECT_SIZE = 1024 * 1024; private static final int OBJECTS_NUMBER = 8; private static final int ADD_PROCESS_TIME = 1000; private static final int NUMBER_OF_REQUEST_THREADS = 50; private static final long EXPERIMENT_TIME = 30000; private static volatile boolean stop = false; public static void main(String[] args) throws InterruptedException { start(); Thread.sleep(EXPERIMENT_TIME); stop(); } private static void start() { ExecutorService execService = Executors.newCachedThreadPool(); for (int i = 0; i < NUMBER_OF_REQUEST_THREADS; i++) execService.execute(new MemoryConsumer()); } private static void stop() { stop = true; } @Override public void run() { while (true && !stop) { makeObjects(); } } private void makeObjects() { List<byte[]> objectList = new ArrayList<byte[]>(); for (int i = 0; i < OBJECTS_NUMBER; i++) { objectList.add(new byte[OBJECT_SIZE]); } try { Thread.sleep(ADD_PROCESS_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } } 


рдкреНрд░рдпреЛрдЧ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреБрд▓ рджреЗрд░реА рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╡рд┐рд▓рдВрдм рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрддрд┐рдо рдЕрдВрдХрди рдХреЗ рдмрд╛рдж, рд╕рд╛рдл рдХреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рди рджреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ jvm рд╣реИ рдЬреЛ "рд╕реНрдЯреЙрдк-рдж-рд╡рд░реНрд▓реНрдб" рдард╣рд░рд╛рд╡ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ GC рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛рдП рдмрд┐рдирд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдФрд░ рд╕рд╛рдлрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ habrahabr.ru/post/148322 - рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЗрд╕ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
 C:\>java -XX:+PrintCommandLineFlags -version -XX:MaxHeapSize=4290607104 -XX:ParallelGCThreads=8 -XX:+PrintCommandLineFlags -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC java version "1.6.0_16" Java(TM) SE Runtime Environment (build 1.6.0_16-b01) Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode) 

рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдФрд░ UseParallelGC рдореЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ (рдЫреЛрдЯреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдЪрд░рдг рдХреЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдСрдкрд░реЗрд╢рди)

рдХреБрд▓ рдард╣рд░рд╛рд╡ рд╕рдордп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 java -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose:gc -Xloggc:gc.log ru.skuptsov.MemoryConsumer 

рдФрд░ рджреЗрд░реА рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ glog рдХреЗ рджреНрд╡рд╛рд░рд╛:
 0.167: [Full GC [PSYoungGen: 21792K->13324K(152896K)] [PSOldGen: 341095K->349363K(349568K)] 362888K->362687K(502464K) [PSPermGen: 2581K->2581K(21248K)], 0.0079385 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

рдЬрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ = 0.01 рд╕реЗрдХрдВрдб рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╣реИред

рдФрд░ рдЖрдк VisualVm рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдЬреБрдЕрд▓рдЬреАрд╕реА рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЬреАрд╕реА (рдИрдбрди, рд╕рд░реНрд╡рд╛рдЗрд╡рд░ 1, рд╕рд░реНрд╡рд╛рдЗрд╡рд░ 2, рдУрд▓реНрдб) рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реНрдореГрддрд┐ рд╡рд┐рддрд░рдг рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрд╡рдзрд┐ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рдВрднрд╡ рдореЗрдореЛрд░реА рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╣рдо рд╢реБрд░реВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рддрдирд╛ рд╡реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рддреЛ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -Xmx рдФрд░ -Xms, рдФрд░ рд╣реЙрдЯрд╕реНрдкреЙрдЯ рд╡реАрдПрдо рдореЗрдореЛрд░реА рд╕рд╛рдЗрдЬрд╝ рдХреЛ рд╣реА рдЪреБрдиреЗрдЧрд╛ред рдпрджрд┐ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдЖрдЙрдЯрдСрдлрдореЗрд░реА (рдЬрд╛рд╡рд╛ рд╣реАрдк рд╕реНрдкреЗрд╕ рдпрд╛ рдкрд░реНрдордЧреЗрди рд╕реНрдкреЗрд╕) рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рддрдХ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА (-Xmx рдпрд╛ -XX: PermSize) рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛ рдХрджрдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИ - рдпрд╣ рдкреВрд░реНрдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдЪрд░рдг рдХреЗ рдмрд╛рдж рдвреЗрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдпреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рдпрд╣ рдЖрдХрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдореГрддрд┐ рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд░рд╛рд╢рд┐ рд╣реИ; рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреВрд░реНрдг рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, -Xms рдФрд░ -Xmx рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ рд▓рд╛рдЗрд╡ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ 3-4 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реИред рддреЛ, рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП - рдкреВрд░реНрдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЪрд░рдг рдХреЗ рдмрд╛рдж рдкреБрд░рд╛рдиреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдореВрд▓реНрдп 349363K рд╣реИред рдлрд┐рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдореВрд▓реНрдп -Xmx рдФрд░ -Xms ~ 1400 рдПрдордмреА рд╣реИред -XX: PermSize рдФрд░ -XX: MaxPermSize - рдкреВрд░реНрдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдЪрд░рдг рдХреЗ рдмрд╛рдж PermGenSize рд╕реЗ 1.5 рдЧреБрдирд╛ рдмрдбрд╝рд╛ - 13324K ~ 20 рдПрдордмреАред рдореИрдВ 1-1.5 рд▓рд╛рдЗрд╡ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдпреБрд╡рд╛ рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ ~ 525 рдПрдордмреАред рдлрд┐рд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде jvm рд▓реЙрдиреНрдЪ рд▓рд╛рдЗрди рдорд┐рд▓рддреА рд╣реИ:

 java -Xms1400m -Xmx1400m -Xmn525m -XX:PermSize=20m ru.skuptsov.MemoryConsumer 


VisualVm рдореЗрдВ рд╣рдореЗрдВ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:



рдкреНрд░рдпреЛрдЧ рдХреЗ рдХреЗрд╡рд▓ 30 рд╕реЗрдХрдВрдб рдореЗрдВ, 54 рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рдмрдирд╛рдИ рдЧрдИрдВ - 31 рдЫреЛрдЯреА рдФрд░ 23 рдкреВрд░реНрдг - 3.227 рд╕реЗрдХреЗрдВрдб рдХреЗ рдХреБрд▓ рд░реЛрдХ рд╕рдордп рдХреЗ рд╕рд╛рдеред рдпрд╣ рджреЗрд░реА рдореВрд▓реНрдп рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЖрд╡реЗрджрди рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:


рдпреБрд╡рд╛ рдФрд░ рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛

рдЫреЛрдЯреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЪрд░рдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рд╕реАрдзреЗ рдпреБрд╡рд╛ рдкреАрдврд╝реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ - рдЕрд╡рдзрд┐ рдХрдо, рд▓реЗрдХрд┐рди рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╖реЗрддреНрд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рднрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЖрдЗрдП рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдпреБрд╡рд╛ рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд▓рдЧрднрдЧ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рд░ рд╕реЗрдХреЗрдВрдб рд╣рдореЗрдВ рдпреБрд╡рд╛ рдкреАрдврд╝реА рдореЗрдВ релреж рдзрд╛рд░рд╛рдПрдБ * 1 рд╡рд╕реНрддреБрдПрдВ * рез рдПрдордмреА ~ рекрежреж рдПрдордмреА рдЦрд╛рд▓реА рдХрд░рдиреА рд╣реЛрддреА рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ:

 java -Xms1275m -Xmx1275m -Xmn400m -XX:PermSize=20m ru.skuptsov.MemoryConsumer 


VisualVm рдореЗрдВ рд╣рдореЗрдВ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:



рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХреБрд▓ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ - 1.533s - рдЫреЛрдЯреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рд▓реЗрдХрд┐рди рд╕рдордЧреНрд░ рд╕рдордп рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ - рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреА рдмрдврд╝рддреА рднрд░рдг рдЧрддрд┐ рдФрд░ рдкреВрд░реНрдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдХрд╛рд░рдг 3.661ред рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдЗрдП рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде jvm рдЪрд▓рд╛рдПрдВ:

 java -Xms1400m -Xmx1400m -Xmn400m -XX:PermSize=20m ru.skuptsov.MemoryConsumer 




рдХреБрд▓ рдард╣рд░рд╛рд╡ рдореЗрдВ рдЕрдм рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ рдФрд░ 2.637 s рддрдХ рдХреА рдорд╛рддреНрд░рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХрд╛ рдХреБрд▓ рдореВрд▓реНрдп рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдФрд░ рдпреБрд╡рд╛ рдкреАрдврд╝реА рдХреЗ рдмреАрдЪ рд╕рд╣реА рд╕рдВрддреБрд▓рди рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдпрджрд┐ рджреЗрд░реА рдХрд╛ рд╕рдордп рдЕрднреА рднреА рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк -XX рд╡рд┐рдХрд▓реНрдк рдЪрд╛рд▓реВ рдХрд░рдХреЗ рд╕рдорд╡рд░реНрддреА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: + UseConcMarkSweepGC - рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рд╡рд┐рд▓реЛрдкрди рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред

рд╕рдорд╡рд░реНрддреА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

ConcMarkSweep GC рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рди рдЯреНрдпреВрдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, - рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рд╕реНрдЯреЙрдк-рдж-рд╡рд░реНрд▓реНрдб рдкреЙрдЬрд╝ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЪрд░рдг рдереНрд░реВрдкреБрдЯ рдЬреАрд╕реА рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдЪрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд╕рддрди рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдорд╛рдорд▓реЗ рдХреА рдЕрд╡рдзрд┐ рдмрдврд╝ рд╕рдХрддреА рд╣реИ, рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, - рдЬрдм ConcMarkSweep GC рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ 20-30% рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде jvm рдЪрд▓рд╛рдПрдВ:

 java -Xms1680m -Xmx1680m -Xmn400m -XX:+UseConcMarkSweepGC -XX:PermSize=20m ru.skuptsov.MemoryConsumer 




рдХреБрд▓ рдард╣рд░рд╛рд╡ 1.923 рд╕реЗрдХреЗрдВрдб рд╣реЛ рдЧрдпрд╛ред

рдЙрддреНрддрд░рдЬреАрд╡реА рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ

рдиреАрдЪреЗ, рдЧреНрд░рд╛рдлрд╝ рдХреЗ рддрд╣рдд, рдЖрдк рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдИрдбрди, рд╕рд░реНрд╡рд╛рдЗрд╡рд░ 1 рдФрд░ рд╕рд░реНрд╡рд╛рдЗрд╡рд░ 2 рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рддрд░рдг рджреЗрдЦрддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ ConcMarkSweep GC рдореЗрдВ рдкреБрд░рд╛рдиреА рдкреАрдврд╝реА рдХреА рдУрд╡рд░рдлреНрд▓реЛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдпреБрд╡рд╛ рдкреАрдврд╝реА рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реАрдзреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд░реЛрдХрдирд╛ - рдмрдЪреЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛ред

рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк -XX рдХреЗ рд╕рд╛рде jvm рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: + PrintTenuringDistribution рдкреИрд░рд╛рдореАрдЯрд░ред
Glog рдореЗрдВ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 Desired survivor size 20971520 bytes, new threshold 1 (max 4) - age 1: 40900584 bytes, 40900584 total 

рдЙрддреНрддрд░рдЬреАрд╡реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ 40900584 рд╣реИ, рд╕реАрдПрдордПрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрддреНрддрд░рдЬреАрд╡реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП 50% рдЕрд╡рд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ ~ 80 рдПрдордмреА рдорд┐рд▓рддрд╛ рд╣реИред рдЬрдм jvm рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ -XX рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрддреНрддрд░рдЬреАрд╡реА рдЕрдиреБрдкрд╛рдд, рдЬреЛ рд╕реВрддреНрд░ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
 survivor space size = -Xmn<value>/(-XX:SurvivorRatio=<ratio> + 2) 



рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ
 java -Xms1680m -Xmx1680m -Xmn400m -XX:SurvivorRatio=3 -XX:+UseConcMarkSweepGC -XX:PermSize=20m ru.skuptsov.MemoryConsumer 

рдИрдбрди рд╕реНрдкреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рд╕рдорд╛рди рдЫреЛрдбрд╝рдиреЗ рдХреА рдХрд╛рдордирд╛, рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
 java -Xms1760m -Xmx1760m -Xmn480m -XX:SurvivorRatio=5 -XX:+UseConcMarkSweepGC -XX:PermSize=20m ru.skuptsov.MemoryConsumer 




рд╡рд┐рддрд░рдг рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреБрд▓ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдЫреЛрдЯреЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рдж рдЬреАрд╡рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдмрдЪреЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЙрдкрд▓рдмреНрдз рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдПрдбреЗрди рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡рд┐рддрд░рдг рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд░рд┐рдХреНрд╖:
 java -Xms1760m -Xmx1760m -Xmn480m -XX:SurvivorRatio=100 -XX:+UseConcMarkSweepGC -XX:PermSize=20m ru.skuptsov.MemoryConsumer 




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


рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рдпреЛрдЧ рдХреЗ 30 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдард╣рд░рд╛рд╡ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ 3.227 рдПрд╕ рд╕реЗ 1.481 рдПрд╕ рддрдХ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдЬрдмрдХрд┐ рдХреБрд▓ рдореЗрдореЛрд░реА рдЦрдкрдд рдореЗрдВ рдереЛрдбрд╝реА рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдЪрд╛рд╣реЗ рд╡рд╣ рдмрд╣реБрдд рдХрдо рд╣реЛ рдпрд╛ рдереЛрдбрд╝рд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднреМрддрд┐рдХ рд╕реНрдореГрддрд┐ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╕реНрдореГрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП - рдпрд╣ рдЕрднреА рднреА рдЬреАрд╕реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрддреБрд▓рди рдЦреЛрдЬрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░рдЪрдирд╛рддреНрдордХ рд╣реИред

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


All Articles