关于java垃圾回收机制

c语言的垃圾回收是人工回收,他们可控性强,java语言垃圾回收是自动的,可控性差,有时候会出现内存溢出的情况(内存溢出: 也就是jvm分配的内存对象过多,超过了最大可分配内存的大小)

        提到垃圾回收机制,就要提到Gc方法,System.gc()这个方法就是来调用垃圾收集器的,在调用时,垃圾收集器将运行已回收但未使用的内存空间,它将尝试释放被丢弃对象占用的存,System.gc()方法有一个免责声明,它和finalize()方法一样不能保证马上能执行,有时候程序执行的比较快,到结束进程了都没有执行Gc,他只是告诉垃圾回收器要进行垃圾回收,但他不能保证完成任务.

在了解垃圾回收机制之前,我们需要对jvm有所了解

1.jvm的作用:

首先通过编译器把java代码转化成字节码,类加载器再把字节码加载到内存,将其放在运行时数据区(RuntimeData area)的方法区内,而字节码文件只是jvm的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎,将字节码翻译成底层系统指令,再交给CPU去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface) 来实现整个程序的功能

2.jvm内存模型(java栈,native栈,程序计数器(线程独占),堆,方法区(线程共享))

java栈: 属于线程私有区,存储栈帧

native栈:主要用于对接其他语言

程序计数器: 计算java栈执行的行数

方法区: 常量池,不可变的常量数据

堆: 存储所有对象,gc的主要回收空间

JVM区域总体分两类,heap(堆)区和非heap区。

heap区又分为:

Eden Space(伊甸园,新生代)、 Survivor Space(幸存者区)、 Old Gen(老年代)。 非heap区又分:

Code Cache(

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java垃圾回收机制Java语言的一项重要特性,它可以自动管理内存,减轻了程序员手动释放内存的负担。Java垃圾回收机制主要通过垃圾收集器(Garbage Collector)来实现。 在Java中,当一个对象不再被引用时,就可以被判定为垃圾垃圾收集器会定期扫描堆内存,找出不再被引用的对象,并将其回收释放内存空间。这样,程序员就不需要手动释放对象所占用的内存,大大简化了内存管理的工作。 Java垃圾回收机制基于以下两个核心概念: 1. 引用计数法:每个对象都有一个引用计数器,当有新的引用指向该对象时,计数器加1;当引用失效时,计数器减1。当计数器为0时,表示该对象不再被引用,可以被回收。但是,引用计数法无法解决循环引用的问题,即两个或多个对象相互引用,但与程序的根节点没有直接引用关系,导致无法被回收。 2. 可达性分析算法:Java垃圾回收机制采用可达性分析算法来判断对象是否可被回收。该算法从程序的根节点(如静态变量、方法参数等)出发,通过引用链追踪对象的引用关系,如果一个对象不可达(即无法通过引用链与根节点相连),则被判定为垃圾,可以被回收Java垃圾回收机制具有以下优点: 1. 简化了内存管理,减少了内存泄漏和野指针等问题的发生。 2. 提高了程序的可靠性和稳定性,减少了因为内存管理错误导致的程序崩溃。 3. 提高了开发效率,程序员不需要手动释放内存,可以更专注于业务逻辑的实现。 然而,垃圾回收机制也存在一些缺点: 1. 垃圾回收过程会占用一定的系统资源,可能会导致程序的运行速度变慢。 2. 垃圾回收的时间是不确定的,可能会导致程序在某些时刻出现短暂的停顿。 相关问题: 1. Java垃圾回收机制是如何工作的? 2. 什么是引用计数法?它有什么缺点? 3. 什么是可达性分析算法?它如何判断对象是否可被回收? 4. 垃圾回收机制有哪些优点和缺点?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值