首页 > 编程语言 >给我说说你对Java GC机制的理解?

给我说说你对Java GC机制的理解?

时间:2023-03-18 22:33:42浏览次数:37  
标签:Java 对象 理解 GC 引用 JVM 方法

JVM的运行数据区

方法区

不止是存“方法”,而是存储整个 class文件的信息,JVM运行时,类加载器子系统将会提取 class文件里面的类信息,并将其存放在方法区中。例如类的名称、类的类型(枚举、类、接口)、字段、方法等等。

堆( Heap)

每个应用都唯一对应一个JVM实例,而每一个JVM实例唯一对应一个堆。堆主要包括关键字 new的对象实例、 this指针,或者数组都放在堆中,并由应用所有的线程共享。堆由JVM的自动内存管理机制所管理,名为垃圾回收—— GC(garbage collection)。

栈( Stack)

操作系统内核为某个进程或者线程建立的存储区域,它保存着一个线程中的方法的调用状态,它具有先进后出的特性。在栈中的数据大小与生命周期严格来说都是确定的,例如在一个函数中声明的int变量便是存储在stack中,它的大小是固定的,在函数退出后它的生命周期也从此结束。在栈中,每一个方法对应一个栈帧,JVM会对Java栈执行两种操作:压栈和出栈。这两种操作在执行时都是以栈帧为单位的。还有一些即时编译器编译后的代码等数据。

PC寄存器

pc寄存器用于存放一条指令的地址,每一个线程都有一个PC寄存器。

本地方法栈

用来调用其他语言的本地方法,例如 C/C++写的本地代码, 这些方法在本地方法栈中执行,而不会在Java栈中执行。

初识GC

自动垃圾回收机制,简单来说就是寻找 Java堆中的无用对象。

如何确定需要回收的垃圾对象?有引用计数法和可达性分析法,Java采用的是可达性分析法。基本思想就是选定一些对象作为 GC Roots,并组成根对象集合,然后从这些作为 GC Roots的对象作为起始点,搜索所走过的引用链( ReferenceChain)。如果目标对象到 GC Roots是连接着的,我们则称该目标对象是可达的,如果目标对象不可达,则说明目标对象是可以被回收的对象。

作为 GC Root的对象可以主要分为四种。

  • JVM栈中引用的对象;
  • 方法区中,静态属性引用的对象;
  • 方法区中,常量引用的对象;
  • 本地方法栈中,JNI(即Native方法)引用的对象;

在 JDK1.2之后,Java将引用分为强引用、软引用、弱引用、虚引用4种,这4种引用强度依次减弱。

分代与GC机制

 

标签:Java,对象,理解,GC,引用,JVM,方法
From: https://www.cnblogs.com/xfeiyun/p/17231968.html

相关文章

  • 用Java代码验证三门问题
    三门问题(MontyHallproblem)亦称为蒙提霍尔问题,出自美国的电视游戏节目Let'sMakeaDeal。问题名字来自该节目的主持人蒙提·霍尔(MontyHall)。参赛者会看见三扇关闭......
  • JavaScript 数据类型详解
    原文链接:​   ​​https://note.noxussj.top/?source=51cto​​常见的ES5数据类型分为基本数据类型、引用数据类型两种。包含字符串、数字、对象、数组、函数、布尔值......
  • #yyds干货盘点#对于babel的一些理解
    Babel是一个JavaScript编译器Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器......
  • 你说你精通Java并发,那给我讲讲J.U.C吧
    J.U.C即java.util.concurrent包,为我们提供了很多高性能的并发类,可以说是java并发的核心。Concurrent包下所有类底层都是依靠CAS操作来实现,而sun.misc.Unsafe为我们提供了......
  • Java笔记(二):String类
    String代表的是Java中的字符串,String类⽐较特殊,它整个类都是被final修饰的,也就是说,String不能被任何类继承,任何修改String字符串的⽅法都是创建了⼀个新的字......
  • Java笔记(一):基础
    1.JDK和JRE的区别JDK(JavaDevelopmentKit)开发工具基本类库javac编译javap反编译javadoc运行环境JRE(JavaRuntimeEnvironment)3.Lambda表达式使......
  • 带你深入Java Log框架,彻底搞懂Log4J、Log4J2、LogBack,SLF4J
    最近系统被扫出来还在使用老旧的log4j,需要升级到最新的log4j。但是在升级的发现,Java相关的日志处理库有log4j,log4j2,slf4j和logback,初一看确实有点头大,那么区别是啥呢?......
  • Java三大版本。JDK、JRE、JVM
    JavaSE:标准版(桌面程序,控制台开发...)JavaME:嵌入式开发(手机,小家电...)JavaEE:E企业级开发(Web端,服务器开发...)JDK:javadevelopmentkitJava开发者工具JRE:javaruntimeen......
  • Java面试系列:基础知识点
    一、List、Set、Collection的区别 二、ArrayList和LinkedList的区别 三、HashMap和HashTable的区别TRANSLATEwithxEnglishArabicHebrewPolish......
  • 如何理解strcpy函数中的赋值语句?
    关于strcpy函数的赋值语句如何理解while(*s++=*t++)?voidstrcpy(char*s,char*t){while(*s++=*t++);}该语句等价于while(*(s++)=*(t++))。赋值......