JVM入门看着一篇就够了

从量子兔AlphaPi硬件拆解到ESP32-C3库开发实战 本文详细拆解了量子兔AlphaPi开发板的硬件构成,重点分析了其核心ESP32-C3芯片及外围传感器。通过逆向工程揭示了GPIO引脚定义与通信协议,并实战演示了如何从零开发MicroPython库,驱动按键、加速度计及LED点阵,最终整合成一个互动平衡球游戏项目,展现了开源硬件在教育与二次开发中的潜力。 阅读详情

1.为什么会有JVM?

JVM是为了提供一整套完全模拟硬件计算机并进行内存管理(创建和垃圾回收)的标准规范。它是一种规定好的标准规范,定义了字节码文件在内部运行的相关标准和规范

2.JVM到底是什么?

JVM,Java Vitual Machine,中文就是Java虚拟机。和名字一样就是个虚拟机器,来模拟通用的计算机,有着一套虚拟的完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM是基于栈结构的运行方式。不符合这种要求的,不是JVM,比如Dalvik虚拟机就不能称作JAVA虚拟机,因为Dalvik是基于寄存器。至于ART虚拟机是基于栈帧

3.JVM的结构是啥样的?

JVM的结构分为三部分:
类装载子系统、运行时数据区、执行引擎。如下图
在这里插入图片描述
三者之间的联系如下图:
在这里插入图片描述

(1)类装载子系统

what:
将字节码文件加载并生成在堆区的Class对象。
(1)将描述类的字节码文件加载进到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。
(2)类的加载是指将类的.class文件中的二进制数据读入到内存中,然后将其放在运行时数据区的方法区,然后在堆区创建一个Class对象,用来封装类在方法区内的数据结构。类的加载最终产品是位于堆区中的Class对象。Class对象封装类在方法区内的数据结构,并向工程师提供访问方法区的数据结构的接口。

(2)运行时数据区

虚拟机栈、堆区、方法区、本地方法栈区、程序计数器。
在这里插入图片描述

JDK8.0之后的内存区域在这里插入图片描述
8.0之前的内存模型:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430172334839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Z1bGxTdGFja0RldmVsb3Blcg==,size_16,color_FFFFFF,t_70

(a)栈区

1.保存的数据类型:
基本数据对象+对象应用
2.特点:
(1)存取速度快。
(2)数据大小和生存期确定,缺乏灵活性。

(b)堆区

1.保存的数据类型:
对象
2.特点:
(1)动态分配内存大小。
(2)存取速度慢。
3.堆区的划分:
(1)堆区分为:年青代(1/3)和老年代(2/3)
(2)年青代又分为Eden区(8/10)和Survivor区:
Survivor区分为From区(1/10)和To区(1/10)
4.堆区存放对象:
(1)老年代存放:
(a)大对象
(b)From区和To区复制超过15次
©From区已满时添加的对象
(5)GC的分类
(1)monor gc :Eden区放满。年青代回收
(2)full gc:老年代放满。年青代+老年代回收
(6)算法:
(a)年青区使用复制算法:更高效
(b)老年区使用标记清除算法:
©垃圾回收使用的是可达性算法
三种算法的比较。

( c)方法区

1.保存的数据类型:
class字节码文件+static变量+常量+常量池
2.特点:
(1)动态分配内存大小。
(2)存取速度慢。

(d)本地方法区

在本地方法栈中执行非java语言编写的代码,例如C/C++

(e)程序计数器

1.what
程序计数器是一块较小的内存空间,可以看成当前线程所执行的字节码的行号指示器
2.特点
(1)线程私有
多线程执行时,会分配的是CPU的时间片,当一个线程失去时间片时,需要记录所执行的位置。
(2)JVM的规则中唯一一个没有规定OOM的区域!
记录的是字节码文件的行号,因为在执行前已经知晓范围,所以,不存在OOM
(3)如果正在执行的是Native方法,这个计数器的值为空!
Native方法并没有编译成执行的字节码文件,所以,就不存在字节码文件的行号

(3)执行引擎

1.JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
2.字节码的执行是由JVM执行引擎来完成
在这里插入图片描述

4.相关知识

(1)直接内存

(1)what:
JDK1.4引入的直接操作Native内存的NIO(IO方式),避免了Java的堆内存与Native堆内存的数据复制。
(2)how
堆内存的DirectByteBuffer进行操刀。
(3)下面是TensorflowLite输入结果时,所做的预处理

private ByteBuffer transformAppSerialNum(List<BaseAppInfo> lastUsedAppList) {
    ByteBuffer arrayData = ByteBuffer.allocateDirect(100*4);

arrayData.order(ByteOrder.nativeOrder());
    for (int i = 0; i < 100; i++) {
        BaseAppInfo baseAppInfo = lastUsedAppList.get(i);

Integer integer = mAppSerialNumMap.get(baseAppInfo.getPackageName());
        if(integer != null){
            arrayData.putInt(integer);

}else{
            arrayData.putInt(0);

}
    }

return arrayData;
}

(2)线程&内存

在这里插入图片描述

(1)ThreadLocal是什么?扮演了什么角色?
ThreadLocal是一个线程局部变量的类,它所保存的对象是该线程私有。比如Looper就是使用的这种方式。扮演的是将堆的对象变成线程私有访问。
(2)StackOverFlowError?
栈溢出,每个栈区默认在JVM设置为1M,当栈帧进入的数目大于1M时,就会报这个异常。

(3)内存区域&内存模型(JMM)区别在这里插入图片描述

(1)what
内存模型是共享内存(堆区和方法区)的并发模型,线程之间主要是通过读-写共享变量(堆内存的实例,静态域以及数组)实现线程间的隐式通信。
JMM控制java线程间的通信,决定一个线程对共享变量的写入何时对其它线程可见。

(2)JVM主内存与工作内存。

5.巨人肩膀

1.https://blog.youkuaiyun.com/jiangyang100/article/details/90614280
2.https://www.cnblogs.com/natian-ws/p/10731270.html
3.https://www.cnblogs.com/haimishasha/p/11229379.html
4.https://www.cnblogs.com/ding-dang/p/13086092.html

5.内存区域与内存模型(精华)
https://www.cnblogs.com/czwbig/p/11127124.html

Basler相机和pylon viewer 的使用 文章目录1 线路连接2 安装和使用pylon 1 线路连接 电源线接到电源插座,网线接到电脑(电脑没有网口的话,可用转换器转到type-c接口)。 2 安装和使用pylon 参考 Basler pylon安装及对网口相机基本设置 相机和电脑以太网IP设置参考:balser相机IP设置 关于相机参数和pylon viewer的详细设置,可以参考pylon Viewer安装路径下的文档(Documentation) ... 阅读详情

相关推荐

Windows-Anaconda3+TensorFlow安装教程

测试环境:win10-64位和win7-64位 (系统必须是64位,因为TensorFlow目前只支持64位) 一、安装Anaconda3 1.下载Anaconda3 Anaconda官网链接:link 这里我们选择Windows版本,python3.6-version-64位,如下图所示。 2.下载完成之后,点击安装Anaconda3 注意:安装过程中要选择添加环境变量,如图 待安装完成...

DoctorCuiLab的博客 3086

重读 JVM

秋招开始了,前面由于做别的事耽误了半个月,以前学的东西不用就很容易忘记。所以,这次重新阅读《深入理解 JVM 虚拟机》时,想做一个记录。将碎片的知识整合,方便自己以后阅读,同时也和大家一起分享。内容中会添加我自己的理解,其中如果有错误,欢迎大家指正。 相关阅读:1. 重拾数据结构2. 重拾操作系统3. 重拾计算机网络(未完成))注意:以上内容会持续更新,欢迎大家关注 GitHub &amp;&...

weixin_34009794的博客 5360

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6430

JVM你看这篇就够了(适合新手)

浅谈JVMJava类加载过程类加载器类加载的三种方式双亲委派模型JVM内存结构Java堆堆分代垃圾收集器垃圾回收机制判断对象是否存活算法常见的垃圾回收算法堆溢出JVM内存参数设定 Java类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 加载: (1)通过一个类的全限定名来获取其定义的二进制字节流 (2)将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 (3)在堆中生成一个代表这个类的Class对象,作为方

hhui的博客 318

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 611

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

关于Jvm知识看这一篇就够了

本文转载自:https://mp.weixin.qq.com/s/4c9K5eYMFGVV2WyKaYXVBA 2016年左右的时候读了周志明《深入理解Java虚拟机:JVM高级特性与最佳实践》,读完之后受益匪浅,让我对Java虚拟机有了一个完整的认识,这是Jvm书籍中最好的读物之一。 后来结合实际工作中遇到的问题,写了一系列关于Jvm的文章,其中开篇的几篇内容大部分参考于此书,后期加入自...

wang123459的博客 444

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 232

【JVM进阶】JVM看这一篇就够了(类加载器、垃圾回收、JVM调优、内存泄漏、CPU飙高)

类加载器、垃圾回收、JVM调优、内存泄漏的排查思路以及CPU飙高排查思路

King Gigi的博客 2152

图解B+树的插入过程

B+ 树在现代数据库中很常见,如果我们了解它,在工作中可能对性能优化会有更好的帮助! 最近我一直在思考 B+ 树的高度是由什么决定的。知道我了解了 B+ 树的插入过程,才有一种恍然大悟的感觉! 网上的一些资料杂乱无章,不同的数据库可能还有对 B+ 树有不同的实现。但是万变不离其宗,B+ 树的定义,大致如下所示: 总结一下,B+ 树有下面 5 个重要的特点。 B+ 树包含 2 种类型的结点: 内部结点(也称索引结点)和叶子结点。 根结点本身即可以是内部结点,也可以是叶子结点。 根结点的关键字个数最

愿君出走半生,归来时仍是少年 2134

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8803

Java虚拟机(JVM)你只要看这一篇就够了!

从图中可以看出,如果不下小心直接把 Obj1-reference 和 Obj2-reference 置 null。则在 Java 堆当中的两块内存依然保持着互相引用无法回收。2.2.2 可达性分析法通过一系列的 ‘GC Roots’ 的对象作为起始点,从这些节点出发所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连的时候说明对象不可用。可作为 GC Roots 的对象:虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象。

2401_87252417的博客 1042

通信原理 | 窗函数 | 矩形窗 | 汉宁窗 | 汉明窗 | 布莱克曼窗 | 补零对频谱的影响

比如,原信号是一个周期的余弦信号,又给它补了9个周期长度的0,那么信号并不是10个周期的余弦信号,而是一个周期的余弦加一串0,补零并没有带来新的信息!频谱分辨率的含义是两个频率不同的信号在频率上可分,也就要求他们不能落到一个频域函数的主瓣上,所以,如果待分析的两个信号频率接近,而时域长度又短,那么在频域上他们就落在一个频域函数的主瓣内了,补再多的零也无济于事。而形状(主瓣宽度)是由补零之前的信号长度决定的,补零的作用只是细化了频域序列,并没有改变其主瓣宽度。所以,汉宁窗牺牲了分辨率,换来了旁瓣泄露的减小。

若北辰 1305

JVM 看这一篇就够了

原谅我这个标题党 初识JVM规范 从三种角度认识JVM JVM概述 JVM:Java Virtual Machine,也就是Java虚拟机 所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统 JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境 JVM主要功能 通过 ClassLoader 寻找和装载 class 文件 解释字节码成为指令并执行,提供 class 文件的运行环境 进行运行期间的内存分配和垃圾回收 提供与硬件交互的平台 虚.

qq_46153765的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JVM入门到精通一篇就够了

入门到精通到调优

初心不忘、始终方得 1528

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【JVM调优】如何进行JVM调优?一篇文章就够了!

深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。

种一棵树最好的时间是十年前,其次是现在 4万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JVM-入门第一篇

JVM-入门第一篇1.基本概念2. java -help 命令3. java -X 命令4. javac -help 命令 Java程序员不可不知的秘密 JVM 1.基本概念 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。[来自百度百科] 2. java -help 命令 用法: java [-options] class [args…] (执行类) 或 jav

Jack魏 2万+

学习jvm 这一篇就够了

本文系统介绍了JVM的核心机制与优化策略。主要内容包括:1. JVM架构:详细解析了类加载子系统、运行时数据区(堆、栈、方法区等)和执行引擎的工作原理;2. 垃圾回收机制:深入讲解GC算法(标记清除、复制、分代收集等)和主流垃圾收集器(G1、CMS、ZGC等);3. 性能优化:提供内存配置、GC选择及代码层面的优化方案;4. 故障排查:介绍常见内存溢出类型及诊断工具(jmap、jstack等)。文章强调合理配置JVM参数和优化代码对系统性能的关键影响,为开发者提供了全面的JVM调优指导。

weixin_63540620的博客 2222

JVM入门这一篇就够了

1、JVM体系结构 2、JVM存在的位置 JVM 存在于操作系统上的 JRE 构建环境中 3、类加载过程 类加载器 类加载器负责加载所有的类,其为所有被载入内存中的类生成一个java.lang.Class实例对象。一旦一个类被加载进JVM中,同一个类就不会被再次载入了,是唯一的标识。 在Java中,一个类用其全限定类名(包括包名和类名)作为标识;但在JVM中,一个类用==其全限定类名和其类加载器==作为其唯一标识。 JVM中有三种类加载器 系统(应用)类加载器----->扩展类加载器----

爱学习的正正的博客 966

速通【JVM】这一篇就够了

速通【JVM】这一篇就够

做点有意思的事情 1058

JVM看这一篇就够了

jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。   类的加载机制 主要关注点: 什么是类的加载 类的生命周期 类加载器 双亲委派模型 什么是类的加载 ...

徐冉的博客 1036

『一篇就够了系列』关于JVM,这里有你想知道的一切

类加载的过程要做的事情,简单来说就是将.class中的字节码文件读入内存, 并将这个字节流所代表的静态存储结构转化为Method Area的运行时数据结构,最后还会在Heap中生成一个Class类对象( java.lang包内的Class,区别于类的对象),作为方法区数据的访问入口。注:查看Class类源码可以看到,Class类的构造函数是私有的,也就是不能直接通过new创建,而是只有JVM才能创建Class类对象。通常可以通过class

2301_76327109的博客 1276

JVM 面试都问些啥?看这一篇就够了

​国内大厂对Java工程师的考察要求越来越严格,已经不限于Java Web的那套东西了,往往会提出更高的要求,比如熟悉Java并发编程和JVM调优,了解分布式技术、微服务以及中间件等等。 这里有道阿里春招时的面试真题,P6级别的Java开发岗会考到: JVM与JDK,JRE的区别是什么? JVM是驻留在计算机中的虚拟机器,主要功能是执行编译器产生的字节码。每个操作系统都有不同的JVM,但是它们在执行字节码后产生的输出在所有操作系统中都是一样的。也就是说,在Windows上生成的...

九章算法的博客 5495

JAVA8的JVM虚拟机,看这一篇就够了

有次准备公司分享会,梳理了java8的JVM相关知识,深浅适中。 涉及JVM的结构作用,堆的结构组成,以及JVM分析方法和性能优化。 1.JVM体系结构概述 JVM的位置 首先JAVA是一门跨平台的语言,这跟他的虚拟机有关。 JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM体系结构概览 JVM的结构包含类加载器,运行时数据区,执行引擎和本地方法接口。 1.类加载器: 负责...

weixin_42382121的博客 6416

入门 JVM 这一篇就够了

写在前面: 本来是想简短点的,可是越写越多 这里主要介绍了 JVM,至于 JMM 还会再整理 文章目录JVM概述运行时内存结构程序计数器虚拟机栈本地方法栈堆方法区常量池直接内存内存溢出与内存泄漏逃逸分析一个类的分析垃圾回收如何判断对象可以回收?方法区回收垃圾回收算法垃圾收集器内存分配与回收策略类加载小结一下类加载过程类加载器实例化对象对象的形成过程对象内存分配规则对象的访问对象的创建过程 JV...

black210的博客 377

JAVA技术-JVM入门,看这一篇就够了!

JVM(Java Virtual Machine,Java虚拟机),是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机平台(操作系统)上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码class文件),就可以在多种平台上不加修改地运行。

代码小郭的技术博客 1117
上一篇: 插件化基础知识之一:AndroidManifest的解析
下一篇: 插件化基础知识之二———成也PackageMnager,败也PackageManager
FullStackDeveloper
博客等级 码龄11年 23粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值