1. JVM 调优
重写这个类,实现 jvm 调优,他是ClassLoader 是抽象的
2. 双亲委派机制
- 虚拟机自带的加载器
- 启动类(根)加载器
- 扩展类加载器
- 应用程序加载器
- 加载main 的调用会从 root加载器中找 ,如果没有再去扩展加载器中找,最后才去 当前应用加载器下找。
- toString 在内置root 包下有这个方法,所以会报错
- 而,如果给列加上实现的@接口,jvm就知道了她是不是root 里面的方法,是实现了某个类的方法。
- 在我们的start 方法里,有一个start0 的native类别的方法。这是线程级别的东西。Java只是在 C++ 的基础上去除了指针和把内存交给 jvm 来管理,如果要关闭start ,就要用到C++底层,这属于操作系统上的本地方法库native 。
3. 沙箱安全机制
- 机器人类,会自动控制鼠标操着
- class对象是在编译后生成的(存在同名.class文件中)既然编译后就生成了class对象为什么JVM加载时又生成个?
1.编译时生成的class类是一个文件,用来存储jvm能执行的指令集和类的信息.
2.JVM要运行程序就要在jvm中找到执行的指令,没有class对象就没有相应的指令.所有要加载class,把class加载到了JVM就会在JVM的方法区里生成类信息也就是class对象,等你在代码里有new操作时,就会在JVM的堆区里生成一个实例每个new都会有不同的实例.
所以class类的class对象只是一个概念,
JVM把class文件加载到内存中方法区,并在堆区生成了相应的class对象。但是编程思想在解释RTTI是说:每当编写并且编译了一个新类,就会产生一个class对象(被保存在一个同名的.class文件中),在加载的时候也是先查找新类的class对象是否被加载。
这样的话明显这两个class对象不是同一个对象。例如对于A.class文件Class.forName(A) 这里的A应该就是所说的class对象是代表字节码二进制文件的,是用来判断是否被加载用的吧?
追答
是老外写的书被国人翻译的,老外的思想和我们有区别,翻译的水平也有不同.不要尽信书,要有自己的判断和理解.
对于JAVA来说,老外喜欢把其说成是面对象的语言,所以什么都以对象来称呼.他们认为万物皆对象.所以,编译生成的文件也是对象,文件里的内容也是对象,内容是对于不同类的信息描述也是不同的对象等等.
如果非要用对象来解译你的问题,那就是.A.class是一个文件对象,对象的内容是JVM的指令和类的描述信息.Class.forName(A);是一个动作把文件加载到JVM,而JVM加载的一个文件对象,加载后会在方法区里生成一个对象,这个对象是内存对象,其内容也是JVM的指令和类的描述,但存放的方式不同