JDK рд░рд╛рдЬ


рдХреЗрд╡рд▓ рдЖрд▓рд╕реА рдиреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рди / рдУрд░реЗрдХрд▓ рдЬреЗрдбрдбреАрдХреЗ рдореЗрдВ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЬрд╛рджреВрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрди рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдкрд░ рдореИрдк рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд▓рд╛рдн рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ: рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рд╡рдВрдЪрд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреИрд░-рддреБрдЪреНрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд░реЛрдд рд╣реИрдВред рдореИрдВрдиреЗ рд╡реНрдпрд░реНрде рдореЗрдВ "рдЖрд╡реЗрджрди" рд╢рдмреНрдж рднреА рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ! рдмрд▓реНрдХрд┐, рд╡реЗ рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрддреНрд╕реБрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдЖрдкрдХреЗ рд▓рд┐рдП :)


рдХреНрд▓реАрдирд░


рд╣рд░ рдЕрдЪреНрдЫрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдлрд╛рдЗрдирд▓реА рджреБрд╖реНрдЯ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЛрдИ, рд╕рднреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрдВрдж рд╣реЛрдЧрд╛ ()? рдЖрдЦрд┐рд░ JDK рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рд╣реИ?
рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рд╕реЗрд╕ рдореЗрдВ, Sun.misc.Cleaner, рдлреИрдВрдЯрдо рд░реАрдлрд░реЗрдВрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдлрд╛рдЗрдирд▓ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╣рд▓реНрдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓реАрдирд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрдд-рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ , рдирд┐рд░реНрджрд┐рд╖реНрдЯ Runnable рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрдорддреМрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
public NeedsCleanup() { this.resource = unsafe.allocateMemory(16*1024*1024); Cleaner.create(this, new Destructor(resource)); } private static class Destructor implements Runnable { final long resource; Destructor(long resource) { this.resource = resource; } public void run() { unsafe.freeMemory(resource); } } 


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

MappedByteBuffer рдХреЛ рдЕрдирдореИрдк рдХрд░рдирд╛


рдФрд░ рдпрд╣рд╛рдБ JDK рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреНрд▓реАрдирд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ FileChannel.map () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореЗрдореЛрд░реА-рдореИрдк рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдкрдЫрддрд╛рд╡рд╛ рд╣реБрдЖ рдХрд┐ MappedByteBuffer рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдирдореИрдк () рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереАред рдЙрд╕рдХреЗ рдХрд╛рд░рдг рд╣реИрдВред
рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред MappedByteBuffer рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдлрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рдж рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рдмрд╛рдж рдХреНрд▓реАрдирд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред рддреЛ, рдЗрд╕ рдХреНрд▓реАрдирд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  public static void unmap(MappedByteBuffer bb) { if (bb instanceof sun.nio.ch.DirectBuffer) { ((sun.nio.ch.DirectBuffer) bb).cleaner().clean(); } } 


SharedSecrets


рдПрдХ рдкреЗрдЪреАрджрд╛ рдирд╛рдо, рд╣реИ рдирд╛? sun.misc.SaringSecrets рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХреБрдЫ рдирд┐рдЬреА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣рд╛рдБ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рднрд░реА рд╣реБрдИ рдХрдХреНрд╖рд╛ рдХреЗ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ... рдмрд╕ рдпрд╣ рдордд рдкреВрдЫрд┐рдП рдХрд┐ рдХреНрдпреЛрдВ :)
рдЬрд╛рд╡рд╛ рдлрд╛рдЗрд▓рдбреЗрд╕рд┐рдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рджреЗрд╢реА (рдУрдПрд╕-рд▓реЗрд╡рд▓) рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬреЛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рдерд╛, рдЙрд╕рд╕реЗред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  public static int getNativeFD(FileDescriptor fd) { return SharedSecrets.getJavaIOFileDescriptorAccess().get(fd); } 

рдпрд╛ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрдВрд╕реЛрд▓ рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рд╕реЗ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
  if (System.console() != null) { System.out.println(SharedSecrets.getJavaIOAccess().charset()); } 


SignalHandler


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ POSIX рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SIGINT?
рд╣рд╛рдБ, sun.misc.ignal рдФрд░ sun.misc.SignalHandler рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рдЖ рдЪреБрдХрд╛ рд╣реИ ред

MagicAccessor


рдФрд░ рд╕рдмрд╕реЗ рдЬрд╛рджреБрдИ рд╡рд░реНрдЧ, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЖрдЬ рд╕реВрд░рдЬ рд╣реЛрдЧрд╛ред coslect.MagicAccessorImplред рдЗрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдХреЛ рдЪрдорддреНрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛! рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рдпрдЯреЗрдХреЛрдб рд╡реЗрд░рд┐рдлрд╝рд╛рдпрд░ рдореИрдЬрд┐рдХрд╕рдПрдЯреЛрд░рд┐рдПрдореНрдкреНрд▓ рд╡рдВрд╢рдЬ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдЪреЗрдХ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддреНрд╡рд░рд┐рдд рдХреНрд░рдорд╛рдВрдХрди рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдерд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдирд┐рдЬреА, рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдзреАрдорд╛ рд╣реИ, рдпрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЧреЗрдЯрдлреАрд▓реНрдб / рдкреБрдЯрдлреАрд▓реНрдб рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдИ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╕рдЪрдореБрдЪ рдПрдХ рдорд╢реАрди рдЕрдиреБрджреЗрд╢ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред

 // ----- A.java ----- class A { private int privateField = 5; } // ----- B.java ----- class B extends sun.reflect.MagicAccessorBridge { public static void main(String[] args) { A a = new A(); a.privateField = 10; System.out.println(a.privateField); } } // ----- MagicAccessorBridge.java ----- package sun.reflect; public class MagicAccessorBridge extends MagicAccessorImpl { // Since MagicAccessorImpl is package-private, we'll make a public bridge } 

рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛: рдХреЗрд╡рд▓ рдЬреЗрд╡реАрдПрдо рдореИрдЬрд┐рдХ рдПрдХреНрд╕реЗрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗрд╡реИрдХ рдирд╣реАрдВ, рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ рдкрд░ рд╢рдкрде рд▓реЗрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛ A рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡рд░реНрдЧ A рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, MagicAccessorImpl рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рд╡реИрд╕реЗ, JDK рдЯреНрд░реЗрдЬрд░реА рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВ: sun.tools.asm.Assembler рдФрд░ рдкреВрд░рд╛ рдкреИрдХреЗрдЬ sun.tools.asmред

рдЪреЗрддрд╛рд╡рдиреА: рд╕реВрд░реНрдп рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдПрдкреАрдЖрдИ


рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╕рд╛рде рдпрд╛ рд╕реВрд░рдЬ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкрддрд▓рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред * рдкреИрдХреЗрдЬ, рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рдХ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реЗрдЧреА
рдЪреЗрддрд╛рд╡рдиреА: sun.misc.Unsafe рд╕рди рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЬреЛ рдХрд┐рд╕реА рднреА рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдареАрдХ рд╣реИ!

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

рдПрдХ рд╡рд┐рдзрд┐ рдпрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВ
@SuppressWarnings("sunapi")

рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде javac рдЪрд▓рд╛рдПрдВ
javac -XDenableSunApiLintControl TestUnsafe.java

рдпрд╣ рд╕рдм, рдкреНрд░рдпреЛрдЧ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ!

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


All Articles