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
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
相关文章推荐
- java垃圾回收机制相关(出自《深入理解java虚拟机》)
- 怎么在面试时回答Java垃圾回收机制(GC)相关问题?
- java垃圾回收机制相关
- IOS ARC和垃圾回收机制 基本概念
- 基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍
- Java 垃圾回收机制概念梳理
- Java 垃圾回收机制概念梳理
- Java 垃圾回收机制概念梳理
- Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制
- 怎么在面试时回答java垃圾回收机制相关问题?
- tomcat java.lang.OutOfMemoryError: Java heap space 问题解决;Java垃圾回收机制详解和调优相关链接
- java中的垃圾回收机制的相关知识
- 【JAVA基础知识】Java 垃圾回收机制概念
- Java 垃圾回收机制概念梳理
- Java与C#的垃圾回收机制
- 全面分析Java的垃圾回收机制
- java的垃圾回收机制详解和调优
- Java的垃圾回收机制
- 深刻剖析经典面试题之二:Java与C#的垃圾回收机制
- Java的垃圾回收机制详解和调优