IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 学习笔记_JVM01 -> 正文阅读

[Java知识库]学习笔记_JVM01

学习内容:狂神说_JVM快速入门

一、JVM位置

在这里插入图片描述

二、JVM体系结构

在这里插入图片描述

1. 类加载器

(1) 作用:加载.class文件
在这里插入图片描述
(2) 加载器的分类:
在这里插入图片描述
(3) 双亲委派机制:
以保证安全为目的,在加载类时会以这样的顺序查询类加载器:App->Ext->Boot。具体而言,
Step1:类加载器收到类加载请求。
Step2:将这个请求传递给系统提供的父类加载器去实践,一直往上传递,直到启动类加载器。
Step3:启动类加载器检查是否加载当前这个类,能加载则结束并使用当前类加载器。否则抛出异常(Class Not Found),通知子加载器进行加载。
Step4:重复Step3。
(4) 沙箱安全机制:
就是将Java代码限定在JVM指定的运行范围内。组成沙箱的基本组件:
1)字节码检验器(bytecode verifier):
确保Java类文件遵循Java语言规范。这样可以帮助Java程序实现内存保护,但并不是所有的类文件都会经过字节码检验器,比如核心类。
2)类装载器:
在3方面对Java沙箱起作用:[1] 双亲委派机制,防止恶意代码去干涉善意代码。[2] 守护了被信任的类库边界。 [3] 将代码归入保护域确定了代码可进行哪些操作。

2. Native关键字

(1) 凡是带此关键字,说明java的作用范围达不到了,会调用底层C语言的库。
(2) 它在内存区域专门开辟了一块标记区域(本地方法栈,Native Method Stack),用以登记Native方法。在最终执行时,通过本地方法接口(JNI)加载本地方法库中的方法。
(3) 调用本地方法接口,通过整合不同的编程语言为Java所利用,扩展了Java的使用。

3. 程序计数器

每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码。用来存储指向一条指令的地址,也即将要执行的指令代码。在执行引擎读取下一条指令。

4. 方法区

方法区的存储内容有:静态变量(static)、常量(final)、类新型(构造方法、接口定义)(class)、运行时的常量池。
注意:实例变量存在堆内存中,和方法区无关。

5. 栈

(1) 概述:
栈内存,主管程序的运行、声明周期、线程同步。线程结束了栈内存也就释放了。即对于栈来说不存在垃圾回收过程,线程结束栈也就结束了。
(2) 栈的存储内容:
8大基本类型、对象引用、实例的方法。
(3) 栈的运行原理:
在这里插入图片描述
(4) 栈+堆+方法区实现对象创建:
在这里插入图片描述

6. 堆

(1) Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。

(2) 类加载器读取了类文件之后,一般会把什么东西放在堆中?
类、方法、常量、变量,堆保存所有引用类型的真实对象。

(3) 堆内存可细分为三个区域:
在这里插入图片描述
1)新生区:
一个类诞生、成长、死亡的地方。其中,所有对象都是在伊甸园区new出来的。
2)永久区:
[1] jdk1.6之前称为永久代,常量池在方法区;jdk1.7称为永久代,但是慢慢退化了,开始去永久代,常量池在堆中;jdk1.8以后,无永久代,常量池在元空间中。
[2] 这个区域是常驻内存的,用来存放jdk自身携带的class对象,包括interface元数据,用来存储的是Java运行的一些环境或类信息。这个区域不存在垃圾回收,关闭JVM就会释放这个区域的内存。
[3] 什么情况下永生区会报OOM错误?一个启动类加载了大量的第三方jar包;Tomcat部署了太多应用;大量动态生成的反射类不断被加载,直到内存满了,就会出现OOM。

(4) 堆结构
在这里插入图片描述
(5) 报OOM错误的解决办法:
方法1:尝试扩大堆内存看结果----- -Xms1024m -Xmx1024m -XX:+PrintGCDetails
方法2:
分析内存,看一下哪个地方出现问题。
用到了内存快照分析工具Jprofiler,它能够看到代码第几行出错。作用:分析Dump内存文件,快速定位内存泄露。获取堆中的数据。获取大的对象。

(6) 在进行堆内存调优时的一些设置解释:
-Xms8m----表示设置初始化内存分配大小,默认为1/64
-Xmx8m----设置最大分配内存大小,默认为1/4
-XX:+HeapDumpOnOutOfMemoryError: 打印OOM信息
-XX:+PrintGCDetails: 打印GC信息

三、垃圾回收(GC)

(1) 概述
GC是Java最好的特性。现有伊甸园区、幸存区(from, to)、老年区,JVM在进行GC时,并不是对这三个区域统一回收,大部分时候回收的都是伊甸园区。
GC有两种: [1] 轻GC(局部GC,主要清伊甸园区,偶尔清幸存区)。[2]重GC(全局GC,三个区都清)。
(2) GC题目:
1)JVM的内存模型和分区,详细到每个区放什么?
2)堆里面的分区有哪些?说出伊甸园区、幸存区(from,to)、老年区的特点?
3)GC算法有哪些?答: 标记清除、标记整理、标记压缩、复制算法、引用计数器。
4)轻GC和重GC分别在什么时候发生?

1. 引用计数器算法

在这里插入图片描述

2. 复制算法

特性1:每次GC都会将伊甸园区活着的对象移动到幸存区,一旦伊甸园区被GC后就会是空的。
特性2:复制算法总是要保证幸存0区和幸存1区其中一个是空的,空的那个区域又叫幸存to区,非空的区域叫幸存from区。
特性3:当一个对象经历了15次GC还没有死,这个对象就会进入老年区。
注:通过 -XX:MaxTenuringThreshold=9999 可设定对象进入老年区的时机。

好处:没有内存碎片
坏处:因为多了一块内存空间永远是空的,浪费了内存空间。假设对象100%存活的极端情况,此时复制算法会有弊端。
最佳使用场景:对象存活度较低的场景,主要应用于新生区。

3. 标记清除算法

标记:扫描对象,对活着的对象进行标记。
在这里插入图片描述
清除:对没有被标记的对象进行清除。
在这里插入图片描述

优点:无需额外的空间。
缺点:两次扫描严重浪费时间;会产生内存碎片。

4. 标记压缩算法

压缩:再次扫描,向一端移动存活的对象,防止内存碎片的产生。
在这里插入图片描述

缺点:多了移动成本。

5. 总结

内存效率(时间复杂度): 复制算法 > 标记清除算法 > 标记压缩算法
内存整齐度: 复制算法 == 标记压缩算法 > 标记清除算法
内存利用率:标记压缩算法 = 标记清除算法 > 复制算法

由此衍生出了GC分代收集算法:
年轻代:存活率低 —> 复制算法
老年代: 区域大,存活率搞 —> 标记清除(内存碎片不太多时使用)+标记压缩混合实现。

四、JMM

JMM是一种Java内存模型。是一种缓存一致性协议,用于定义数据的读写规则。JMM定义了线程工作内容和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(local Memory)。解决共享对象可见性问题:volilate。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:31:00  更:2021-08-23 16:32:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:41:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码