Java基本概念-垃圾回收机制相关

来源:互联网 发布:linux while加快循环 编辑:程序博客网 时间:2024/06/07 14:06
一 Java内存的分配情况
 
 1 Java内存分为四个区:方法区、堆区、栈区和系统全局区
 
 2 各个区的适用范围:
 
   方法区:默认最大容量为64M,保存类的结构(属性和方法),类的静态成员等内容
 
   堆区:默认最大容量为64M,凡是new了的均在堆中分配内存,对象属性的值保存在堆中,
 
   栈区:默认最大容量为1M,供局部变量(包括基本类型和引用类型)使用,基本类型在栈中存放对应的变量值,引用类型在栈中存放对象的引用。
 
   系统全局区:为静态量和字面量分配内存
 
 3 任何一个内存区域溢出都会导致程序出现错误:栈内存溢出会发生StackOverflowException错误,对堆内存溢出会发生OutOfMemoryError错误
 
二 equals和“==”
 
 1 “==”是比较两个变量的内存地址编号是否相等
 
 2 equals如果不重写,Object类中默认equals方法比较的是内存地址编号,相当于“==”;可以对其进行重写,比较当前对象和传入对象的内容是否相等
 
三 值传递和引用传递
 
 1 方法形参是基本类型时,在被调方法内部改变了方法形参的值,主调方法main的实参不受影响
 
 2 方法形参是引用类型时,在被调方法内部修改了形参属性的值,主调方法main的实参受到影响
 
 3 值传递:实参不变;引用传递(地址):实参就是形参
 
四 垃圾回收机制(gc)
 
 1 垃圾:没有任何指向的堆中的内存块,即不被引用的对象就是垃圾
 
 2 垃圾回收机制:由Java自动对不再使用的内存进行回收的机制
 
 3 内存中各个区的垃圾回收情况:
 
   栈中:栈会在方法调用时划分栈帧(分配的内存),方法调用结束时回收栈帧,不需要垃圾回收
 
   方法区:回收不再被对象引用的类结构所占用的内存
 
   堆区:回收不再被对象引用的对象数据所占用的内存,垃圾回收机制只回收堆中的
 
   系统全局区:程序运行完释放内存,不需要垃圾回收
 
 4 回收的时间:不确定
 
 5 回收时调用的方法(析构方法):finalize():继承Object类,规定修饰符为protected
 
 6 回收由谁完成:Java虚拟机
 
五 Runtime类:检测内存的使用情况
 
 1 主要方法:
 
   getRuntime():获取runtime对象;
 
   totalMemory():获取Java虚拟机分配给程序的内存数量,单位为字节数
 
   freelMemory():获取当前可用的内存数量,单位为字节数
 
   maxlMemory():获取Java虚拟机可以内存数量申请到的最大内存数量,单位为字节数
 
   gc():建议Java虚拟机进行垃圾回收,不保证一定会进行,Runtime.getRuntime().gc();该方法要求垃圾回收线程立即启动,来回收垃圾
 
六 字符串池
 
 1 字符串的两种定义方式的内存分配情况:
 
   字符串对象:new一次在堆中分配一次内存
 
   字面量:在系统全局区中,相同的值只分一次内存
 
 2 使用StringBuffer和StringBuilder高性能的动态创建字符串:调用append方法追加,节省内存
 
 3 StringBuffer与StringBuilder的区别:StringBuilder是线程安全的
 
 七 获取时刻的方法:System.currentTimeMillis(),单位:ms
0 0