JPoint 2019 рдкрд╛рд░реНрд╕рд┐рдВрдЧ

рдЫрд╡рд┐

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

JPoint 2019, рд╕рдмрд╕реЗ рдХрдЯреНрдЯрд░ рдЬрд╛рд╡рд╛ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдпрд╣ рд╕рд╛рддрд╡реАрдВ рдмрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЙрдкрд╕реНрдерд┐рддрд┐ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛, рдЗрд╕ рдмрд╛рд░ рдХреА рдШрдЯрдирд╛ рдиреЗ рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ 1700 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред

Odnoklassniki рдиреЗ рд╕рднреА JPoint рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ред 2013 рд╕реЗ, рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ JPoint рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдВрдб рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рд╡рд╛ рдЬреНрдЮрд╛рди рдкрд░реАрдХреНрд╖рдг рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рд╕рд╛рд▓ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдореБрдЦ OK.ru рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз "рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ" рдХрд╛рд░реНрдп рдереЗред рд╕рдореНрдореЗрд▓рди рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╣реА рдЬрд╡рд╛рдм рджрд┐рдП рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдХрд╛рд░реНрдп рд╕реМрдВрдкреЗ рдереЗ, рдЙрдирдореЗрдВ рд╕реЗ ремрежреж рдкрд░реНрдЪреЗ рдореЗрдВ рд╕реЗ резрежреж рд╕реЗ рдХрдо рд▓реМрдЯрд╛рдП рдЧрдП рдереЗ, рдФрд╕рдд рд╕реНрдХреЛрд░ рд▓рдЧрднрдЧ реж.реирел рд╣реИред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛, 5 рдореЗрдВ рд╕реЗ 4 рдЕрдВрдХ рд╕реНрдХреЛрд░ рдХрд░рдирд╛ред

рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рддрд╛рдХрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреЗрдВред

рдзрдбрд╝рдХрддрд╛ рд╣реИ


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 40% рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдПред

рдорд╛рдЗрдХрд▓ BitSet рдХрд╛ рдПрдХ рдереНрд░реЗрдб-рд╕реЗрдл рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рддрд╛ рд╣реИред setBit() рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВред

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, BitSet рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдерд┐рд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 public class ConcurrentBitSet { private final AtomicLongArray bits; public ConcurrentBitSet(int size) { assert size >= 0; int words = (size + 63) / 64; bits = new AtomicLongArray(words); } public void setBit(int index) { // TODO: Implement me! } } 

рдирд┐рд░реНрдгрдп
Java 8 рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз updateAndGet() / getAndUpdate() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

 public void setBit(int index) { int word = index >> 6; long mask = 1L << index; bits.updateAndGet(word, value -> value | mask); } 

рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА compareAndSet() рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ:

 public void setBit(int index) { int word = index >> 6; long mask = 1L << index; long oldValue; long newValue; do { oldValue = bits.get(word); newValue = oldValue | mask; } while (!bits.compareAndSet(word, oldValue, newValue)); } 


рдПрдиреБрдо рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 45% рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдПред

рддрд╛рддрд┐рдпрд╛рдирд╛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджреЛ рд╡рд╕реНрддреБрдПрдВ рдПрдХ рд╣реА enum рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВред рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛?

 boolean sameEnum(Object o1, Object o2) { return o1.getClass().isEnum() && o1.getClass() == o2.getClass(); } 

рдирд┐рд░реНрдгрдп
рд╕рдВрдХреЗрдд Enum.getDeclaringClass () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Enum.compareTo():

 public final Class<E> getDeclaringClass() { Class<?> clazz = getClass(); Class<?> zuper = clazz.getSuperclass(); return (zuper == Enum.class) ? (Class<E>)clazz : (Class<E>)zuper; } 

рдЧреИрд░-рд░рд┐рдХреНрдд рдирд┐рдХрд╛рдпреЛрдВ рд╡рд╛рд▓реЗ рдПрдирдо рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП, рдордзреНрдпрд╡рд░реНрддреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╣реА рдЙрддреНрддрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

 boolean sameEnum(Object o1, Object o2) { return o1 instanceof Enum && o2 instanceof Enum && ((Enum) o1).getDeclaringClass() == ((Enum) o2).getDeclaringClass(); } 


рдЕрд╕рдореНрдмрджреНрдз рд▓рд┐рдВрдХ


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 42% рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдПред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИ:

 interface Link<T> { T next(); } 

getTail() ) рдкрджреНрдзрддрд┐ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рд▓реЗрдХрд┐рди рд╢рд░реАрд░ рдирд╣реАрдВ) рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПред

 Link getTail(Link head) { if (head.next() == null) { return head; } return getTail(head.next()); } 

рдирд┐рд░реНрдгрдп
рдХреЗрд╡рд▓ рддреАрди рд╕рд╣реА рдиреНрдпреВрдирддрдо рдЙрддреНрддрд░ рд╣реИрдВ:

 <T extends Link<T>> Link<T> getTail(Link<T> head) <T extends Link<T>> Link<T> getTail(T head) <T extends Link<T>> T getTail(T head) 

рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдЬреИрд╕рд╛ рдХрд┐ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЬрд╛рд╡рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╣реИ:

 <T extends Link<T>> T getTail(Link<T> head) 


рджреВрдд


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 14% рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдПред

Kostya рдПрдХ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред

 void send(SocketChannel ch, String message) throws IOException { byte[] bytes = message.getBytes(); ByteBuffer header = ByteBuffer.allocate(4); header.putInt(bytes.length); ch.write(header); ch.write(ByteBuffer.wrap(bytes)); } 

рдирд┐рд░реНрдгрдп
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ:


рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

 void send(SocketChannel ch, String message) throws IOException { byte[] bytes = message.getBytes(StandardCharsets.UTF_8); ByteBuffer header = ByteBuffer.allocate(4); header.putInt(bytes.length); header.flip(); while (header.hasRemaining()) { ch.write(header); } ByteBuffer body = ByteBuffer.wrap(bytes); while (body.hasRemaining()) { ch.write(body); } } 


рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬрд╛рд╡рд╛


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ 7.5% рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдПред

рдЬреЗрд╡реАрдПрдо рдХреЗ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЬрд╛рд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХреЛ рдорд╛рд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓реЗрдХреНрд╕рдИ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

  • -Xmx
  • -XX:MaxMetaspaceSize
  • -XX:ReservedCodeCacheSize
  • -XX:+UseContainerSupport
  • -XX:MaxRAMPercentage
  • JVM рдореЗрдореЛрд░реА рдХреЛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

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

UseContainerSupport рд╕рд╛рде UseContainerSupport рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рдвреЗрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЗрд╡рд▓ рдЬреЗрд╡реАрдПрдо рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдЙрддреНрддрд░ рд╕рд╣реА рд╣реЛрдЧрд╛ред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЬреЛрдХрд░ 2018 рдореЗрдВ рдЖрдВрджреНрд░реЗрдИ рдкреИрдВрдЧрд┐рди рдХреА рд░рд┐рдкреЛрд░реНрдЯ " рд╢реЗрд▓реНрдлрд╝ рдкреНрд░реЛрд╕реЗрд╕ рдЬрд╛рд╡рд╛ рд╕реНрдЯреЛрд░реЗрдЬ" рджреЗрдЦреЗрдВ ред

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


All Articles