JVM探究

JVM探究,第1张

JVM探究 1.jvm的位置

2.jvm的体系结构

3.类加载器(双亲委派机制)

作用:加载Class文件

  • 虚拟机自带的加载器
  • 启动类(根)加载器
  • 拓展类加载器
  • 应用程序加载器

类加载器收到类加载的请求,会将这个请求向上委托给父类加载器来完成,一直向上委托,直到启动类加载器;启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器;否则,抛出异常,通知子加载器进行加载;
出现null表示加载不到,因为虚拟机自带的加载器是c,c++写的

4.Native,方法区 native

凡是带了native关键字的,说明java的作用范围达不到了,需要调用底层c语言的库;
会进入本地方法栈,调用本地方法接口(JNI:拓展java的使用,融合不同的编程语言为java所用),最初为c,c++。因为Java诞生的时候,c和c++很流行,想要立足就必须要有调用c,c++的程序,它会在内存中专门开辟一块标记区域来登记native方法,在最终执行的时候加载本地方法库中的方法通过JNI

方法区


static,final,Class

5.PC寄存器

程序计数器:每一个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也就是即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计

6.栈

栈:先进后出,后进先出
队列:先进先出

为什么main()先执行,最后结束

栈主管程序的运行,生命周期和线程同步;线程结束,栈内存也就释放;对于栈来说,不存在垃圾回收问题


这时候就会栈溢出

栈存储的是什么?

8大基本数据类型,对象引用,实例的方法

Heap,一个JVM中只有一个堆内存,堆内存的大小是可以调节的
堆内存中可以细分为三个阶段:

  • 新生区
  • 养老区
  • 永生区

GC垃圾回收主要是在伊甸园区和养老区;在JDK8以后,永久存储区改了个名字(元空间)
假设内存满了,OOM,堆内存不够了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4000008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-22
下一篇 2022-10-22

发表评论

登录后才能评论

评论列表(0条)

保存