jvm ---特恐怖

吾日三醒吾身
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自身启动的时候也会触发类加载。】

  1. jvm位置
    在这里插入图片描述

    jvm是运行在操作系统(window linux)上

  2. jvm体系结构

在这里插入图片描述

  1. 类加载器
    作用:加载class文件 加载方式 ~~ new Studen();
    应用程序类的加载
    在这里插入图片描述
    虚拟机自带的加载器
    启动类(根)的加载器
    扩载类的加载器
    应用程序加载器(AppClassLoader)

  2. 双亲委派机制
    在这里插入图片描述
    以上方法根本就不可能执行 因为
    (能加载就去使用 一层一层的往下去找)
    在方法执行时 首先会去根加载器中去找
    找不到的话就会去 扩展加载器下面找
    最后才会到 应用主函数加载器中寻找
    如果写为lang.string 下 方法在以为是在跟加载下的程序
    就不会去找我们写的main方法 导致我们的程序不会执行
    就会爆出main方法s缺失的bug 这就是双亲委派机制
    一般没人去搞这种蛋疼的操作

  3. 沙箱安全机制
    将代码分为两块的话 可以分成本地代码 和 远程代码 Java默认对本地代码采用最高信任(即 所有资源都能无条件访问) 在对待远程代码是 会加以安全级别的权限控制 将远程代码放在沙箱中 指定权限

在这里插入图片描述
完整查看

  1. native
    详情查看
    在这里插入图片描述

  2. pc寄存器
    每一个程序都又应该程序计数器,是线程私有的,指向方法区的字节码(用来存储将要执行的指令) 在执行引擎读取下一条指令,内存非常小 忽略不计

  3. 方法区
    静态方法 ,常量 ,类(构造方法 ,接口定义)运行时的常量池存在方法区 ,但是实例方法存在堆内存中 ,和方法无关 staic find class


  4. 栈:先进后出
    桶:后进先出
    队列:先进先出( FIFO : First Input First Output )
    栈:栈内存,主管程序的运行,生命周期和线程同步;
    线程结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题
    一旦线程结束,栈就Over!
    栈内存中:
    8大基本类型+对象引用+实例的方法
    栈运行原理:栈帧
    栈满了: StackOverflowError

  5. 三种jvm
    sun hotstop
    jrockit
    j9vm


  6. Heap, 一个JVM只有一个堆内存,堆内存的大小是可以调节的。
    类加载器读取了类文件后,一般会把什么东西放到堆中?
    类, 方法,常量,变量~,保存我们所有引用类型的真实对象;
    堆内存中还要细分为三个区域:
    ●新生区(伊甸园区) Young/New
    ●养老区old
    ●永久区Perm

20. GC(垃圾回收器)
【jvm回收机制应该满足以下的条件
1.该类所有的实例对象都已被回收;
2.该类的类加载器对象已经被回收;
3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

思维导图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值