吾日三醒吾身
1. jvm是是什么?初始jvm
(https://blog.csdn.net/duqi_2009/article/details/101877579)
【JVM是JRE的一部分。它是一个虚构出来的计算机 是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。所以,JAVA虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。】
内存模型图
2. oom 什么是栈溢出 StatckOverFlowError 怎么分析
【oom翻译成中文就是“内存用完了 栈溢出:也就是超出了设置的范围 使得请求得不到响应】
3. jvm调优
【 根据需求进行JVM规划和预调优】
【优化运行JVM运行环境(慢,卡顿)】
【解决JVM运行过程中出现的各种问题(OOM)】
4. 内存快照
4. 内存快照怎么获取
5. 谈谈jvm中内加载器的认识
【JVM将指定的class文件读取到内存里,并运行该class文件里的Java程序的过程,就称之为类的加载;
反之,将某个class文件的运行时数据从JVM中移除的过程,就称之为类的卸载。
将类的字节码文件从JVM外部加载到内存中
确定一个类的唯一性
提供隔离特性,为中间件开发者提供便利,例如Tomcat】
6. 类的生命周期
【Java类从被虚拟机加载开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段 其中验证、准备和解析又统称为连接(Linking)阶段。】
7.类的加载的时机
【虚拟机规范并未严格规定类加载的时机,跟具体的JVM虚拟机有关。类加载的最佳时机是解析Java字节码类文件中常量池符号的时候,Class.forName()、ClassLoader.loadClass()、反射API和JNI_FindClass都可以触发类加载,Hot JVM自身启动的时候也会触发类加载。】
-
jvm位置
jvm是运行在操作系统(window linux)上
-
jvm体系结构
-
类加载器
作用:加载class文件 加载方式 ~~ new Studen();
应用程序类的加载
虚拟机自带的加载器
启动类(根)的加载器
扩载类的加载器
应用程序加载器(AppClassLoader) -
双亲委派机制
以上方法根本就不可能执行 因为
(能加载就去使用 一层一层的往下去找)
在方法执行时 首先会去根加载器中去找
找不到的话就会去 扩展加载器下面找
最后才会到 应用主函数加载器中寻找
如果写为lang.string 下 方法在以为是在跟加载下的程序
就不会去找我们写的main方法 导致我们的程序不会执行
就会爆出main方法s缺失的bug 这就是双亲委派机制
一般没人去搞这种蛋疼的操作 -
沙箱安全机制
将代码分为两块的话 可以分成本地代码 和 远程代码 Java默认对本地代码采用最高信任(即 所有资源都能无条件访问) 在对待远程代码是 会加以安全级别的权限控制 将远程代码放在沙箱中 指定权限
-
native
详情查看
-
pc寄存器
每一个程序都又应该程序计数器,是线程私有的,指向方法区的字节码(用来存储将要执行的指令) 在执行引擎读取下一条指令,内存非常小 忽略不计 -
方法区
静态方法 ,常量 ,类(构造方法 ,接口定义)运行时的常量池存在方法区 ,但是实例方法存在堆内存中 ,和方法无关 staic find class -
栈
栈:先进后出
桶:后进先出
队列:先进先出( FIFO : First Input First Output )
栈:栈内存,主管程序的运行,生命周期和线程同步;
线程结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题
一旦线程结束,栈就Over!
栈内存中:
8大基本类型+对象引用+实例的方法
栈运行原理:栈帧
栈满了: StackOverflowError -
三种jvm
sun hotstop
jrockit
j9vm -
堆
Heap, 一个JVM只有一个堆内存,堆内存的大小是可以调节的。
类加载器读取了类文件后,一般会把什么东西放到堆中?
类, 方法,常量,变量~,保存我们所有引用类型的真实对象;
堆内存中还要细分为三个区域:
●新生区(伊甸园区) Young/New
●养老区old
●永久区Perm
20. GC(垃圾回收器)
【jvm回收机制应该满足以下的条件
1.该类所有的实例对象都已被回收;
2.该类的类加载器对象已经被回收;
3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。
思维导图