栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

JVM Java程序运行底层原理及垃圾回收概念 day1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM Java程序运行底层原理及垃圾回收概念 day1

概念一:程序的栈(栈帧)和堆

栈:每个线程都有一个栈(栈帧),栈里包含main方法和其他main方法调用的其他方法,方法调用完后,自动释放——弹出栈(栈顶指针向下)。

堆:包含新建的对象的详细信息。需要手动释放

最难调试的bug:

  • 野指针

同一个对象,两个指针,一个释放了,另外一个不知道还拿来用

同一个指针,不同位置,

不在指向任何对象的指针

NullPionterExcepetion

  • 并发问题

    多线程访问同一块空间。

语言的发展历史

C/C++

  • 手工管理 malloc free/new delete
  • 忘记释放 - memory leak- out of memory
  • 释放多次 产生极其i难以调试的bug,一个线程空间莫名其妙被释放
  • 运行效率高,开发效率低。

Java python go

  • 方便内存管理的语言
  • GC—Garbage Collector —应用线程只管分配,垃圾回收器负责回收

rust

  • 运行效率超高(asm c c++)
  • 不用手工管理内存(没有GC)
  • 学习曲线巨高
garbage的概念

判断堆里面的对象是否是garbage

  • 简答思想:

    每个变量都有一个计数器,记录指向其的指针数,(不好)python引用计数法

  • java使用根可达**(Root Searching)**算法

垃圾回收机制:

  • Mark Sweep(标记清除)缺点:碎片化
  • Copying :只用一半的空间,垃圾回收时,把用过的一半中有效的内存整理好放进另一半里,之前的一半完全重置。(内存浪费)
  • Mark Compact(),使用整块内存,回收垃圾时整理有用的部分,清除其余部分。效率低,三种最低。

对这三种算法的综合运用,诞生了各种各样的垃圾回收器。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号