JVM java 的虚拟机.从来没有深入的研究过。这几天有时间看看网上的帖子,在自己理解做下笔记。
java虚拟机的体系结构:
当一个ClassLoad启动的时候,ClassLoad首先将硬盘上的class文件读取后,放入JVM的方法区,
JVM 会产生一个new A()的对象放在JVM 的堆区。
字节码会产生两个引用,一个指向加载自己的ClassLoad,一个指向JVM 创建的new对象。
作图如下:
A文件的字节码包含的信息如下:
用代码看看JVM 如何加载一个类:
先写一个类:
public class ProcessJvm { public void showStatus() { System.out.println("I am runing....."); } public int showNumber(int x){ return x+10; } }
调用,用反射调用类的方法,含参数的方法就是调用不成,感觉有问题??
public class Studyjvm { public static void fileProcess(){ try { URL[] urls = new URL[]{new URL("file:/E:/IntelliJWorkSpace/javaThink/out/javaThink/")}; URLClassLoader classLoader = new URLClassLoader(urls); Class c = classLoader.loadClass("jvm.ProcessJvm"); System.out.println("classesName:"+c.getPackage()); Method m = c.getMethod("showNumber"); Object o = c.newInstance(); m.invoke(o); //这里想调用含参数的showNumber(int x) 方法怎么调用都不对,为什么?? // Object oo = c.newInstance(); // Method me = c.getMethod("showNumber",Integer.class); // // Object x = me.invoke(oo,10); // System.out.println("x:==-=="+x); // } catch (Exception e) { e.printStackTrace(); } }