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
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
- Java基本概念-垃圾回收机制相关
- java垃圾回收机制相关
- java垃圾回收相关
- java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- 【java】垃圾回收机制
- [Java] 垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- java垃圾回收机制
- java 垃圾回收机制
- java垃圾回收机制
- Python时间戳和日期的相互转换
- 配合spring 使用 tomcat连接池
- Missing artifact net.sourceforge:pinyin4j:jar:2.5.0
- 99. Recover Binary Search Tree
- 清除浮动的方式
- Java基本概念-垃圾回收机制相关
- idea配置echache.xml报错Cannot resolve file 'ehcache.xsd'
- Zabbix 检测Mysql数据库的主从同步
- Double Queue set解法
- 超级简单的Android Studio jni 实现(无需命令行)
- 查看SQL SERVER邮件发送信息
- c++ Primer Plus(第六版)第七章习题,写代码之路
- 常用 ajax js 表单 下拉加载
- Trafodion 查看原生HBase表