java随笔(二)




1、类的加载
类的加载分为隐式加载和显示加载,通常我们隐式加载用的比较多,如:Test obj=new Test();这样jvm就通过classpath找到Test.class路径,加载到内存,不过jvm在加载前会检查该类是否存在内存中,如果存在就不加载了;其次就是显示加载了,如:
Class c = Class.forName("Test");
Test obj= (Test)c.newInstance(); 通过forName显示的把类加载到内存,并通过newInstance()得到实例,这样我们就可以用obj对象了。

Class 的 forName() 方法还有另外一种形式: Class forName(String s, boolean flag, ClassLoader classloader) , s 表示需要加载类的名称, flag 表示在调用该函数加载类的时候是否初始化静态区, classloader 表示加载该类所需的加载器。如下用的例子:
Test test = new Test();//Test 类为自定义的一个测试类;
ClassLoader cl = test. getClass().getClassLoader(); // 获取 test 的类装载器;
Class c = Class.forName("TestClass", true, cl);

如果不用jvm的加载机制,可以自定义加载,如:
URL url = new URL("file:/d:/test/lib/");
URLClassLoader urlCL = new URLClassLoader(new URL[]{url});
Class c = urlCL.loadClass("TestClassA");
TestClassA object = (TestClassA)c.newInstance();

注意:在加载类的时候首先检查是否有static成员,如果存在就先给static分配内存空间并初始化,如果没有初始化值,就默认值,对象为null,整形为0;然后再初始化其他成员,最后加载构造函数;static成员如果存在不会重新分配内存,整个过程只会初始化一次。


2、jvm垃圾回收机制
jvm垃圾回收功能作为一个守护线程运行在后台,jvm垃圾回收是非常消耗性能的,jvm一般只会在内存不够用的时候才会去回收并清空垃圾。jvm垃圾回收算法很多,如引用计算法、追踪算法、拷贝算法、迭代算法等;我觉得引用计算法和追踪算法效果可能会更高点。一般来说,堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计数器置为1。当对象不在引用或出了作用,计算器就减1,当为0的时候,这个对象就满足了垃圾回收条件了; 追踪算法,当垃圾扫描的时候发现某个对象不可达或者在栈中没reference这个时候垃圾回收就能回收它了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值