JVM探究

双亲委派机制

1.类加载器收到类加载的请求   APP

2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器

3.启动加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则,抛出异常,通知子类加载器进行加载。

 

栈:数据结构

     程序 = 数据结构 + 算法  : 持续学习

     程序 = 框架 + 业务逻辑  : 吃饭用的

 

     栈:先进后出,后进先出        桶的样子

     队列:先进先出

    

   为什么main方法先执行,后结束。

   栈:栈内存,主管程序的运行,生命周期和线程同步;

   程序结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题。

   一旦线程结束,栈就over!

   栈:8大基本类型 + 对象引用 +实例的方法

 

堆 + 栈 +方法区的交互关系

 

堆:一个JVM只有一个堆内存,堆内存的大小是可以调节的。

类加载器读取了类文件后,一般会把类,方法,常量,变量,所有引用类型的真实对象保存到堆中。

堆内存中还要细分为三个区域:

  • 新生区  (伊甸园区,幸存者0区,幸存者1区)
  • 养老区
  • 永久区    (元空间)   逻辑上存在,物理上不存在。

 

     伊甸园区满了之后就会触发轻GC,把对象留存到幸存者区或者清除。新生区满了之后会触发重GC,

清除新生区,把存活下来的保存到养老区。(默认经历15次清理之后会去养老区)

     永久区:常驻内存的,用来存放jdk自身携带的Class对象。Interface元数据,存储的是java运行时的一些环境或类信息。

不存在垃圾回收,关闭VM虚拟机就会释放这个区域的内存。

  1.  jdk1.6之前   永久代,常量池在方法区
  2.  jdk1.7          永久代,但是慢慢的退化了,去永久代,常量池在堆中
  3.  jdk1.8之后    无永久代,常量池在元空间       

 

 

 

 

 

 

posted @   不想当将军的好士兵  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示