jvm的垃圾回收和内存
垃圾回收:
对象的创建是我们程序员主导的,但是却没有与之相对应的delete方法来删除我们用完的对象,释放这些我们已经不需要再使用的对象的内存空间,gc:垃圾回收机制:指的就是JVM自带的一种释放无用对象占用的内存的一种手段
程序员的辅助手段:
将引用改变为指向其他的对象(或NULL),暗示JVM ,这个对象已经没有引用指向,可以被回收;
在方法内创建局部变量,利用弹栈的特点,使得局部变量失效;
理解:
当我们从代码中无需再使用某个对象时,它即为无用,所占看见应被回收;
垃圾回收机的出现可以有效的防止内存溢出和内存泄漏;
gc怎么知道该对象是否可以被回收,需了解的两种方法: 引用计数 - 对象引用遍历
注意的是:JVM主要的活动区域为 堆内存
引用计数:
早期的JVM使用的方法,会储存对象的所有引用数,会控制这个引用数的多少,在引用数为0的时候,则 视为可以进行垃圾回收
对象引用遍历:
现在大部分JVM采用的方法,从一组对象开始,沿着该对象涉及到的对象形成一个树 ( 自己理解 ),通过递归的方式,确定可达对象,不可达对象就会被视为不再需要,将其进行标记作为垃圾收集,释放对应的内存,但是释放的内存都是离散的,不是连续的,不足于装载新的对象,很多GC会有优化操作,会重新组织内存中的对象,并进行压缩,形成连续的内存空间供使用。
引用对象的强度:
引用对象:包装了我们实际需要的对象,使我们可以直接维护对引用对象的直接引用
可以理解为:给某个对象的引用进行了一层增强,使其拥有了其他的状态,我们可以根据他的状态进行辨别
对象在没有任何引用指向的时候才会被当作垃圾回收,如果我们想对有引用指向的对象做垃圾回收处理,这个 时候就涉及到了引用对象的概念,引用对象的强度将决定垃圾回收器的行为,注意:我们普通使用的引用都是强度最大的引用,强度可分为一下几种:
强可达:普通的引用
软可达:
弱可达:
虚可达:
不可达: 没有引用指向
对象的可达性状态会触发垃圾回收期作出相应的行为:
软可达对象可能会任凭垃圾回收器去回收;
若可达对象将会被垃圾回收器回收;
虚可达对象并不是真正的可达,介于可达和不可达之间,为什么说可达呢,因为它的存在可以防止对象在显式清除虚可达引用之前被回收,为什么又说他是不可达呢,因为无法通过PhantomReference访问其指称对象, 其get方法总是返回null.
jvm的垃圾回收和内存的更多相关文章
- JVM、垃圾回收、内存调优、常见參数
一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写.JVM是一种用于计算设备的规范.它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...
- JVM学习02:GC垃圾回收和内存分配
JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...
- JVM的垃圾回收机制详解和调优
JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...
- JVM常见垃圾回收算法
jdk1.7.0_79 众所周知,Java是一门不用程序员手动管理内存的语言,全靠JVM自动管理内存,既然是自动管理,那必然有一个垃圾内存的回收机制或者回收算法.本文将介绍几种常见的垃圾回收(下文简称 ...
- jvm的垃圾回收算法
一.对象存活判断判断对象是否存活一般有两种方式:1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.2 ...
- 03 JVM的垃圾回收机制
1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你 ...
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...
- jvm详情——3、JVM基本垃圾回收算法回收策略
JVM基本垃圾回收算法回收策略 引用计数(Reference Counting):比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的 ...
随机推荐
- lambda练习题
3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao','nezha'] # def func(item): # ...
- web 文件上传的几种方式
问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...
- centos-1 nginx
常用命令 su #切换用户mkdir flodr #创建目录rm -r flodr #删除文件/目录,有提示rm -rf flodr #删除文件/目录,无提示pwd #查看当前路径 防火墙设置 ht ...
- leetcode1:两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 实例: 给定 nums = [2, 7, 11, 15],target = ...
- docker不能上传镜像到自己网站的仓库
错误提示如下: WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from ...
- Samtools在Linux上非root权限的安装
第一次在Linux上不用root权限安装软件,查看了很多博客,并实践安装成功.大致总结了一下samtools的安装过程,仅供大家参考,如有不对的地方,欢迎指正~ samtools安装过程中依赖于lzm ...
- logstash 修改配置不重启的方法
1.修改好yml配置 2.进入logstash 容器内,或服务器上 3.ps -ef | grep logstash 拿到进程号 4.kill -1 <pid> 5.logstash 会重 ...
- java GUI的效果图
import java.awt.*;import javax.swing.*; public class GridBagDemo extends JFrame { public static v ...
- java之路 定义个一初始值 取它 个位 十位 百位 千位。。的数值。
class Demo{ public static void main(String[] args){ int i =2584; //do{ int g = i%10; int s = (i%100) ...
- cytoscape.js
http://js.cytoscape.org/ HTML 报告中插入动态网络关系图利器