您的位置:首页 > 编程语言 > Java开发

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

2017-01-20 11:52 477 查看
一 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息