Java中的垃圾回收机制
1.垃圾回收的必要性
当对象被创建时,会在Java虚拟机中分配一块内存(内存分配-》默认值-》初始化值),在JVM的生命周期中,Java程序在不断地创建对象,如果这些对象的内存不被及时回收,会导致内存空间不足,因此要有一种措施及时回收无用对象的内存,保证内存能够被重复利用。
在传统的编程语言中,内存回收的工作由程序完成,程序显式地为对象分配内存,显式地回收,可能导致该回收的没有回收,不该回收的反而回收了。
2.java中的内存回收工作由JVM进程的一个称为垃圾回收器的系统级线程完成,它负责回收无用对象的内存,回收内存的过程成为垃圾回收。
3.垃圾回收的特点
a.只有当对象不再被任何变量引用时,它的内存才可能被回收;
b.程序无法迫使垃圾回收器立即执行垃圾回收操作
c.垃圾回收器在回收内存之前会调用finalize()方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的操作。
4.从垃圾回收器的角度看对象的状态
a.可触及状态,只要程序中还有变量引用对象,该对象就处于可触及状态《此时垃圾回收器什么都不做》;
b.可复活状态,程序中没有变量引用对象,在这个状态中,垃圾回收器会准备释放对象占用的内存,释放之前,调用它的和其他处于可复活状态的对象的finalize()方法,这些finalize()方法会使对象重新回到可触及状态;
c.不可触及状态 当JVM执行完所有的finalize()方法,都不能使对象回到可触及状态时,对象就进入不可触及状态,这时,垃圾回收器会真正回收对象的内存
5.垃圾回收的时间
(1)程序只能够决定对象什么时候能够变为可复活状态,即在程序中不让任何变量引用该对象,但是程序无法决定垃圾回收器什么时候执行,即什么时候执行finalize()方法,什么时候让对象处于不可触及状态,什么时候回收对象的内存。
(2)对象生命周期:从对象被创建开始,一直到没有任何变量引用该对象。
(3)程序无法决定垃圾回收器什么时候回收无用对象的内存,垃圾回收器作为一个地优先级的线程独立运行,可以在程序中使用System
相关文档:
数字证书:
(一)证书管理
1.keyTool证书管理
(1) 本地数字证书生成命令
keytool -genkeypair -alias www.zlex.org -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -keystore zlex.keystore -dname "CN=www.zle ......
1、JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口。
2、EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。
3、Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟 ......
(1) 对象生命周期的开始
对象生命周期开始时,需要为对象分配内存,并且初始化它的实例变量;
对象生命周期结束
& ......
JAVA语言中的反射机制:
在Java 运行时环境(JRE)中,对于任意一个类,能否知道这个类有哪些属性和方法?
对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。
&n ......
代码如下:
List <?> lines = FileUtils.readLines(new File(fileName));
for(Object line : lines){
}
问题:
1.List <?> 表示什么意思?
2.for括号内部的表达式是什么意思?
1、范型。表示lines中可保存任意类型
2、for-each 语句,作为for(int i=0;i<lines.length;i++){
Object line=lines.get(i ......