垃圾回收只收拾堆内存的对象
无法精确控制
回收前会调用对象的finalize()方法,从object继承的,意思是让系统响应有没有人要认领,以避免被清除掉。
垃圾回收的目的是回收所不需要被占用的内存
finalize()相对温和,用于资源清理,当确认无人认领就回收空间
对象的三种状态:
有连接:可达状态
无连接:可恢复状态,在finalize之后无人认领,直接杀掉不可达
强制回收:
System.gc();
Runtime。getRuntime()。gc();
java -verbose:gc 文件名;
用这条命令执行java程序可以看到回收动作和前后内存占用比;
不要主动调用finalize方法,应该有垃圾回收机制调用
何时被调用不确定,不是一定会被执行的
finalize方法可能会让一些对象重新变成可达状态
执行finalize方法出现异常时,垃圾回收机制不会报告异常,程序继续执行
使用以下类型引用,必须断开原有的强应用,否则无法回收
不同等级的引用,垃圾回收机制对待的态度不同
强引用很常见,比如String a=“haha”;
软弱虚引用要重新定义:
先String a=“haha”;
然后
SoftReference:SoftReference sr=new SoftReference(a);
软引用,当内存空间足够,不会回收,不够时可能回收
WeakReference:WeakReference wr=new WeakReference(a);
弱引用:不论够不够一定会回收
PhantomReference:
PhantomReference pr=new PhantomReference(a);
虚引用有跟没有一样
前两个引用可以单独时候,虚引用不可单独,用来跟踪对象被垃圾回收的状态,虚引用保持在关联队列,如果查找队列中包含,说明已被回收
ReferenceQueue rq=new ReferenceQueue();//创引用队列
PhantomReference pr=new PhantomReference(a,rq);//关联
sr wr pr 都是引用,没有类型信息,可以通过各自的get()方法获得对象。
jar是一种压缩格式,一种打包,安全,速度快,压缩,包装,可移植,只是多了一个META-INF目录包含一个MAINFEST.MF清单文件
打包命令jar ,在cmd输入jar空格可以看到参数
先在cmd输入cd 要打包的目录的上级路径:作用就是跳转到要打包的目录的所在目录地址
jar A 打包后的名字 要打包的目录:这个是格式,A代表参数,必须要有参数,根据需要添加。
uf更新无信息,uvf更新由信息提示
cf 打包无信息 cvf打包有信息
xf打包无信息 xvf打包有信息
打包一个可执行的程序包需要加参数e
jar cvfe test.jar testdir mainclassname