iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >3分钟了解JAVA中GC的概念
  • 333
分享到

3分钟了解JAVA中GC的概念

gc概念 2017-02-24 21:02:55 333人浏览 绘本
摘要

前言GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC。做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 GC,更适用我们日常的学习和生活,知其然,

前言

GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC。

做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 GC,更适用我们日常的学习和生活,知其然,知其所以然,方能百战不殆。

(推荐视频:java视频教程

下面我们先去了解为什么要有 GC,以及 GC 在 JVM 中扮演了一个什么样的角色,起到了什么的作用?

为什么要有 GC

用过 c++ 的同学可能知道,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象。如果我们不去手动的清除这些无用的对象,内存很快就被占满,而在 JVM 中,GC 所起到的作用就是一个清道夫,它可以帮助我们去判定哪些对象是无用对象,怎么进行垃圾收集,以及决定内存分代和内存分配的策略**。

可能有同学会问了,既然我们的 JVM 会给我们做 GC 的工作,我们为什么还要去学习 GC 呢,一切交给 JVM 不好吗?当然,在我们的日常情况下,我们一般不会去关心 GC 的一些细节,但是当我们遇到内存泄露,内存溢出,高并发瓶颈的时候,我们就需要去对 GC 开刀,进行更为细致的监控和调节。

内存泄露:指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存溢出:应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。

那么现在问题来了,我们要进行垃圾回收,首先我们需要知道垃圾在哪

垃圾在哪

前面我们讲了JVM 的运行时内存区域,知道线程可以分为线程独占区和线程共享区,其中线程独占区(程序计数器,虚拟机栈,本地方法栈)的内存生命周期是和线程保持一致,且这几个区域分配的内存大小跟类的大小有关,也就是说,当我们的类结构固定之后,这部分的内存就不会再发生更改,且当方法或线程结束的时候,内存自然就跟随着回收了.

而线程共享区的堆内存和方法区则不一样,堆内存和方法区所用的内存是在编译期间无法确定的,因为一个接口的不同实现,一个方法的不同控制条件分支所执行的代码可能完全相反,我们只有在运行时才知道会创建哪些对象,这部分的内存的分配和回收是动态的,而我们的 GC 关注的就是该部分的内存。

打个比方来说:JVM 如果是一辆车,线程独占区的就像是零件,在出厂时这些零件的寿命基本上都是已知的,线程共享区就像是汽油,汽油的消耗跟我们所采用的路线有关,所以我们关注的部分就是这部分会动态变化的,比如如何开车才能更省油~

本文来自编程界网,java教程栏目,欢迎学习!

--结束END--

本文标题: 3分钟了解JAVA中GC的概念

本文链接: https://www.lsjlt.com/news/1842.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 带你了解JAVA中的一些锁概念
    目录乐观锁和悲观锁读写锁重量解锁和轻量级锁自旋锁公平锁和非公平锁可重入锁和不可重入锁死锁CAS(compare and swap)比较并交换synchronized的锁升级过程总结乐...
    99+
    2024-04-02
  • 3分钟了解Mysql空间搜GeoHash
    简单介绍:   Mysql 内置函数方案,适合于已有业务,新增加LBS功能,增加经纬度字段方可,避免数据迁移,在5.7.5后实现更多功能实现INNODB的空间搜方法,之前版本主要是对MYISAM的支持。    在此之前,InnoDB将几何数...
    99+
    2023-01-31
    空间 Mysql GeoHash
  • Java中内部类的概念与分类详解
    目录内部类概念内部类的分类:成员内部类普通内部类静态内部类局部内部类总结只能使用修饰限定符:public 和 默认 来修饰类 内部类概念 在 Java 中,将一个类定义在另一个类的内...
    99+
    2024-04-02
  • 深入了解PHP中的Request概念
    标题:深入了解PHP中的Request概念 在PHP编程中,Request是一个非常重要的概念,它代表着客户端向服务器发送的请求。了解Request的机制可以帮助我们更好地处理用户输入...
    99+
    2024-02-27
    php request 概念 表单提交
  • JavaHttp的基础概念了解
    目录基本概念了解网络的分层HTTP协议HTTP和TCP的关系总结学完了计算机网络课程以后,确实学到了一些网络的概念,初步拥有了对网络的一些认识。这些概念虽然可以用来解释平时网络上遇到...
    99+
    2023-05-17
    java Http Http基础概念
  • 了解Go语言中数组的概念
    数组概述 数组是Go语言中一种基本的数据类型,用于存储一组具有相同类型的数据元素。数组中的每个元素都有一个唯一的索引,可以通过索引来访问该元素。数组的长度是固定的,一旦创建就不能改变。 创建数组 可以使用以下...
    99+
    2024-01-31
    go数组理解 go数组功能 go数组特点 go语言
  • Java中难理解的四个概念
    目录前言匿名内部类创建匿名内部类有两种办法匿名类的典型使用场景多线程线程生命周期为什么要使用多线程创建线程有两种方式两种创建方式对比同步为什么要使用同步序列化为什么使用序列化关键特性...
    99+
    2024-04-02
  • PHP值概览:了解PHP的重要概念
    PHP值概览:了解PHP的重要概念,需要具体代码示例 PHP(Hypertext Preprocessor)是一种广泛应用于Web开发的脚本语言,它可以嵌入HTML中,也可以作为独立的...
    99+
    2024-04-02
  • 后端技术杂谈11:十分钟理解Kubernetes核心概念
    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看本文转自https://github.com/h3pl/Java-Tutorial喜欢的话麻烦点下Star哈本系列文章将整理于我的个人博客:www...
    99+
    2023-06-04
  • 基于java中集合的概念(详解)
    集合是储存对象的,长度可变,可以封装不同的对象迭代器: 其实就是取出元素的方式(只能判断,取出,移除,无法增加)就是把取出方式定义在集合内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类.二每一个容器的数据结构不...
    99+
    2023-05-31
    java 集合 概念
  • Java逃逸分析的基本概念
    这篇文章主要介绍Java逃逸分析的基本概念,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概念引入我们都知道,Java 创建的对象都是被分配到堆内存上,但是事实并不是这么绝对,通过对Java对象分配的过程分析,可以知道...
    99+
    2023-05-30
    java
  • Java流的概念怎么理解
    本篇内容主要讲解“Java流的概念怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java流的概念怎么理解”吧!昨天寝室同学问了我个关于Java流的问题,在解答完后很有感触,我认为可能所有...
    99+
    2023-06-17
  • 深入了解Go语言中的变量概念
    Go语言是一种开发效率高、性能优越的现代编程语言,在Go语言中,变量是一个非常重要的概念。本文将深入探讨Go语言中的变量概念,通过具体的代码示例来帮助读者更好地理解和掌握变量的使用。 ...
    99+
    2024-04-02
  • 【JAVA】十分钟带你了解java的前世今生
    个人主页:【😊个人主页】 系列专栏:【初始JAVA】 文章目录 前言JAVA介绍诞生🔬名字与图标🤖发展🛩️未来🪄 前言 玩过我的世界的朋...
    99+
    2023-08-25
    java 开发语言
  • java中锁的概念是什么
    java中锁的概念是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;...
    99+
    2023-06-14
  • java中string的概念是什么
    这篇文章主要介绍了java中string的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中string的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,string是字符串的意...
    99+
    2023-07-05
  • java中void的概念是什么
    这篇文章主要介绍了java中void的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中void的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,void是“空”的意思,即“什么...
    99+
    2023-07-05
  • 了解 PHP Session 跨域的基本概念
    在开发 web 应用程序时,我们经常会遇到处理用户会话(session)的需求。PHP 提供了 Session 功能来跟踪用户在不同页面间的状态。然而,当 web 应用程序涉及到跨域访问时,Session 的管理会变得稍微复杂一些。本文将介...
    99+
    2023-10-21
    PHP session 跨域
  • 五分钟看穿Java并发相关概念,并发原来如此简单
    本文主要对Java并发(Concurrent)相关的概念进行说明。1.进程(Process)与线程(Thread)进程是系统资源分配的最小单元。线程是CPU调度的最小单元。一个 进程至少包含一个线程,可以包含多个线程。这些线程共享这个进程的...
    99+
    2023-06-02
  • Java面试前必须了解的10个概念是什么
    这篇文章主要介绍“Java面试前必须了解的10个概念是什么”,在日常操作中,相信很多人在Java面试前必须了解的10个概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java面试前必须了解的10个概念...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作