JavaRush /ื‘ืœื•ื’ Java /Random-HE /ื›ื™ืฆื“ ื ื˜ืขื ื™ื ืฉื™ืขื•ืจื™ื ืœ-JVM
Aleksandr Zimin
ืจึธืžึธื”
ะกะฐะฝะบั‚-ะŸะตั‚ะตั€ะฑัƒั€ะณ

ื›ื™ืฆื“ ื ื˜ืขื ื™ื ืฉื™ืขื•ืจื™ื ืœ-JVM

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ืœืื—ืจ ืฉื”ืกืชื™ื™ื ื”ื—ืœืง ื”ืงืฉื” ื‘ื™ื•ืชืจ ื‘ืขื‘ื•ื“ืชื• ืฉืœ ืžืชื›ื ืช ื•ื ื›ืชื‘ื” ืืคืœื™ืงืฆื™ื™ืช "Hello World 2.0", ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœื”ืจื›ื™ื‘ ืืช ืขืจื›ืช ื”ื”ืคืฆื” ื•ืœื”ืขื‘ื™ืจื” ืœืœืงื•ื—, ืื• ืœืคื—ื•ืช ืœืฉื™ืจื•ืช ื”ื‘ื“ื™ืงื•ืช. ื‘ื”ืคืฆื”, ื”ื›ืœ ื›ืžื• ืฉืฆืจื™ืš, ื•ื›ืฉืื ื—ื ื• ืžืฉื™ืงื™ื ืืช ื”ืชื•ื›ื ื™ืช ืฉืœื ื•, ื”-Java Virtual Machine ืขื•ืœื” ืœื–ื™ืจื”. ื–ื” ืœื ืกื•ื“ ืฉื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืงื•ืจืืช ืคืงื•ื“ื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืงื‘ืฆื™ ืžื—ืœืงื” ื‘ืฆื•ืจื” ืฉืœ bytecode ื•ืžืชืจื’ืžืช ืื•ืชืŸ ื›ื”ื•ืจืื•ืช ืœืžืขื‘ื“. ืื ื™ ืžืฆื™ืข ืœื”ื‘ื™ืŸ ืงืฆืช ืขืœ ืกื›ื™ืžืช ื”-bytecode ืœื”ื™ื›ื ืก ืœืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช.

ืžื˜ืขื™ืŸ ื›ื™ืชืชื™

ื”ื•ื ืžืฉืžืฉ ืœืืกืคืงืช ืงื•ื“ ื‘ืชื™ื ืžื”ื™ื“ื•ืจ ืœ-JVM, ืืฉืจ ืžืื•ื—ืกืŸ ื‘ื“ืจืš ื›ืœืœ ื‘ืงื‘ืฆื™ื ืขื ื”ืกื™ื•ืžืช .class, ืืš ื ื™ืชืŸ ืœื”ืฉื™ื’ื• ื’ื ืžืžืงื•ืจื•ืช ืื—ืจื™ื, ืœืžืฉืœ, ื”ื•ืจื“ื” ื“ืจืš ื”ืจืฉืช ืื• ืฉื ื•ืฆืจื” ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื” ืขืฆืžื”. ื›ื™ืฆื“ ื ื˜ืขื ื™ื ืฉื™ืขื•ืจื™ื ื‘-JVM - 1ืขืœ ืคื™ ืžืคืจื˜ Java SE, ืขืœ ืžื ืช ืœื”ืคืขื™ืœ ืงื•ื“ ื‘-JVM, ืขืœื™ืš ืœื‘ืฆืข ืฉืœื•ืฉื” ืฉืœื‘ื™ื:
  • ื˜ืขื™ื ืช bytecode ืžืžืฉืื‘ื™ื ื•ื™ืฆื™ืจืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื”Class

    ื–ื” ื›ื•ืœืœ ื—ื™ืคื•ืฉ ืื—ืจ ื”ืžื—ืœืงื” ื”ืžื‘ื•ืงืฉืช ื‘ื™ืŸ ืืœื” ืฉื ื˜ืขื ื• ืงื•ื“ื ืœื›ืŸ, ื”ืฉื’ืช ืงื•ื“ ื‘ืชื™ื ืœื˜ืขื™ื ื” ื•ื‘ื“ื™ืงืช ื ื›ื•ื ื•ืชื•, ื™ืฆื™ืจืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื” Class(ืœืขื‘ื•ื“ื” ืื™ืชื” ื‘ื–ืžืŸ ืจื™ืฆื”) ื•ื˜ืขื™ื ืช ืžื—ืœืงื•ืช ืื‘. ืื ืžื—ืœืงื•ืช ื•ืžืžืฉืงื™ ืื‘ ืœื ื ื˜ืขื ื•, ืื–ื™ ื”ืžื—ืœืงื” ื”ืžื“ื•ื‘ืจืช ื ื—ืฉื‘ืช ืœื ื ื˜ืขื ืช.

  • ืžื—ื™ื™ื‘ (ืื• ืงื™ืฉื•ืจ)

    ืขืœ ืคื™ ื”ืžืคืจื˜, ืฉืœื‘ ื–ื” ืžื—ื•ืœืง ืœืฉืœื•ืฉื” ืฉืœื‘ื™ื ื ื•ืกืคื™ื:

    • ืื™ืžื•ืช , ื ื‘ื“ืงืช ื ื›ื•ื ื•ืช ื”-bytecode ืฉื”ืชืงื‘ืœ.
    • ื”ื›ื ื” , ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ RAM ืœืฉื“ื•ืช ืกื˜ื˜ื™ื™ื ื•ืืชื—ื•ืœื ืขื ืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ (ื‘ืžืงืจื” ื–ื”, ืืชื—ื•ืœ ืžืคื•ืจืฉ, ืื ืงื™ื™ื, ืžืชืจื—ืฉ ื›ื‘ืจ ื‘ืฉืœื‘ ื”ืืชื—ื•ืœ).
    • ืจื–ื•ืœื•ืฆื™ื” , ืจื–ื•ืœื•ืฆื™ื” ืฉืœ ืงื™ืฉื•ืจื™ื ืกืžืœื™ื™ื ืฉืœ ืกื•ื’ื™ื, ืฉื“ื•ืช ื•ืฉื™ื˜ื•ืช.
  • ืืชื—ื•ืœ ื”ืื•ื‘ื™ื™ืงื˜ ืฉื”ืชืงื‘ืœ

    ื›ืืŸ, ื‘ื ื™ื’ื•ื“ ืœืคืกืงืื•ืช ื”ืงื•ื“ืžื•ืช, ื ืจืื” ืฉื”ื›ืœ ื‘ืจื•ืจ ืžื” ืฆืจื™ืš ืœืงืจื•ืช. ื–ื” ื™ื”ื™ื”, ื›ืžื•ื‘ืŸ, ืžืขื ื™ื™ืŸ ืœื”ื‘ื™ืŸ ืื™ืš ื–ื” ืงื•ืจื” ื‘ื“ื™ื•ืง.

ื›ืœ ื”ืฉืœื‘ื™ื ื”ืœืœื• ืžื‘ื•ืฆืขื™ื ื‘ืจืฆืฃ ืขื ื”ื“ืจื™ืฉื•ืช ื”ื‘ืื•ืช:
  • ื™ืฉ ืœื˜ืขื•ืŸ ืืช ื”ืžื—ืœืงื” ื‘ืžืœื•ืื” ืœืคื ื™ ื”ืงื™ืฉื•ืจ.
  • ืžื—ืœืงื” ื—ื™ื™ื‘ืช ืœื”ื™ื‘ื“ืง ื‘ืžืœื•ืื” ื•ืœื”ื›ื™ืŸ ืœืคื ื™ ืืชื—ื•ืœื”.
  • ืฉื’ื™ืื•ืช ื‘ืจื–ื•ืœื•ืฆื™ื™ืช ืงื™ืฉื•ืจ ืžืชืจื—ืฉื•ืช ื‘ืžื”ืœืš ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช, ื’ื ืื ื”ืŸ ื–ื•ื”ื• ื‘ืฉืœื‘ ื”ืงื™ืฉื•ืจ.
ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, Java ืžื™ื™ืฉืžืช ื˜ืขื™ื ื” ืขืฆืœื” (ืื• ืขืฆืœื”) ืฉืœ ืžื—ืœืงื•ืช. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉื”ื˜ืขื™ื ื” ืฉืœ ืžื—ืœืงื•ืช ืฉืœ ืฉื“ื•ืช ื”ืชื™ื™ื—ืกื•ืช ืฉืœ ื”ืžื—ืœืงื” ื”ื ื˜ืขื ืช ืœื ืชืชื‘ืฆืข ืขื“ ืฉื”ืืคืœื™ืงืฆื™ื” ืชื™ืชืงืœ ื‘ื”ืคื ื™ื” ืžืคื•ืจืฉืช ืืœื™ื”ื. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืคืชืจื•ืŸ ืงื™ืฉื•ืจื™ื ืกืžืœื™ื™ื ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™ ื•ืื™ื ื• ืžืชืจื—ืฉ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืขื ื–ืืช, ื™ื™ืฉื•ื JVM ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื’ื ื‘ื˜ืขื™ื ืช ืžื—ืœืงื•ืช ืื ืจื’ื˜ื™ืช, ื›ืœื•ืžืจ. ื™ืฉ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืžื™ื“ ืืช ื›ืœ ื”ืงื™ืฉื•ืจื™ื ื”ืกืžืœื™ื™ื. ืขืœ ื ืงื•ื“ื” ื–ื• ื—ืœื” ื”ื“ืจื™ืฉื” ื”ืื—ืจื•ื ื”. ืจืื•ื™ ื’ื ืœืฆื™ื™ืŸ ืฉื”ืจื–ื•ืœื•ืฆื™ื” ืฉืœ ืงื™ืฉื•ืจื™ื ืกืžืœื™ื™ื ืื™ื ื” ืงืฉื•ืจื” ืœืฉื•ื ืฉืœื‘ ืฉืœ ื˜ืขื™ื ืช ื”ืžื—ืœืงื”. ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ืœ ืื—ื“ ืžื”ืฉืœื‘ื™ื ื”ืœืœื• ืžื”ื•ื•ื” ืžื—ืงืจ ื˜ื•ื‘; ื‘ื•ืื• ื ื ืกื” ืœื”ื‘ื™ืŸ ืืช ื”ืจืืฉื•ืŸ, ื›ืœื•ืžืจ ื˜ืขื™ื ืช ื”-bytecode.

ืกื•ื’ื™ ืžืขืžื™ืกื™ Java

ื™ืฉื ื ืฉืœื•ืฉื” ืžืขืžื™ืกื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ื‘-Java, ืฉื›ืœ ืื—ื“ ืžื”ื ื˜ื•ืขืŸ ืžื—ืœืงื” ืžืžื™ืงื•ื ืกืคืฆื™ืคื™:
  1. Bootstrap ื”ื•ื ืžื˜ืขื™ืŸ ื‘ืกื™ืกื™, ื”ื ืงืจื ื’ื Primordial ClassLoader.

    ื˜ื•ืขืŸ ืžื—ืœืงื•ืช JDK ืกื˜ื ื“ืจื˜ื™ื•ืช ืžืืจื›ื™ื•ืŸ rt.jar

  2. Extension ClassLoader โ€“ ืžืขืžื™ืก ื”ืจื—ื‘ื”.

    ื˜ื•ืขืŸ ื›ื™ืชื•ืช ื”ืจื—ื‘ื•ืช, ื”ืžืžื•ืงืžื•ืช ื‘ืกืคืจื™ื™ืช jre/lib/ext ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืš ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืขืœ ื™ื“ื™ ืžืืคื™ื™ืŸ ื”ืžืขืจื›ืช java.ext.dirs

  3. System ClassLoader - ืžื˜ืขื™ืŸ ืžืขืจื›ืช.

    ื˜ื•ืขืŸ ื›ื™ืชื•ืช ื™ื™ืฉื•ืžื™ื ื”ืžื•ื’ื“ืจื•ืช ื‘ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” CLASSPATH

Java ืžืฉืชืžืฉืช ื‘ื”ื™ืจืจื›ื™ื” ืฉืœ ืžื˜ืขื ื™ ืžื—ืœืงื•ืช, ื›ืืฉืจ ื”ืฉื•ืจืฉ ื”ื•ื, ื›ืžื•ื‘ืŸ, ื”ื‘ืกื™ืก. ืœืื—ืจ ืžื›ืŸ ืžื’ื™ืข ืžื˜ืขื™ืŸ ื”ื”ืจื—ื‘ื”, ื•ืœืื—ืจ ืžื›ืŸ ืžื˜ืขื™ืŸ ื”ืžืขืจื›ืช. ืžื˜ื‘ืข ื”ื“ื‘ืจื™ื, ื›ืœ ืžืขืžื™ืก ืžืื—ืกืŸ ืžืฆื‘ื™ืข ืœื”ื•ืจื” ืขืœ ืžื ืช ืฉื™ื•ื›ืœ ืœื”ืืฆื™ืœ ืขืœื™ื• ื˜ืขื™ื ื” ื‘ืžืงืจื” ืฉื”ื•ื ืขืฆืžื• ืื™ื ื• ืžืกื•ื’ืœ ืœืขืฉื•ืช ื–ืืช.

ืžื—ืœืงื” ืžื•ืคืฉื˜ืช ClassLoader

ื›ืœ ืžื˜ืขื™ืŸ, ืœืžืขื˜ ื”ื‘ืกื™ืก, ื”ื•ื ืฆืืฆื ืฉืœ ื”ืžืขืžื“ ื”ืžื•ืคืฉื˜ java.lang.ClassLoader. ืœื“ื•ื’ืžื”, ื”ื™ื™ืฉื•ื ืฉืœ ืžื˜ืขื™ืŸ ื”ื”ืจื—ื‘ื” ื”ื•ื ื”ืžื—ืœืงื” sun.misc.Launcher$ExtClassLoader, ื•ืžื˜ืขืŸ ื”ืžืขืจื›ืช ื”ื•ื sun.misc.Launcher$AppClassLoader. ืžื˜ืขื™ืŸ ื”ื‘ืกื™ืก ื”ื•ื ืžืงื•ืจื™ ื•ื”ื™ื™ืฉื•ื ืฉืœื• ื›ืœื•ืœ ื‘-JVM. ื›ืœ ืฉื™ืขื•ืจ ืฉืžืชืจื—ื‘ java.lang.ClassLoaderื™ื›ื•ืœ ืœืกืคืง ื“ืจืš ืžืฉืœื• ืœื”ื˜ืขื™ืŸ ืฉื™ืขื•ืจื™ื ืขื ื‘ืœืืง ื’'ืง ื•ืื•ืชื. ืœืฉื ื›ืš, ื™ืฉ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืžื—ื“ืฉ ืืช ื”ืฉื™ื˜ื•ืช ื”ืžืชืื™ืžื•ืช, ืฉื›ืจื’ืข ืื ื™ ื™ื›ื•ืœ ืœืฉืงื•ืœ ืจืง ื‘ืื•ืคืŸ ืฉื˜ื—ื™, ืžื›ื™ื•ื•ืŸ ืœื ื”ื‘ื ืชื™ ืืช ื”ื ื•ืฉื ื”ื–ื” ืœืคืจื˜ื™ ืคืจื˜ื™ื. ื”ื ื” ื”ื:
package java.lang;
public abstract class ClassLoader {
    public Class<?> loadClass(String name);
    protected Class<?> loadClass(String name, boolean resolve);
    protected final Class<?> findLoadedClass(String name);
    public final ClassLoader getParent();
    protected Class<?> findClass(String name);
    protected final void resolveClass(Class<?> c);
}
loadClass(String name)ืื—ืช ื”ืฉื™ื˜ื•ืช ื”ืฆื™ื‘ื•ืจื™ื•ืช ื”ื‘ื•ื“ื“ื•ืช, ืฉื”ื™ื ื ืงื•ื“ืช ื”ื›ื ื™ืกื” ืœื˜ืขื™ื ืช ืžื—ืœืงื•ืช. ื”ื™ื™ืฉื•ื ืฉืœื” ืžืกืชื›ื ื‘ืงืจื™ืืช ืฉื™ื˜ื” ืžื•ื’ื ืช ืื—ืจืช loadClass(String name, boolean resolve), ืฉื™ืฉ ืœืขืงื•ืฃ ืื•ืชื”. ืื ืืชื” ืžืกืชื›ืœ ืขืœ ื”-Javadoc ืฉืœ ืฉื™ื˜ื” ืžื•ื’ื ืช ื–ื•, ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืžืฉื”ื• ื›ืžื• ื”ื‘ื: ืฉื ื™ ืคืจืžื˜ืจื™ื ืžืกื•ืคืงื™ื ื›ืงืœื˜. ื”ืื—ื“ ื”ื•ื ื”ืฉื ื”ื‘ื™ื ืืจื™ ืฉืœ ื”ืžื—ืœืงื” (ืื• ืฉื ื”ืžื—ืœืงื” ื”ืžืœืื”) ืฉืฆืจื™ืš ืœื˜ืขื•ืŸ. ืฉื ื”ืžื—ืœืงื” ืžืฆื•ื™ืŸ ืขื ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ื—ื‘ื™ืœื•ืช. ื”ืคืจืžื˜ืจ ื”ืฉื ื™ ื”ื•ื ื“ื’ืœ ืฉืงื•ื‘ืข ืื ื ื“ืจืฉืช ืจื–ื•ืœื•ืฆื™ื™ืช ืงื™ืฉื•ืจ ืกื™ืžื‘ื•ืœื™ืช. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื•ื false , ืžื” ืฉืื•ืžืจ ืฉืžืฉืชืžืฉื™ื ื‘ื˜ืขื™ื ืช ืžื—ืœืงื” ืขืฆืœื”. ื‘ื”ืžืฉืš, ืขืœ ืคื™ ื”ืชื™ืขื•ื“, ื‘ื™ื™ืฉื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ืฉื™ื˜ื”, ืžืชื‘ืฆืขืช ืงืจื™ืื” findLoadedClass(String name), ื”ื‘ื•ื“ืงืช ืื ื”ืžื—ืœืงื” ื›ื‘ืจ ื ื˜ืขื ื” ื‘ืขื‘ืจ, ื•ืื ื›ืŸ, ืžื—ื–ื™ืจื” ื”ืคื ื™ื” ืœืžื—ืœืงื” ื–ื•. ืื—ืจืช, ืชื™ืงืจื ืฉื™ื˜ืช ื˜ืขื™ื ืช ื”ืžื—ืœืงื” ืฉืœ ื˜ื•ืขืŸ ื”ืื‘. ืื ืืฃ ืื—ื“ ืžื”ืžืขืžื™ืกื™ื ืœื ื”ืฆืœื™ื— ืœืžืฆื•ื ืžื—ืœืงื” ื˜ืขื•ื ื”, ื›ืœ ืื—ื“ ืžื”ื, ืœืคื™ ืกื“ืจ ื”ืคื•ืš, ื™ื ืกื” ืœืžืฆื•ื ื•ืœื˜ืขื•ืŸ ืืช ื”ืžื—ืœืงื” ื”ื–ื•, ืชื•ืš ืขื•ืงืฃ ืืช ื”- findClass(String name). ื–ื” ื™ื™ื“ื•ืŸ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ืคืจืง "ืชื›ื ื™ืช ื˜ืขื™ื ืช ื›ื™ืชื•ืช". ื•ืœื‘ืกื•ืฃ, ืื—ืจื•ืŸ ื—ื‘ื™ื‘, ืœืื—ืจ ื˜ืขื™ื ืช ื”ืžื—ืœืงื”, ื‘ื”ืชืื ืœื“ื’ืœ ื”- resolve , ื™ื•ื—ืœื˜ ื”ืื ืœื˜ืขื•ืŸ ืžื—ืœืงื•ืช ื‘ืืžืฆืขื•ืช ืงื™ืฉื•ืจื™ื ืกืžืœื™ื™ื. ื“ื•ื’ืžื” ื‘ืจื•ืจื” ื”ื™ื ืฉื ื™ืชืŸ ืœืงืจื•ื ืœืฉืœื‘ ื”ืจื–ื•ืœื•ืฆื™ื” ื‘ืฉืœื‘ ื˜ืขื™ื ืช ื”ืžื—ืœืงื”. ื‘ื”ืชืื ืœื›ืš, ืขืœ ื™ื“ื™ ื”ืจื—ื‘ืช ื”ืžื—ืœืงื” ClassLoaderื•ืขืงื•ืฃ ื”ืฉื™ื˜ื•ืช ืฉืœื”, ื”ื˜ื•ืขืŸ ื”ืžื•ืชืื ืื™ืฉื™ืช ื™ื›ื•ืœ ืœื™ื™ืฉื ืืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœื• ืœื”ืขื‘ืจืช ืงื•ื“ ื‘ืชื™ื ืœืžื—ืฉื‘ ื”ื•ื™ืจื˜ื•ืืœื™. Java ื’ื ืชื•ืžื›ืช ื‘ืงื•ื ืกืคื˜ ืฉืœ ืžื˜ืขื™ืŸ ืžื—ืœืงื•ืช "ื ื•ื›ื—ื™". ื”ื˜ื•ืขืŸ ื”ื ื•ื›ื—ื™ ื”ื•ื ื–ื” ืฉื˜ืขืŸ ืืช ื”ืžื—ืœืงื” ื”ืžื‘ืฆืขืช ื›ืขืช. ื›ืœ ืžื—ืœืงื” ื™ื•ื“ืขืช ื‘ืื™ื–ื” ืžื˜ืขื™ืŸ ื ื˜ืขืŸ, ื•ืชื•ื›ืœื• ืœืงื‘ืœ ืžื™ื“ืข ื–ื” ืขืœ ื™ื“ื™ ืงืจื™ืื” ืฉืœื• String.class.getClassLoader(). ืขื‘ื•ืจ ื›ืœ ืžื—ืœืงื•ืช ื”ื™ื™ืฉื•ืžื™ื, ื”ืžืขืžื™ืก ื”"ื ื•ื›ื—ื™" ื”ื•ื ื‘ื“ืจืš ื›ืœืœ ื”ืžืขืจื›ืช.

ืฉืœื•ืฉื” ืขืงืจื•ื ื•ืช ืฉืœ ื˜ืขื™ื ืช ื›ื™ืชื•ืช

  • ืžึดืฉืืœึทื—ึทืช

    ื”ื‘ืงืฉื” ืœื˜ืขื•ืŸ ืืช ื”ืžื—ืœืงื” ืžื•ืขื‘ืจืช ืœืžื˜ืขื™ืŸ ื”ืื‘, ื•ื ื™ืกื™ื•ืŸ ืœื˜ืขื•ืŸ ืืช ื”ืžื—ืœืงื” ืขืฆืžื” ืžืชื‘ืฆืข ืจืง ืื ื˜ื•ืขืŸ ื”ืื‘ ืœื ื”ืฆืœื™ื— ืœืžืฆื•ื ื•ืœื˜ืขื•ืŸ ืืช ื”ืžื—ืœืงื”. ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื˜ืขื•ืŸ ืžื—ืœืงื•ืช ืขื ื”ืžืขืžื™ืก ื”ืงืจื•ื‘ ื›ื›ืœ ื”ืืคืฉืจ ืœื‘ืกื™ืก. ื–ื” ืžืฉื™ื’ ื ืจืื•ืช ืžืขืžื“ื™ืช ืžืงืกื™ืžืœื™ืช. ื›ืœ ืžื˜ืขื™ืŸ ืฉื•ืžืจ ืชื™ืขื•ื“ ืฉืœ ื”ืฉื™ืขื•ืจื™ื ืฉื ื˜ืขื ื• ืขืœ ื™ื“ื•, ื•ืžืžืงื ืื•ืชื ื‘ืžื˜ืžื•ืŸ ืฉืœื•. ืงื‘ื•ืฆืช ื”ืžื—ืœืงื•ืช ื”ืœืœื• ื ืงืจืืช ื”ื™ืงืฃ.

  • ืจึฐืื•ึผืช

    ื”ืžืขืžื™ืก ืจื•ืื” ืจืง ืืช ื”ื›ื™ืชื•ืช "ืฉืœื•" ื•ืืช ื”ื›ื™ืชื•ืช ืฉืœ "ื”ื”ื•ืจื”" ื•ืื™ืŸ ืœื• ืžื•ืฉื’ ืœื’ื‘ื™ ื”ืฉื™ืขื•ืจื™ื ืฉื”ื•ืขืœื• ืขืœ ื™ื“ื™ "ื”ื™ืœื“".

  • ื™ื™ื—ื•ื“ื™ื•ืช

    ื ื™ืชืŸ ืœื˜ืขื•ืŸ ืžื—ืœืงื” ืคืขื ืื—ืช ื‘ืœื‘ื“. ืžื ื’ื ื•ืŸ ื”ืืฆืœื” ืžื•ื•ื“ื ืฉื”ืžื˜ืขื™ืŸ ืฉื™ื•ื–ื ื˜ืขื™ื ืช ืžื—ืœืงื” ืœื ื™ืขืžื™ืก ืžื—ืœืงื” ืฉื ื˜ืขื ื” ื‘ืขื‘ืจ ืœ-JVM.

ืœืคื™ื›ืš, ื‘ืขืช ื›ืชื™ื‘ืช ืžืืชื—ื•ืœ ื”ืืชื—ื•ืœ ืฉืœื•, ืžืคืชื— ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ื ื—ื” ืขืœ ื™ื“ื™ ืฉืœื•ืฉืช ื”ืขืงืจื•ื ื•ืช ื”ืœืœื•.

ืขืจื›ืช ื˜ืขื™ื ืช ื›ื™ืชื•ืช

ื›ืืฉืจ ืžืชืจื—ืฉืช ืงืจื™ืื” ืœื˜ืขื™ื ืช ืžื—ืœืงื”, ืžื—ืœืงื” ื–ื• ืžืชื‘ืฆืขืช ื‘ื—ื™ืคื•ืฉ ื‘ืžื˜ืžื•ืŸ ืฉืœ ืžื—ืœืงื•ืช ืฉื ื˜ืขื ื• ื›ื‘ืจ ืฉืœ ื”ื˜ื•ืขืŸ ื”ื ื•ื›ื—ื™. ืื ื”ืžื—ืœืงื” ื”ืจืฆื•ื™ื” ืœื ื ื˜ืขื ื” ื‘ืขื‘ืจ, ืขืงืจื•ืŸ ื”ืืฆืœื” ืžืขื‘ื™ืจ ืืช ื”ืฉืœื™ื˜ื” ืœืžื˜ืขื™ืŸ ื”ืื‘, ืฉื ืžืฆื ื‘ืจืžื” ืื—ืช ื’ื‘ื•ื” ื™ื•ืชืจ ื‘ื”ื™ืจืจื›ื™ื”. ื’ื ืžื˜ืขื™ืŸ ื”ืื‘ ืžื ืกื” ืœืžืฆื•ื ืืช ื”ืžื—ืœืงื” ื”ืจืฆื•ื™ื” ื‘ืžื˜ืžื•ืŸ ืฉืœื•. ืื ื”ืžื—ืœืงื” ื›ื‘ืจ ื ื˜ืขื ื” ื•ื”ืžื˜ืขื™ืŸ ื™ื•ื“ืข ืืช ืžื™ืงื•ืžื”, ืื–ื™ Classื™ื•ื—ื–ืจ ืื•ื‘ื™ื™ืงื˜ ืžืื•ืชื” ืžื—ืœืงื”. ืื ืœื, ื”ื—ื™ืคื•ืฉ ื™ื™ืžืฉืš ืขื“ ืฉื”ื•ื ื™ื’ื™ืข ืœืžื˜ืขืŸ ื”ืืชื—ื•ืœ ื”ื‘ืกื™ืกื™. ืื ืœืžื˜ืขื™ืŸ ื”ื‘ืกื™ืก ืื™ืŸ ืžื™ื“ืข ืขืœ ื”ืžื—ืœืงื” ื”ื ื“ืจืฉืช (ื›ืœื•ืžืจ, ื”ื•ื ืขื“ื™ื™ืŸ ืœื ื ื˜ืขืŸ), ื”-bytecode ืฉืœ ื”ืžื—ืœืงื” ื”ื–ื• ื™ื—ืคืฉ ื‘ืžื™ืงื•ื ื”ืžื—ืœืงื•ืช ืฉื”ืžื˜ืขื™ืŸ ื”ื ืชื•ืŸ ื™ื•ื“ืข ืขืœื™ื”ืŸ, ื•ืื ื”ืžื—ืœืงื” ืœื ื™ื›ื•ืœื” ืœื”ื™ื˜ืขืŸ, ื”ื‘ืงืจื” ืชื—ื–ื•ืจ ืœืžื˜ืขื™ืŸ ื”ื™ืœื“, ืฉื™ื ืกื” ืœื˜ืขื•ืŸ ืžืžืงื•ืจื•ืช ื”ืžื•ื›ืจื™ื ืœื•. ื›ืคื™ ืฉืฆื•ื™ืŸ ืœืขื™ืœ, ืžื™ืงื•ื ื”ืžื—ืœืงื•ืช ืขื‘ื•ืจ ืžื˜ืขื™ืŸ ื”ื‘ืกื™ืก ื”ื•ื ืกืคืจื™ื™ืช rt.jar, ืขื‘ื•ืจ ื˜ื•ืขืŸ ื”ื”ืจื—ื‘ื” - ื”ืกืคืจื™ื™ื” ืขื ื”ืจื—ื‘ื•ืช jre/lib/ext, ืขื‘ื•ืจ ื”ืžืขืจื›ืช ืื—ืช - CLASSPATH, ืขื‘ื•ืจ ื”ืžืฉืชืžืฉ ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืฉื”ื• ืฉื•ื ื” . ืœืคื™ื›ืš, ื”ื”ืชืงื“ืžื•ืช ืฉืœ ืžื—ืœืงื•ืช ื”ื˜ืขื™ื ื” ื”ื•ืœื›ืช ื‘ื›ื™ื•ื•ืŸ ื”ื”ืคื•ืš - ืžืžื˜ืขื™ืŸ ื”ืฉื•ืจืฉ ืืœ ื”ื ื•ื›ื—ื™. ื›ืืฉืจ ื”-bytecode ืฉืœ ื”ืžื—ืœืงื” ื ืžืฆื, ื”ืžื—ืœืงื” ื ื˜ืขื ืช ืœืชื•ืš ื”-JVM ื•ืžืชืงื‘ืœ ืžื•ืคืข ืžื”ืกื•ื’ Class. ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ื‘ืงืœื•ืช, ืขืจื›ืช ื”ื˜ืขื™ื ื” ื”ืžืชื•ืืจืช ื“ื•ืžื” ืœื™ื™ืฉื•ื ืฉืœ ื”ืฉื™ื˜ื” ืœืขื™ืœ loadClass(String name). ืœื”ืœืŸ ื ื™ืชืŸ ืœืจืื•ืช ืชืจืฉื™ื ื–ื” ื‘ืชืจืฉื™ื.
ื›ื™ืฆื“ ื ื˜ืขื ื™ื ืฉื™ืขื•ืจื™ื ื‘-JVM - 2

ื›ืžืกืงื ื”

ื‘ืฉืœื‘ื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ืœื™ืžื•ื“ ืฉืคื”, ืื™ืŸ ืฆื•ืจืš ืžื™ื•ื—ื“ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืžื—ืœืงื•ืช ื ื˜ืขื ื•ืช ื‘-Java, ืืš ื™ื“ื™ืขืช ื”ืขืงืจื•ื ื•ืช ื”ื‘ืกื™ืกื™ื™ื ื”ืœืœื• ืชืขื–ื•ืจ ืœืš ืœื”ื™ืžื ืข ืžื™ื™ืื•ืฉ ื›ืืฉืจ ื ืชืงืœื™ื ื‘ืฉื’ื™ืื•ืช ื›ื’ื•ืŸ ClassNotFoundExceptionืื• NoClassDefFoundError. ื•ื‘ื›ืŸ, ืื• ืœืคื—ื•ืช ืœื”ื‘ื™ืŸ ื‘ืขืจืš ืžื” ืฉื•ืจืฉ ื”ื‘ืขื™ื”. ืœืคื™ื›ืš, ื™ื•ืฆื ืžืŸ ื”ื›ืœืœ ClassNotFoundExceptionืžืชืจื—ืฉ ื›ืืฉืจ ืžื—ืœืงื” ื ื˜ืขื ืช ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ื‘ืžื”ืœืš ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช, ื›ืืฉืจ ื”ืžืขืžื™ืกื™ื ืื™ื ื ื™ื›ื•ืœื™ื ืœืžืฆื•ื ืืช ื”ืžื—ืœืงื” ื”ื ื“ืจืฉืช ืœื ื‘ืžื˜ืžื•ืŸ ืื• ืœืื•ืจืš ื ืชื™ื‘ ื”ืžื—ืœืงื”. ืื‘ืœ ื”ืฉื’ื™ืื” NoClassDefFoundErrorืงืจื™ื˜ื™ืช ื™ื•ืชืจ ื•ืžืชืจื—ืฉืช ื›ืืฉืจ ื”ืžื—ืœืงื” ื”ื ื“ืจืฉืช ื”ื™ื™ืชื” ื–ืžื™ื ื” ื‘ืžื”ืœืš ื”ื”ื™ื“ื•ืจ, ืืš ืœื ื”ื™ื™ืชื” ื’ืœื•ื™ื” ื‘ืžื”ืœืš ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช. ื–ื” ื™ื›ื•ืœ ืœืงืจื•ืช ืื ื”ืชื•ื›ื ื™ืช ืฉื›ื—ื” ืœื›ืœื•ืœ ืืช ื”ืกืคืจื™ื™ื” ืฉื‘ื” ื”ื™ื ืžืฉืชืžืฉืช. ื•ื‘ื›ืŸ, ืขืฆื ื”ื‘ื ืช ื”ืขืงืจื•ื ื•ืช ืฉืœ ืžื‘ื ื” ื”ื›ืœื™ ื‘ื• ืืชื” ืžืฉืชืžืฉ ื‘ืขื‘ื•ื“ืชืš (ืœืื• ื“ื•ื•ืงื ื˜ื‘ื™ืœื” ื‘ืจื•ืจื” ื•ืžืคื•ืจื˜ืช ื‘ืžืขืžืงื™ื•) ืžื•ืกื™ืคื” ื‘ื”ื™ืจื•ืช ืžืกื•ื™ืžืช ืœื”ื‘ื ืช ื”ืชื”ืœื™ื›ื™ื ื”ืžืชืจื—ืฉื™ื ื‘ืชื•ืš ืžื ื’ื ื•ืŸ ื–ื”, ืืฉืจ ื‘ ืชื•ืจ, ืžื•ื‘ื™ืœ ืœืฉื™ืžื•ืฉ ื‘ื˜ื•ื— ื‘ื›ืœื™ ื–ื”.

ืžืงื•ืจื•ืช

ืื™ืš ClassLoader ืขื•ื‘ื“ ื‘-Java ื‘ืกืš ื”ื›ืœ ืžืงื•ืจ ืฉื™ืžื•ืฉื™ ืžืื•ื“ ืขื ืžืฆื’ืช ื ื’ื™ืฉื” ืฉืœ ืžื™ื“ืข. ื˜ื•ืขืŸ ืฉื™ืขื•ืจื™ื, ClassLoader ืžืืžืจ ื“ื™ ืืจื•ืš, ืื‘ืœ ืขื ื“ื’ืฉ ืขืœ ืื™ืš ืœืขืฉื•ืช ื™ื™ืฉื•ื ืžื˜ืขื™ืŸ ืžืฉืœืš ืขื ืื•ืชื ืืœื”. ClassLoader: ื˜ืขื™ื ื” ื“ื™ื ืžื™ืช ืฉืœ ืžื—ืœืงื•ืช ืœืฆืขืจื™, ืžืฉืื‘ ื–ื” ืื™ื ื• ื–ืžื™ืŸ ื›ืขืช, ืื‘ืœ ืฉื ืžืฆืืชื™ ืืช ื”ื“ื™ืื’ืจืžื” ื”ื›ื™ ืžื•ื‘ื ืช ืขื ืกื›ื™ืžืช ื˜ืขื™ื ืช ืžื—ืœืงื•ืช, ืื– ืื ื™ ืœื ื™ื›ื•ืœ ืฉืœื ืœื”ื•ืกื™ืฃ ืื•ืชื•. ืžืคืจื˜ Java SE: ืคืจืง 5. ื˜ืขื™ื ื”, ืงื™ืฉื•ืจ, ื•ืืชื—ื•ืœ
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION