JVM 内存管理

2021-09-01  本文已影响0人  我要离开浪浪山

1、Java Virtual Machine

JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

Java 程序不一样,使用 javac 编译成 .class 文件之后,还需要使用 Java 命令去主动执行它,操作系统并不认识这些 .class 文件。所以JVM就是一个翻译。

图片.png

2、Java从编译到运行

图片.png

3、JVM的跨平台与语言无关性

图片.png

4、运行时数据区域

图片.png

5、JAVA方法运行的内存区域

图片.png

6、程序计数器

指向当前线程正在执行的字节码指令的地址

7、虚拟机栈

8、本地方法栈

图片.png

9、线程共享的区域

图片.png

10、方法区/永久代

元空间大小参数:

11、堆

堆大小参数:
-Xms:堆的最小值;
-Xmx:堆的最大值;
-Xmn:新生代的大小;
-XX:NewSize;新生代最小值;
-XX:MaxNewSize:新生代最大值;
例如- Xmx256m

12、直接内存

13、深入辨析堆和栈

功能

14、栈溢出

15、堆溢出

16、方法区溢出

(1)运行时常量池溢出
(2)方法区中保存的Class对象没有被及时回收掉或者Class信息占用的内存超过了我们配置。

注意Class要被回收,条件比较苛刻(仅仅是可以,不代表必然,因为还有一些参数可以进行控制):

1、 该类所有的实例都已经被回收,也就是堆中不存在该类的任何实例。

2、 加载该类的ClassLoader已经被回收。

3、 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

17、 本机直接内存溢出

上一篇 下一篇

猜你喜欢

热点阅读