JVM探究
双亲委派机制
1.类加载器收到类加载的请求 APP
2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
3.启动加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则,抛出异常,通知子类加载器进行加载。
栈:数据结构
程序 = 数据结构 + 算法 : 持续学习
程序 = 框架 + 业务逻辑 : 吃饭用的
栈:先进后出,后进先出 桶的样子
队列:先进先出
为什么main方法先执行,后结束。
栈:栈内存,主管程序的运行,生命周期和线程同步;
程序结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题。
一旦线程结束,栈就over!
栈:8大基本类型 + 对象引用 +实例的方法
堆 + 栈 +方法区的交互关系
堆:一个JVM只有一个堆内存,堆内存的大小是可以调节的。
类加载器读取了类文件后,一般会把类,方法,常量,变量,所有引用类型的真实对象保存到堆中。
堆内存中还要细分为三个区域:
- 新生区 (伊甸园区,幸存者0区,幸存者1区)
- 养老区
- 永久区 (元空间) 逻辑上存在,物理上不存在。
伊甸园区满了之后就会触发轻GC,把对象留存到幸存者区或者清除。新生区满了之后会触发重GC,
清除新生区,把存活下来的保存到养老区。(默认经历15次清理之后会去养老区)
永久区:常驻内存的,用来存放jdk自身携带的Class对象。Interface元数据,存储的是java运行时的一些环境或类信息。
不存在垃圾回收,关闭VM虚拟机就会释放这个区域的内存。
- jdk1.6之前 永久代,常量池在方法区
- jdk1.7 永久代,但是慢慢的退化了,去永久代,常量池在堆中
- jdk1.8之后 无永久代,常量池在元空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构