Java - GC是什么?为什么要有GC?
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显式操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显式的垃圾回收调用。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,在不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS系统比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。
补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。标准的Java进程既有栈又有堆。栈保存了原始型局部变量,堆保存了创建的对象。Java平台对堆内存回收和再利用的基本算法被称为标记和清除,但是Java对其进行了改进,采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:
- 伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。
- 幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
- 终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。
与垃圾回收相关的JVM参数:
- -Xms / -Xmx — 堆的初始大小 / 堆的最大大小
- -Xmn — 堆中年轻代的大小
- -XX:-DisableExplicitGC — 让System.gc()不产生任何作用
- -XX:+PrintGCDetails — 打印GC的细节
- -XX:+PrintGCDateStamps — 打印GC操作的时间戳
- -XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小
- -XX:NewRatio — 可以设置老生代和新生代的比例
- -XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布
- -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值
- -XX:TargetSurvivorRatio:设置幸存区的目标使用率
Java - GC是什么?为什么要有GC?相关推荐
- java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互
java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...
- java gc原理_Java内存管理以及GC工作原理
1.内存管理简介 内存管理的职责为分配内存,回收内存. 没有自动内存管理的语言/平台容易发生错误. 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知. 另一 ...
- java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...
- java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
- java gc会回收类么_Java GC 垃圾回收机制
一.Java GC是什么? Java垃圾回收是对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver ...
- java 程序执行后 强制gc_【GC系列】JVM的常用GC参数及GC日志解析
今天继续GC系列第三篇,熬夜不易,欢迎一键三连,给个鼓励,不点赞也没关系,我还可以,谢谢捧场[捂脸]. 常见垃圾回收器组合设定 在oracle官网上可以看到如何开启使用指定垃圾回收的命令: https ...
- java gc log调优_Java 开启 gc 日志
构建一个 jar 包程序 使用 Spring Boot 构建一个简单的 web 程序,可以直接使用 java -jar 来启动. @RestController @RequestMapping(&qu ...
- java gc日志乱码_gc原理以及gc日志剖析
gc原理以及gc日志 一.概述 学习Java的我们都知道垃圾收集(gc),大部分人把这项技术当作是java语言的伴生产物.事实上,gc的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正 ...
- Java中的gvm_深入浅出GVM之GC
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
- java gc内存_Java内存模型和GC机制
最近学习Python的GC机制时,想到了java的GC,忘得差不多了,(⊙﹏⊙)b!!这里便做一下回顾总结.推荐周志明译本的<深入理解Java虚拟机>. 1. Java内存模型 1.1 程 ...
最新文章
- 计算机组装需要的硬件,组装电脑选择硬件,只要记住2个装机思路,选好硬件配置不是难题...
- 我国网民规模已达7.51亿 但网络安全值得警惕
- request.getAttribute()和 request.getParameter()有何区别?
- OSGI动态加载删除Service bundle
- 记录kafka-flink bug
- Bootstrap HTML 编码规范之IE兼容模式
- mvn exec运行java Main报错
- (56)UART外设驱动协议(一)(第12天)
- mysql order by子查询_sql子查询 order by失效问题
- 2016-03-12 Leanning Plan
- Spine 1.73+ 和谐版
- 兴东机器人_福州市松下机器人维保中心
- 编码:隐匿在计算机软硬件背后的语言(1)--编码到二进制数字系统
- 三相桥式全控整流电路simulink仿真_变频器为什么必须整流?整流单元原理图解
- 三层交换机转发原理与实验(三层交换技术原理,MLS条目,虚接口详解与配置)
- 【SQLSERVER 2000】由于数据移动,未能继续以 NOLOCK 方式扫描
- 三运放差分放大电路分析_★三运放差分放大电路
- 学习笔记之MyEclipse里各个文件名前的小标记都代表的意思
- 软件测试行情前景,你可以做测试多久?到底能干到多少岁?
- Origin画甘特图