日期:2014-05-20  浏览次数:20638 次

关于JAVA CLASS LOADING的问题
最近在忙毕业设计,我的题目是《JAVA   CLASS   LOADING技术研究》。

以前没怎么研究过虚拟机,在网上查阅了一下相关的资料。但是还是有些地方不是很理解。特来求助。

1.类的加载。这几个字到底该怎么理解呢?是发生在编译的过程中,还是在运行的过程中?类的加载,是指一个对象在创建的时候“加载”类这个模型而创建出一个对象吗?

2.关于CLASSLOADER.类的加载器从出生到灭亡,是怎样一个过程呢?跟类的加载有什么联系?怎么理解到一起去?

3.如何实例一个CLASSLOADER?

刚刚接触,还望高手指点。

------解决方案--------------------
up
------解决方案--------------------
JAVA每个类的编译代码都存在于它自己的独立文件中,该文件只有在需要使用程序代码时才会被加载。一般,类的代码在初次使用时才加载。通常是指直到类的第一个对象被构建时才发生加载,但是当访问static字段或static方法时,也会发生加载。
------解决方案--------------------
你不妨研究一下java.lang.ClassLoader
------解决方案--------------------
我对这个研究过一段时间 可以交流一下
------解决方案--------------------
我的理解:

类的加载 与 对象的创建(产生类的实例化) 是两个概念,前者必定先于后者发生

对象是在堆中创建的,而在此之前,类肯定已经被加载到了某个地方(这个地方是否也在堆中我还不是很清楚,不过我估计也应该是),总之在这个地方保存了该类的定义,你可以理解为类的方法定义和静态成员的值都保存在这里,其实这很容易理解,这些东西在内存中只需要一个副本就够了,总不能创建一个对象(实例化一个类)就把类的方法代码都在内存中复制一次吧,我想JVM没这么弱智,

在创建一个对象(实例化一个类)时,会在堆中开辟一个空间给这个对象,用以保存该对象的相关信息,比如实例成员的值,并且至少会保存有指向该对象对应的类在内存中位置的信息,否则怎么访问这个类的方法以及静态成员呢?
------解决方案--------------------
孙卫琴老师的一本书上写有,你看看(《java面向对象编程》第10章)
------解决方案--------------------
对象实例化之前,编辑器会先按照“Import”中提到的类,到内存的某个区域(名字忘了)中查找是否已经加载了这个类。如果发现了,继续执行,未发现,则把他加载进来
------解决方案--------------------
别听上面的人“瞎说”,
先把 < <深入Java虚拟机(原书第2版)> > 这书买回来看完
中文版地址:
http://www.china-pub.com/computers/common/info.asp?id=14719

Bill Venners维护的网站:
http://www.artima.com/insidejvm/resources/

再看看:
The JavaTM Virtual Machine Specification:
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

再到OpenJDK主页: https://openjdk.dev.java.net/
把javac、hotspot源码下下来慢慢看。


------解决方案--------------------
深入Java虚拟机

电子版

ttp://download.chinaitlab.com/program/files/9789.html