一、java引用的种类

1、对象在内存中的状态

可达状态:当一个对象被创建后,有一个以上的引用变量指向它。

可恢复状态:

不可达状态:当对象的所有关联被切断,且系统调用所有对象的finalize方法依然没有使该对象变成可达状态,那该对象将永久性的失去所有引用,最后变成不可达状态。

2、引用的类型

强引用:

软引用:

弱引用:

虚引用:

二、java的内存泄露

三、垃圾回收机制

1、垃圾回收算法

串行(Serial)回收和并行(Parallel)回收:串行是始终只有一个CPU在执行垃圾回收操作;并行是把整个回收工作拆分成多个部分,每一部分由一个CPU负责,从而让多个CPU并行回收。并行回收效率高,但复杂度增加,内存碎片增加。

并发(Concurrent)执行和应用程序停止(Stop-the-world):

压缩(Compacting)、不压缩(Non-Compacting)和复制(Copying):为了减少内存碎片,支持压缩的垃圾回收器会把所有的活动对象搬迁到一起,然后将之前占用的内存全部回收。不压缩的垃圾回收只会回收内存,这样回收来的内存不是连续的,造成内存碎片。不压缩的相对于压缩式的,回收比较快,但内存分配慢。复制的垃圾回收会把所有的可达对象拷贝到另一块相同的内存中,优点是垃圾回收过程中不会产生内存碎片,缺点是需要复制数据和额外的内存。

标记清除(mark-sweep):不压缩

标记压缩(mark-sweep-compact):压缩式

2、堆内存的分代回收

yong:

old:

permanent:

3、与垃圾回收的附加选项

-Xmx:java虚拟机堆内存的最大容量

-Xms:初始容量

-XX:MinHeapFreeRatio=40

-XX:MaxHeapFreeRatio=70

-XX:NewRatio=2

-XX:NewSize=64m

-XX:SurvivalRatio=8

-XX:MaxNewSize=128m

-XX:PermSize=128m

-XX:MaxPermSize=128m

4、常见的垃圾回收器

串行回收器:yong,串行复制;old,串行标记压缩

并行回收器:

并行压缩回收器(Parallel Compacting Collector):

并发标记-清理(mark-sweep)回收器:

四、内存管理的小技巧

1、尽量使用直接量;

String str="hello world";

String str=new String("hello world");

2、使用StringBuilder和StringBuffer进行字符串连接;

3、尽早释放无用对象的引用;

obj=null;

4、尽量少用静态变量;

与类的生命周期同步。

5、避免在经常调用、循环的方法中创建对象;

6、缓存经常使用的对象;

牺牲系统空间换取运行时间

7、尽量不要使用finalize方法;

在对象失去引用之后,垃圾回收器回收该对象之前,垃圾回收机制会先调用该对象的finalize方法进行资源清理。

8、考虑使用SoftReference;

Java的内存回收的更多相关文章

  1. 谈JAVA的内存回收(一)

    谈JAVA的内存回收 程序员需要通过关键字new创建Java对象,即可视为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间,当一个Java对象失去引用时,JVM的垃圾回收机制会自动清除他 ...

  2. Java的内存回收机制

    原文出处: cnblogs-小学徒V 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C ...

  3. [转载]Java的内存回收机制

    转自:http://www.admin10000.com/document/1671.html 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由J ...

  4. 从Java虚拟机的内存区域、垃圾收集器及内存分配原则谈Java的内存回收机制

    一.引言: 在Java中我们只需要轻轻地new一下,就可以为实例化一个类,并分配对应的内存空间,而后似乎我们也可以不用去管它,Java自带垃圾回收器,到了对象死亡的时候垃圾回收器就会将死亡对象的内存回 ...

  5. [java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)

    内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次m ...

  6. Java jvm 内存回收机制

    http://blog.csdn.net/yaerfeng/article/details/51291903 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方 ...

  7. Java的内存回收机制详解X

    http://blog.csdn.net/yqlakers/article/details/70138786 1 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前 ...

  8. Java技术专题之JVM逻辑内存回收机制研究图解版

    一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JV ...

  9. 为什么JAVA的垃圾回收机制无法避免内存泄漏

    一.本文参考:    1.<深入理解java虚拟机 JVM高级特性与最佳实践>    2.http://coderevisited.com/memory-leaks-in-java/   ...

随机推荐

  1. Unity C# 脚本的单例

    今天学习了一个比较不错的单例模式 public class UnitySigleton <T>: MonoBehaviour where T:class { public static T ...

  2. input累加赋值

    需求如下:第一个input添加字符到第二个input,第二个input需要累加. html: <tr> <td rowspan="2" class="D ...

  3. HTTP原理及状态码汇总

    什么是HTTP: HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准,为了提供一种发布和接收HTM ...

  4. Android——dpi相关知识总结

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸...... nexus4手机是4.7英寸 As ...

  5. Spring Boot 的配置文件application.properties

    Spring Boot 中的application.properties 是一个全局的配置文件,放在src/main/resources 目录下或者类路径的/config下. 作为全局配置文件的app ...

  6. javascript设计模式之外观模式

    /* * 外观模式 * 外观模式的主要意义在于简化类的接口,使其易于调用 */ // 你常常在不经意中使用了外观模式,尤其类库中更多(处理兼容性问题) var addEvent = function ...

  7. ECLIPSE 取消自动更新

    经常遇到一开eclipse 时,一直很卡的问题,发现是它一直尝试联网更新东西 ,如maven 所以解决办法  , eclipse 取消自动更新的方法: 1. window --> prefere ...

  8. LNA与PA

    LNA是低噪声放大器,主要用于接收电路设计中.因为接收电路中的信噪比通常是很低的,往往信号远小于噪声,通过放大器的时候,信号和噪声一起被放大的话非常不利于后续处理,这就要求放大器能够抑制噪声.PA(功 ...

  9. MySQL访问

    MySQL访问 1.介绍 python访问mysql数据库,需要安装mysql的python插件. 2.安装插件 通过pip命令安装mysql插件. # cmd>pip install PyMy ...

  10. sql常识

    1.UNION与UNION ALL的区别UNION去重且排序UNION ALL不去重不排序2.sql语句or与union all的执行效率比较:union all>union> in &g ...