JVM相关粗糙笔记(面试突击大白话版)

1JVM是运行在操作系统上的

jvm简析
我们一个个java程序就像上面的圆圈A,然后是运行在jvm虚拟机上的,然后jvm虚拟机由于是跨平台的,又可以运行在不同的操作系统之上,然后操作系统是用一些指令来交互底层硬件系统的。
JVM相关粗糙笔记(面试突击大白话版)
2.JVM体系结构
我们依次从.java文件然后编译到.class文件,然后再经过类加载器进行加载,验证(看看有没有破坏机器的语句),准备,初始化,卸载的5个过程。
然后类加载器与运行时数据区进行交互。
运行时数据区主要包含:方法区、 java栈 、本地方法栈、 堆、 程序计数器五个部分。
JVM相关粗糙笔记(面试突击大白话版)
静态变量(static)、常量(final)、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关。
3.类加载器
级别:APP->EXC->BOOT->虚拟机加载器 其本质是双亲委派机制 就是在加载一个类的时候 我先逐层往上抛 直到抛到根加载器 如果根加载器有这个类 我们就直接加载 如果根加载器(主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类)。如果没有这个类 我们就去EXC(拓展类:比如Apache Spring框架等等的第三方类库)里去加载 如果还没有那就去app类(我们自己定义的类 比如public person这种 的)里去加载 。
JVM相关粗糙笔记(面试突击大白话版)
JVM相关粗糙笔记(面试突击大白话版)
4.沙箱安全机制
有权限校验隔离机制确定访问域
5.Native
凡是带了native关键字的,说明java的作用范围达不到了,会去调用底层C语言的库。然后会进入本地方法栈,再调用本地方法接口(JNI java native interfece)
JNI作用 扩展java的使用,融合不同的编程语言为java所用。
它在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native方法,在最终执行的时候,加载本地方法库中的方法通过JNI
6.栈:
栈内存,主管程序的运行,生命周期和线程同步,线程结束,栈内存也就释放了,所以main函数最先调用最后结束,对于栈来说不存在垃圾回收。
递归循环调用栈就会挂 因为相当于互相无限递归压栈。
栈中的东西主要有:8大基本类型(char,bolean,byte,short,int,long,float,double)+对象引用+实例方法
JVM相关粗糙笔记(面试突击大白话版)
New一个对象的过程:
绿色是栈 兰色是堆 粉色是常量池
JVM相关粗糙笔记(面试突击大白话版)
栈运行原理:栈帧的移动
栈满了:*Error
栈+堆+方法区:方法区
Java的本质是值传递(即拷贝 值的拷贝和地址的拷贝)
内存调优
JVM相关粗糙笔记(面试突击大白话版)垃圾回收算法:
JVM相关粗糙笔记(面试突击大白话版)
JVM相关粗糙笔记(面试突击大白话版)
调优就是调多少次标记清除后再整理
JMM(java memory model)java 内存模型
它的作用是缓存一致性协议,用于定义数据读写的规则(遵守)