рд╕реНрдХреНрд░реИрдк рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рдЪрд╛рд▓ рдирд╣реАрдВ: OpenJDK рд╣реИрдХ рдмрдирд╛рдо рдХрдХреНрд╖рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди

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

рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдмрд╛рдИрдкрд╛рд╕ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдпрд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реЗ рдХрдИ рдЙрддреНрдкрд╛рдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдПрдХ рджреЗрд╢реА рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЬреЗрд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреАрдмрдЧ рдореЛрдб рдпрд╛ рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рднреА рдЖрд╢реНрд╡рд╛рд╕рди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрдкрдиреЗ рдмрд╛рдпреЛрдЯреЗрдХ рдХреА рд░рдХреНрд╖рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреНрд▓рд╛рд╕ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдмрдлреНрдпреВрдЬрд╝реЗрдЯрд░реНрд╕ рдХреА рднреЗрджреНрдпрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕реЗ рд╡реЗ -XX рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: + TraceClassLoading рд╡рд┐рдХрд▓реНрдк рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕ JVM рдЯреНрд░реЗрд╕ рд╕реНрддрд░ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, OpenJDK рд╕реНрд░реЛрдд рдХреЛрдб рд▓реЗрдВрдЧреЗ рдФрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рдпреЛрдЯреЗрдХ рдЕрдкрд▓реЛрдб рдбрд╛рд▓реЗрдВред

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдмрд┐рдпрди рд▓рд┐рдирдХреНрд╕ 6.0.5 (рд╕реНрдерд┐рд░) рдФрд░ OpenJDK7 рд╕реНрд░реЛрдд рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕реНрд░реЛрдд рд╕реЗ JDK рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: OpenJDK Build README ред

OpenJDK рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрдм -XX: + TraceClassLoading рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рддрдм рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ classes.dump рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рднрд░реА рд╣реБрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рдИрдЯреЗрдХреЛрдб рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

{ int lengthClassName, byte[] className, int lengthByteCode, byte[] bytecode }, { next record тАж }, тАж 


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░реЗрдВ:
 # apt-get install openjdk-6-jdk # apt-get build-dep openjdk-6 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ OpenJDK рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╣рдорд╛рд░реЗ рдкреИрдЪ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрди рдХреЛрдб рдХреЛ ClassFileParser :: parseClassFile рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╣реЙрдЯрд╕реНрдкреЙрдЯ / src / share / vm / classfile / classFileParser.cpp рдореЗрдВ рдЬреЛрдбрд╝реЗрдЧрд╛:

       // dumping class bytecode      // dump file format:      // length of the class name - 4 bytes      // class name      // length of the class bytecode - 4 bytes      // byte code      // ... next class ...  ClassFileStream* cfs = stream();  FILE * pFile;  int length = cfs->length();  int nameLength = strlen(this_klass->external_name());  pFile = fopen("classes.dump","ab");  // size of the class name  fputc((int)((nameLength >> 24) & 0XFF), pFile );  fputc((int)((nameLength >> 16) & 0XFF), pFile );  fputc((int)((nameLength >> 8) & 0XFF), pFile );  fputc((int)(nameLength & 0XFF), pFile );      // class name  fwrite (this_klass->external_name() , 1, nameLength, pFile );  // size of the class bytecode  fputc((int)((length >> 24) & 0XFF), pFile );  fputc((int)((length >> 16) & 0XFF), pFile );  fputc((int)((length >> 8) & 0XFF), pFile );  fputc((int)(length & 0XFF), pFile );      // class bytecode  fwrite (cfs->buffer() , 1 , length, pFile );  fclose(pFile); 


рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ JDK рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
 # export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALLOW_DOWNLOADS=true # make sanity && make 

рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдмрд┐рд▓реНрдб рдХреЛ рдЪрд▓рд╛рдПрдВ
 # cd $OPENJDK_SRC # patch -p1 < $PATH_TO_PATCH_FILE # make 

рдЕрдЧрд▓рд╛, рд╕рдВрдХрд▓рд┐рдд JRE рдХреА рдмрд┐рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдБ: $ OPENJDK_SRC / build / linux-i586 / j2re-image / bin /
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдХреЛ рдПрдХ рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ -XX рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ: + TraceClassLoading:
 # ./java -XX:+TraceClassLoading 

рдФрд░ classes.dump рдХреЛ рджреЗрдЦреЗрдВ, рдЗрд╕рдореЗрдВ рд╕рднреА рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА рдЬреЛ JRE рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВред

рдФрд░ рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдУрдмрдлреНрдпреВрдЬрд╝реЗрдЯрд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдореЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдХреБрдВрдЬреА "рдмрд╛рдЗрдЯ-рдХреЛрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди" рджреНрд╡рд╛рд░рд╛ Google рдореЗрдВ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред SomeClassGuard.jar рдХреЗ рдЕрдВрджрд░, hierarchy com / **** / someclassguard / рдЗрдВрдЬрди рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ HEX рджрд░реНрд╢рдХ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм SomeClassGuard.jar рдЪрд▓рд╛рдПрдВ:
 # ./java -XX:+TraceClassLoading -jar SomeClassGuard.jar 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ SomeClassGuard.jar рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП classes.dump рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ:

 package openjdkmod; import java.io.DataInputStream; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * Classes dump format extractor class. * Author Ivan Kinash kinash@licel.ru */ public class ClassesDumpExractor {   /**    * Extract contents classes.dump to specified dir    */   public static void main(String[] args) throws FileNotFoundException, IOException {       if (args.length != 2) {           System.err.println("Usage openjdkmod.ClassesDumpExtractor <classes.dump file> <out dir>");           System.exit(-1);       }       File classesDumpFile = new File(args[0]);       if (!classesDumpFile.exists()) {           System.err.println("Source file: " + args[0] + " not found!");           System.exit(-1);       }       File outDir = new File(args[1]);       if (!outDir.exists()) {           outDir.mkdirs();       }       DataInputStream din = new DataInputStream(new FileInputStream(classesDumpFile));       while (true) {           try {               int classNameLength = din.readInt();               byte[] classNameBytes = new byte[classNameLength];               din.readFully(classNameBytes);               String className = new String(classNameBytes);               System.out.println("className:" + className);               int classLength = din.readInt();               byte[] classBytes = new byte[classLength];               din.readFully(classBytes);               File parentDir = className.indexOf(".")>0?new File(outDir, className.substring(0,className.lastIndexOf(".")).replace(".", File.separator)):outDir;               if(!parentDir.exists()) parentDir.mkdirs();               File outFile = new File(parentDir, (className.indexOf(".")>0?className.substring(className.lastIndexOf(".")+1):className)+".class");               FileOutputStream outFos = new FileOutputStream(outFile);               outFos.write(classBytes);               outFos.close();           } catch (EOFException e) {               din.close();               return;           }       }   } } 

рдФрд░ рдЗрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ:

 # java openjdkmod.ClassesDumpExractor classes.dump dump_directory 


рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреНрд▓рд╛рд╕-рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдорд┐рд▓рддреА рд╣реИред

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

Note1:
рдЖрдк JDK рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - sun.misc.Unsafe рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЛ JVM рдХреЗ рдЕрдВрджрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгреА 2:
рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдиреЛрдЯ 3 : рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЧрдИ рдореВрд▓ рдЫрд╡рд┐: it.wikipedia.org/wiki/File : рдиреЗрдЯрдмреАрди-рдбреНрдпреВрдХред рдкреАрдПрдирдЬреА

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


All Articles