1 RUNTIME
在每一个Java进程中都会存在一个runtime类的对象,由于此对象是由java进程自己维护,所以在整个runtime类设计的过程中只为用户提供的唯一的实例化对象,所以这个类使用的是单例模式。
public class demo {
public static void main(String[] args) {
Runtime run = Runtime.getRuntime(); //取得runtime实例化对象
System.out.println("MAX ="+run.maxMemory());//取得最大内存空间
System.out.println("TOTAL ="+run.totalMemory());//取得总共可用内存空间
System.out.println("FREE ="+run.freeMemory());//取得空闲内存空间
}
}
JVM内存划分
Java中的内存划分主要有两个组成部分:
堆内存:保存实例化对象的内容,在每一个JVM进程之中,对象的堆内存空间都会由垃圾收集器管理回收问题
非堆内存(Eden + Front space + To space):主要用于产生新的对象;
-| 所有方法的全局区
-| 所有的static的全局数据区
-| 永生代:负责存放反射对象的操作空间
如果要调整内存大小,主要调整的就是堆内存空间,它的调整有三个参数:
"-Xms" : 初始分配大小,最多为物理内存的1/64,最多不超过1G
"-Xmx" : 最大分配内存大小,最多为物理内存的1/4
"-Xmn" : 年轻代堆内存大小
调整内存空间: -Xms1024M -Xmx1024M -Xmn1024M
垃圾回收
新的对象保存在Eden区中,之后此对象保存在年轻代区,而后在进行GC之后,所有被保留下来的年轻代中的对象(从GC,MinorGC)将保存在旧生代(主GC,MajorGC)
如果再有新的对象,从年轻代回收,在找旧生代,最后都没空间,进行垃圾的全部扫描(Full GC)。
2 System
在System类中定义有取得当前日期时间的方法currentTimeMillis()
public class demo2 {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(2000);
long end = System.currentTimeMillis();
System.out.println("操作花费时间 = " + (end - start));
}
}
finalize()方法
class Person{
public Person() {
System.out.println("我出生了");
}
@Override
protected void finalize() throws Throwable {//临死前要说的话
System.out.println("我死了");
throw new Exception("我不想死");
}
}
public class demo2 {
public static void main(String[] args) throws InterruptedException {
// long start = System.currentTimeMillis();
// Thread.sleep(2000);
// long end = System.currentTimeMillis();
// System.out.println("操作花费时间 = " + (end - start));
Person per = new Person();
per =null;
System.gc();
}
}
final finally finalize的区别:
final 定义不能够被继承的父类,不能够被子类所覆写的方法,定义常量
finally 在异常处理中进行异常处理的统一接口
finallize 是Object类的一个方法,是在对象回收前进行对象收尾操作
3 clone
clone():
1 返回值是Object
2 protected
3 抛出一个异常CloneNoSupportedException,需要克隆的对象必须实现Cloneable这个标识接口
class Person1 implements Cloneable{
private String name;
private int age;
public Person1(String name , int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "姓名 :"+this.name + "年龄 :" + this.age;
}
@Override
protected Object clone() throws CloneNotSupportedException {//调用父类方法
return super.clone();
}
}
public class demo3 {
public static void main(String[] args) throws CloneNotSupportedException {
Person1 per1 = new Person1("张三",18);
Person1 per2 = (Person1) per1.clone();
System.out.println(per1.toString());
System.out.println(per2.toString());
}
}