作用:加载Class文件
- 虚拟机自带的加载器
- 启动类(根)加载器
- 拓展类加载器
- 应用程序加载器
类加载器收到类加载的请求,会将这个请求向上委托给父类加载器来完成,一直向上委托,直到启动类加载器;启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器;否则,抛出异常,通知子加载器进行加载;
出现null表示加载不到,因为虚拟机自带的加载器是c,c++写的
凡是带了native关键字的,说明java的作用范围达不到了,需要调用底层c语言的库;
会进入本地方法栈,调用本地方法接口(JNI:拓展java的使用,融合不同的编程语言为java所用),最初为c,c++。因为Java诞生的时候,c和c++很流行,想要立足就必须要有调用c,c++的程序,它会在内存中专门开辟一块标记区域来登记native方法,在最终执行的时候加载本地方法库中的方法通过JNI
static,final,Class
程序计数器:每一个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也就是即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计
6.栈栈:先进后出,后进先出
队列:先进先出
栈主管程序的运行,生命周期和线程同步;线程结束,栈内存也就释放;对于栈来说,不存在垃圾回收问题
这时候就会栈溢出
8大基本数据类型,对象引用,实例的方法
堆Heap,一个JVM中只有一个堆内存,堆内存的大小是可以调节的
堆内存中可以细分为三个阶段:
- 新生区
- 养老区
- 永生区
GC垃圾回收主要是在伊甸园区和养老区;在JDK8以后,永久存储区改了个名字(元空间)
假设内存满了,OOM,堆内存不够了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)