Java的内存回收
一、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的内存回收的更多相关文章
- 谈JAVA的内存回收(一)
谈JAVA的内存回收 程序员需要通过关键字new创建Java对象,即可视为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间,当一个Java对象失去引用时,JVM的垃圾回收机制会自动清除他 ...
- Java的内存回收机制
原文出处: cnblogs-小学徒V 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C ...
- [转载]Java的内存回收机制
转自:http://www.admin10000.com/document/1671.html 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由J ...
- 从Java虚拟机的内存区域、垃圾收集器及内存分配原则谈Java的内存回收机制
一.引言: 在Java中我们只需要轻轻地new一下,就可以为实例化一个类,并分配对应的内存空间,而后似乎我们也可以不用去管它,Java自带垃圾回收器,到了对象死亡的时候垃圾回收器就会将死亡对象的内存回 ...
- [java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)
内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次m ...
- Java jvm 内存回收机制
http://blog.csdn.net/yaerfeng/article/details/51291903 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方 ...
- Java的内存回收机制详解X
http://blog.csdn.net/yqlakers/article/details/70138786 1 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前 ...
- Java技术专题之JVM逻辑内存回收机制研究图解版
一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JV ...
- 为什么JAVA的垃圾回收机制无法避免内存泄漏
一.本文参考: 1.<深入理解java虚拟机 JVM高级特性与最佳实践> 2.http://coderevisited.com/memory-leaks-in-java/ ...
随机推荐
- SpringMVC10 InitBinder 注册自定义编辑器
1.配置web.xml文件 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3// ...
- 使用AlarmManager定期执行工作
新建一个Service来模拟后台执行的程序,PollingService.java: package com.ryantang.rtpollingdemo; import android.app.No ...
- 【踩坑】vue 无法让后台保存 session
今天在调试 iblog 客户端时,发现登录后进行增加.删除.更新操作时都提示还没有登录. 此问题曾经在用 ajax 调试时出现过,解决办法是,在请求时带上 creditials: true ,即让发出 ...
- CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤
一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...
- cf600E. Lomsat gelral(dsu on tree)
题意 题目链接 给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 Sol dsu on tree的裸题. 一会儿好好总结总结qwq #include<bits/stdc++.h> ...
- sql & sqlalchemy join多个表
# 连接两个数据表的用法: FROM Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort # 语法格式可以概 ...
- JavaScript_对象
1. 直接创建实例: //简单对象 var person1 = new Object(); person1.name = "Mike"; person1.age = 29; pe ...
- windows下php7.1.5、mysql环境搭建
php http://windows.php.net/download/ 如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本:而用FastCGI模式运行PHP的话就 ...
- <已解决> Eclipse启动失败
参考:http://stackoverflow.com/questions/15404964/starting-eclipse-results-in-failed-to-create-java-vir ...
- MVC文件下载和webform也能使用的下载方法
public ActionResult Index() { DownloadMethod("text/plain", "C:/Users/sunny/Pictures/S ...