写给自己的JAVA工程师之路-基础类库

来源:互联网 发布:java开源社区 编辑:程序博客网 时间:2024/06/01 20:34

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("我出生了");}@Overrideprotected 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;}@Overridepublic String toString() {return "姓名  :"+this.name + "年龄  :" + this.age;}@Overrideprotected 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());}}


原创粉丝点击