狂神说JVM学习笔记

狂神说JVM探究.rar B站【狂神说Java】JVM快速入门篇笔记,内有md格式,pdf格式, docx格式笔记,和视频内笔记基本无误。 立即下载

JVM是运行在操作系统上的一个虚拟机环境,示例如下图
在这里插入图片描述
运行时的整体流程如下图:
在这里插入图片描述
其中,虚拟机栈、本地方法栈、程序计数器是线程私有,方法区(元空间)、堆是线程共有。
当一个类加载后,先加载main方法,此时main方法被压在栈底,由main方法所引用的方法依次堆放在上一个位置。程序计数器用于存储下一个字节码的内存地址,占用空间很少。
堆存放的有实例对象、数组、字符串常量池等,例如:

Hello hello = new Hello();
int[] array = {1, 2, 3};
String str = "Hello";

方法区:存储的是基本数据类型、运行时常量池
由于栈存放的是方法,不会有垃圾(如果有垃圾那栈直接就卡住了),程序计数器存放的是下一个字节码的内存地址,那垃圾回收只能在堆里进行(GC),所以99%都是在堆里垃圾回收。

在这里插入图片描述
首先一个类进来后,编译为Car.class,经过类加载器,加载初始化对象变成一个个实例car1、car2,名字在栈里头,对应一个个内存地址指向堆里。实例放在堆中,存放属性等。

反向怎么导呢? 可以使用.getClass()方法找到对象,再使用.getClass Loader()找到对应的类加载器。

加载器有以下几种:
在这里插入图片描述
类加载过程如下:
在这里插入图片描述

本地方法接口(JNI)为了调用本地方法库,扩展java的使用,融合不同的编程语言为Java所用
在这里插入图片描述

在这里插入图片描述
当一个对象被加载后,堆里会存在字符串常量池,如果实例给stringname赋值,那么就存放在栈内存放地址所指向的实例中,如果没有,那么直接从堆里的字符串常量池中取出"qinjiang"。(java8之后字符串常量池从方法区的运行时常量池分离出来)

public class Test{
	private int a;
	private stringname = "ginjiang";
	public static void main(string[]args){
		Testtest1 = new Test();
}

方法区

Method Area 方法区
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间:
静态变量、常量、类信息 (构造方法、接口定义)、运行时的常量池存在方法区中,但是 实例变量存在堆内存中,和方法区无关
静态变量、常量:static final
类信息(构造方法、接口定义):Class文件,包括类的属性方法注解修饰符
运行时的常量池:常量池

栈
在这里插入图片描述
栈的运行原理:通过栈帧对每一个方法进行调用
在这里插入图片描述

栈里存放方法里局部变量的值(如果是基本数据类型,引用和值都存储在栈里)存放在局部变量表中
在这里插入图片描述
如果时局部变量表中要存储的是字符串,那就是存储堆里面字符串常量池的地址,如果是存储的值,那就把值从方法区的运行时常量值中取出来,放进去(放的是值而不是地址),只有运行时才会存储,如果不运行局部变量表里就没有东西
相较而言,堆里存放的是实例以及成员变量,数组、字符串常量池
如果方法产生循环引用,就会导致栈溢出——StackOverflow Error

目前所用的主流jvm为hotspot,堆内存主要分为:
新生区(伊甸园区)
老年区
永久区
在这里插入图片描述
垃圾回收,主要是在伊甸园区和养老区
一般只会存在栈内存满,如果是堆内存满,就会出现OOM java.lang.OutOfMemoryError: java heap space
在JDK8以后,永久存储区改了个名字(元空间);

新生区:
类诞生、成长、甚至死亡的地方
伊甸园区:所有新对象都是在这个new出来的。——一次垃圾回收后它会进入幸存区(0,1)

老年区:
经过多次轻GC后来到的区域,

真理:99%的对象都是临时对象!

永久区:
这个区域常驻内存,用来存放JDK自带的Class对象,interface元数据,存储的是java运行时的一些环境或类信息
不存在垃圾回收!
关闭JVM就会释放这个区域的内存

  • JDK1.7之前都是永久代,存放在方法区中,常量池在方法区
  • JDK1.8之后是元空间,没有永久代,常量池在元空间
    在这里插入图片描述
  1. 内存溢出
      内存溢出 OOM (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。

  2. 内存泄漏
      内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。最终的结果就是导致OOM。
      内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。

GC算法:引用计数法、标记整理法、标记清除法、复制法
引用计数法
在这里插入图片描述
复制算法
每次在幸存区from和to区两个之间移动,就是复制算法,把其中有对象的复制到另外一个,然后清空,此时这个区域没有对象就是to区,然后继续GC
谁空谁是to区
在这里插入图片描述
在这里插入图片描述
好处:没有什么内存碎片
坏处:占用多一半内存空间

标记回收法
在这里插入图片描述
优点:不需要额外的空间!
缺点:两次扫描,严重浪费时间,会产生内存碎片

标记整理法
在这里插入图片描述

本篇文字大部分内容来自B站【狂神说Java】JVM快速入门篇

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端) 1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协 阅读详情

相关推荐

RAGFlow 离线部署:解决cl100k_base.tiktoken问题

摘要 本文详细解决了RAGFlow离线部署时tiktoken缓存文件下载失败的问题。通过分析tiktoken库的缓存机制,一次性不改代码解决.

baidu_25691461的博客 830

jvm学习笔记--狂神说

jvm学习笔记--狂神说

ProGram_Java521的博客 1570

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

JVM探究「狂神说」

图 类实例化后。

编程不良人 472

Python连接高斯数据库踩坑实录:从SASL报错到SSL安全连接的完整指南

本文详细记录了Python连接高斯数据库时遇到的SASL authentication报错及其解决方法。通过剖析SASL认证机制,对比了修改数据库配置、使用官方驱动等方案的利弊,并重点提供了通过自动化脚本生成SSL证书,实现安全、免密连接的完整指南,帮助开发者彻底解决连接难题。

weixin_28340315的博客 438

从轴承润滑到代码实现:手把手教你用Python FDM求解稳态雷诺方程

本文详细介绍了如何用Python FDM(有限差分法)求解稳态雷诺方程,从轴承润滑理论到代码实现的全过程。通过构建无量纲方程、有限差分格式和迭代求解算法,开发者可以快速实现专业级润滑分析,应用于涡轮发电机、汽车曲轴等场景。文章还提供了完整的Python代码示例和结果可视化方法,帮助工程师优化轴承设计。

weixin_28689507的博客 119

【狂神说】JVM学习笔记

JVM学习笔记 1、三种JVM Sun公司HotSpot Java Hotspot™ 64-Bit Server VM (build 25.181-b13,mixed mode) BEA JRockit IBM J9VM 我们学习和使用的大都是: Hotspot 2、JVM体系结构 1.JVM的位置 2.JVM的体系结构 方法区: 方法区存储虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据; 是jvm规范中的一部分,并不是实际的实现,在实际实现上并不相同(HotSpot在1.7版

qq_44430911的博客 1841

AutoSAR开发实战:如何用Matlab/Simulink从零搭建SWC组件(附完整代码示例)

本文详细介绍了使用Matlab/Simulink从零开发AutoSAR SWC组件的全流程,包括环境配置、ARXML文件导入、算法模型开发、代码生成与集成验证等关键步骤。通过实战案例和完整代码示例,帮助开发者掌握AutoSAR标准下的软件开发技术,提升汽车电子系统的开发效率。

weixin_29093017的博客 256

狂神——JVM

从两个维度:内存效率、内存整齐度、内存利用率进行比较内存效率(内存碎片多不多):复制算法>标记清除算法>标记压缩算法(时间复杂度)内存整齐度:复制算法 = 标记压缩算法 > 标记清除算法内存利用率:标记压缩算法 = 标记清除算法 > 复制算法没有最好的算法,只有最合适的算法,所以GC也被称为分代收集算法存活率较低,所以在这个区域更适合用复制算法!老年代区域大,存活率较高。所以更适合用标记清除(如果内存碎片不是太多就可以使用)+ 标记压缩混合(内存碎片达到一定量级的时候就压缩)实现。

YOLO的博客 1137

单片机欠压保护、欠压复位的用法及作用

一. 前言 使用编程环境 :KEIL mdk4 单片机 : NRF24LE1   二. 分析 查询各开发芯片的数据手册,一般在电源管理或者复位设置章节中。以下NRF24LE1为例: Power supply supervisor(电源监控): 电源主管在开机时对系统进行初始化,对即将发生的情况提供预警当电源电压过低而不能安全运行时,系统处于复位状态。 电源管理框图如下:   ...

城南花已开的博客 8401

多重共线性问题 -- 岭回归方法

概述 本篇博客分为三大部分,线性模型、多重共线性问题和岭回归。其中,线性模型中介绍了线性模型定义和普通最小二乘法对线性模型的拟合。第二部分,借由1987-2007年的人口、消费和科技对碳排放的影响的数据来说明多重共线性问题(包括如何从定性和定量两个方面判断多重共线性问题)和多重共线性问题对普通最小二乘估计的影响。第三部分,使用岭回归对第二部分中的多重共线性问题进行拟合,并基于R2R^2R2决定系数...

楚江客的记录 1万+

基于《狂神说java》JVM 入门--学习笔记

本笔记仅做学习与复习使用,不存在刻意抄袭。给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!点击跳转至遇见狂神说哔哩哔哩首页如果你也是狂神的小迷弟,可以加我好友一起探讨学习。 ...

wudidahuanggua的博客 528

复数值神经网络可能是深度学习的未来

复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

gongdiwudu的专栏 6617

JVM狂神说视频学习笔记

视频地址: https://www.bilibili.com/video/BV1iJ411d7jS?p=2 JVM 使用C 编写的 ,所以 JAVA 也叫 C+±- JRE = JVM + JDK = 要学习《深入理解JVM》这本书。 P1、JVM的学习方式 10:01 P2、JVM的体系结构 11:57 P3、类加载器及双亲委派机制 31:48 P4、Java历史-沙箱安全机制 14:12 P5、Native、方法区 19:29 P6、深入理解一下栈 23:26

狗剩的专栏 1226

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

B站狂神说JVM学习笔记

JVM

jacknoe的博客 851

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【狂神说】JVM快速入门学习笔记

JVM 栈 堆 类加载器

qq_48575500的博客 972

狂神说JVM学习笔记~~

jvm学习笔记

weixin_50869999的博客 326

jvm入门学习笔记-狂神说

3、双亲委派,祖宗不可重写,在加载类的时候通过ClassLoader向上查找,找到了就会覆盖掉用户写的类,这样用户就无法改变源码了。8、虚拟机调优,-Xmx -Xms -XX:+PrintGCDetail,在启动类中配置VmOptions指令。5、Sun--HotSpot虚拟机,jdk官方虚拟机,由于jdk是开源的,多数方法、插件都是用它开发的,所以市场占有率最高。4、native关键字,java最初是C++--,底层是C++写的。6、内存结构、堆--先吃先拉,栈--先吃后拉。

qq_42760375的博客 223

JVM入门---狂神说Java学习笔记

JVM虚拟机入门探究 狂神说Java(JVM入门)视频网址 谈谈对JVM的理解?java8虚拟机和之前的变化更新? OOM内存溢出,StackOverFlowError栈溢出,怎么分析? JVM 的常用调优参数有哪些? 内存快照如何抓取,怎么分析Dump文件? 谈谈JVM中,类加载器你的认识?rt-jar ext applicatoin 1、JVM的位置 2、JVM的体系结构 栈百分百没有垃圾(因为栈的运行方式,不存会在垃圾) 所谓的 JVM 调优,99%都是在调方法区和堆,其中主要的是堆!

rzz65452064的博客 479

【狂神说Java学习笔记】JavaSE基础(一)Java、JDK、JVM、JRE

一、Java帝国的诞生 1972年:C诞生。C语言的优点有“贴近硬件,运行极快,效率极高”,能够应用在“操作系统,编译器,数据库,网络系统”等,但是“指针和内存管理”比较繁琐。 1982年:C++诞生。C++面向对象,兼容C,能应用在图形、游戏等领域。 1995年Java诞生。 为什么出现Java,参考**“Java发展史”**。 于是,“高可用,高性能,高并发”的Java诞生了…… 二、Java特性和优势 简单性 面向对象 可移植性(Write once,run anywhere) 高性能(即时编译)

weixin_43918628的博客 782

【狂神说java学习笔记】一:java入门

本文整理了狂神说Java课程的入门内容,包括Java学习框架、入门知识要点和开发环境配置。

weixin_41637679的博客 632

狂神说es笔记_面试收获美团offer的学习笔记:MySQL+Spring+JVM+多线程并发等

从去年到今年先后面试了 6 次美团,外卖、订单、商旅面试了好几个部门、总结下来面试的大体思路真的基本一致诶。比如:JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决?Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。MySQL 也算是必备了,索引存储结构、索引搜索原理、事务的隔离级别和原...

weixin_39664995的博客 162

狂神说SpringBoot笔记及代码共享资源介绍

狂神说SpringBoot笔记及代码共享资源介绍 去发现同类优质开源项目:https://gitcode.com/ 项目的核心功能/场景 全面系统的SpringBoot学习笔记与代码实践 项目介绍 在Java开发领域,SpringBoot以其高效的开发流程和简洁的配置方式赢得了无数开发者的青睐。而《狂神说SpringBoot笔记及代码》则是一个专为Java学习者打造的宝贵资源库,它涵盖了狂神对Sp...

gitblog_06718的博客 737

Day10——JDK-JRE-JVM(> 本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)

2302_77040533的博客 163

【狂神说JAVA】JVM快速入门-4

15、GC垃圾回收机制 GC的作用区只有方法区和堆。分类有轻GC和重GC,轻GC主要是新生代,重GC是全局的清理。 幸存区一个from,一个to。两个相互转换。即幸存区0可以是from,也可以是to,幸存区1可以是from,也可以是to。 GC题目: JVM的内存模型和分区,详细到每个区放什么? 堆里面的分区有哪些,Eden,from,to,老年区,说说他们的特点! GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数器,怎么用的? 轻GC和重GC分别在什么时候发生。 GC..

weixin_38582314的博客 396

狂神说JVM笔记

JVM探究 面试常见: 请你谈谈你对JVM的理解? java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError? 怎么分析? JVM的常用调优参数有哪些? 内存快照如何抓取,怎么分析Dump文件? 谈谈JVM中,类加载器你的认识 1.JVM的位置 JRE:java开发环境,包含了JVM 2.JVM的体系结构 Java栈、本地方法栈、程序计数器不会有垃圾回收,否则程序会死掉 百分之99的JVM调优都是在方法区和堆(99%是堆)中调优,Java栈、本地方法栈、程序

qq_37975919的博客 2911
上一篇: java的引用传递和值传递
下一篇: Mysql一条查询语句的执行过程
浪跡ξζ無緣
博客等级 码龄8年 20粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值