jvm内存模型

2 启动类 根加载器 :引导类加载器,Bootstrap ClassLoader 使用c/c++实现,用来加载java核心库

为了安全,在我们进行类加载的时候,会一层一层的往上委托,在上层父类包中找不到,才一层一层往下找。

就是一种保护机制,防止外来的程序损害电脑。

基本组件:

字节码校验器:确保java 类文件遵循java语言规范。

类装载器:类装载器在 防止恶意代码去干涉善意代码,守护了被信任的类库边界,将代码归入保护域,确定代码可有那些操作...这三个方面起作用

装载器采用的机制是双亲委派模式。

存取控制器:用户可以指定存取控制器控制核心api对操作系统的存取权限。

安全管理器:实现权限控制,是核心api和操作系统之间的主要接口。

安全软件包:允许用户为i自己的应用增加新的安全特性

凡是带了native 关键字的,说明java的作用范围达不到了,会去调用底层c语言的库

会进入 本地方法栈 调用 本地方法接口JNI 为了扩展java的使用,融合不同的语言

它在内存区专门开辟了一块标记区域:Native Method stack 用来登记native方法

java 程序驱动打印机,管理系统。

Program Counter Register 程序计数器

每个线程都有一个程序计数器,是线程私有的,就是一个指针,指针方法区中的方法字节码(用来存放指向像一条指令的地址,即将要执行的代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。

Method Area

方法区是被所有线程共享的,所有字段的方法字节码,以及一些特殊的方法,如构造函数,接口代码也在此定义。简单来说,所有定义的方法的信息都保存在该区域,此区域属于共享区间

静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存放在方法区中,实例变量存放在堆内存中,和方法区无关。

static final Class 常量池。

程序 = 数据结构+算法

队列:先进先出 FIFO

栈:就像一个桶 先进后出,后进先出 数据结构原文中是 模拟一个***弹夹,先进的后出。

为什么main()方法先执行,最后结束。

栈内存主管程序的允许,生命周期和线程同步,线程结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题,一旦线程结束,栈就over。

栈中存放 8 大数据类+引用对象+实例的方法。

栈+ 堆+ 方法区 的交互

sun公司 HotSpot 我们学习的

BEA JRockit

IBM J9 VM

Heap 一个jvm只有一个堆内存,堆内存的大小是可以调节的。

类加载器读取了类文件后,一般把类,方法,常量,变量...保存我们所有引用类型的真实对象:

堆内存中还细分为三个区域:

新生区

一个类 诞生和成长的地方,也可能是死亡的地方。

伊甸园,所有对象都是在伊甸园区new出来的

幸存者区(0,1)

在伊甸园区如果这个对象没有被引用了,就会触发轻GC,存活下来的类就存放在幸存区中。

养老区

当幸存区里也满了 就会触发重GC,将伊甸园和幸存区进行清理,存活下来的才保存到养老区。

养老区也满了,就会报oom

永久区

这个区域常驻内存,用来存放JDK自身携带的Class对象,Interface元数据,存储的是java运行时的一些环境,或者类信息。不存在垃圾回收。

关闭虚拟机才会释放这个区域的内存

只有一个启动类加载了大量的第三方jar包,Tomcat部署了太多的应用,大量动态生成的反射类,不断的被加载,直到内存满了,就会出现OOM;

jdk1.6 :永久代 常量池在方法区

jdk1.7 :永久代 慢慢退化了,去永久代 常量池在堆中

jdk1.8 : 无永久代,常量池在元空间

GC 垃圾回收 主要是在伊甸园区和养老区

堆内存满了,就会报OOM

在jdk8以后,永久存储区叫 元空间

持久代也叫 “非堆”

指定内存大小

OOM:

1 常识扩大堆内存看结果

2 分析内存,看一下那个地方出现了问题(专业工具)

元空间:逻辑上存在,物理上不存在

使用JPROFILER软件进行 对堆内存的一个调优。

1 每次gc都会把活得对象移到幸存区,一旦伊甸园区被GC,就会空。

2 为了保证幸存区to 为空 存区to和存区from会交换位置,并将对象都保存到一个幸存区中,那么剩下那个空的就会变为幸存区to。

3 当一个对象经历了15此GC(可以设置次数:-XX:MaxTenuringThreshold=5),都还没有被回收,就会被放入老年区。

好处:没有内存的碎片

坏处:浪费了内存空间,to空间一直是空的。

复制算法的最佳使用场景:对象的存活率较低。

标记清除算法:第一次扫描将活着的对象进行标记,第二次扫描没有标记的对象直接清除。

标记压缩:再次扫描,将存活的对象移到一段

java Memory model

java内存模型

缓存一次性协议,用于定义数据读写的规则

JMM定义了线程和住内存之间的抽象关系:线程之间的共享变量存储在主内存中,内阁线程有一个私有本地内存。

Volatile:可见性,不保证原子性,禁止指令重排(使用内存屏障来实现的,store屏障将工作内存中的变量刷新到主内存和local屏障从主内存中读取共享变量。)

栈:像一个***弹夹,先进先后出。不存在GC,只有线程运行结束才会释放。主要存放的是八大数据类型+对象的引用+实例的方法,管理线程生命周期和线程同步。

本地方法栈(Native):Native 指向的是底层语言编写的指令(汇编,c/c++语言),调用本地方法接口JNI,可以扩展java,融合其他语言。

程序计数器:是每个线程私有的,就是一个指针,用来指向方法区中方法的字节码(用来指向程序即将要指向的指令的下一个地址),占用的内存非常小,可以忽略不计。

方法区:被所有线程共享,所有字段的字节码,特殊的方法如构造函数,接口代码,所有定义的方法和信息都保存在方法区。静态常量+常量+类信息+运行时常量池。

堆:GC主要是在堆中存在,对象刚new出来存放在伊甸园区,经过轻gc放入幸存区from中,每次gc保证幸存区to中不存放对象,当然两个幸存区会相互切换,保证空的幸存区为幸存区to,经过15次gc还没有被回收的对象存放到永久区(1.7),1.8以后叫元空间。

THE END
0.Theprojectfile'item1'containsinvalidkey'item2'.|Office VBA reference topicjvzquC41nggsp7rketutqoy0eqs0gw2wu1ughrhg1xhb1ufpiwghg8wghgxfplj1wuks/rsvgtlben2jgnv0vqj/rtukgly/hkrf/rygo33dqwyckpy.kw{cnkj.mn~/kvkn4Hxqwtif?{jeqosfpmfvkqtt
1.PSCAD常见问题和官方解决办法总结pscad中wordspace不见了* 安装Intel Fortran编译器,并用Intel Fortran编译器编译当前项目。 * 获取目标文件的源代码,并用Gfortran编译器进行编译。 * 要求该项目的开发人员用Gfortran重新编译它。 原因4:如果提示信息中有“不支持UNC路径”的内容,如 Creating EMTDC executable… jvzquC41dnuh0lxfp0tfv8vsa5<:9?=291gsvrhng1jfvjnnu171:98:678
2.SystemManagement|Randommaterialaboutcomputers,webandDid you ever start Power BI Desktop and this error showed-up out of nowhere?! Clicking “Install now” seems to be doing something but in the end it fails saying Microsoft Edge Webview2 Runtime is already installed? Restarting the machine does not help, don’t bother trying jvzquC41u{yugvrcpcmfonsv0tu0
3.ByRef参数类型不匹配|MicrosoftLearn常量、固定长度字符串、数组、用户定义类型和 Declare 语句无法允许作为对象模块的公共成员 无法访问系统注册表(错误 335) 无法创建引用:“项” 无法执行指定的程序 无法启动 Internet Explorer 当前模块不支持打印方法 不允许项目的循环引用 “局部变量”窗口中显示的数据类型 jvzquC41oujo0vnetqyph}3eqo5{j6hp1noctjw{1qlgklj1ii863@;;
4.火山PCPIV模块[2025062. 模块内的别名类型增加了对「输出调试」的支持; 3. 新增「通用多值排序表模板」、「通用多值哈希表模板」、「大小写无关哈希表模板」、「大小写无关多值哈希表模板」、「大小写无关多值哈希集模板」; 4. YYJSON 改为配置 mimalloc 模块后默认使用 mimalloc 作为内存分配器,否则默认使用火山缓存池; 5. 优化部 jvzquC41yy}/ntzck{4dqv4tufkucrquAkj>3?:5:9<84?;8:5;53
5.第2例框架窗口和窗格及菜单·炫彩界面库2.火山代码 成员变量类型备注 主窗口 普通窗口 窗格 炫彩窗格 [6] 菜单 炫彩菜单 元素 基础元素 方法名公开备注 启动方法 √ 炫彩_初始化 () 主窗口.创建 (, , 600, 400, "第2例框架窗口和窗格及菜单", , ) 窗格 [0].创建 ("类库", 200, 200, 主窗口.句柄) 主窗口.添加窗格 (0, 窗格jvzquC41yy}/mjsenq{e0ls1hv{bp8}eiwo04@;456=
6.EventTypeDetail应用性能监控全链路版火山引擎官方文档中心,产品文档、快速入门、用户指南等内容,你关心的都在这里,包含火山引擎主要产品的使用手册、API或SDK手册、常见问题等必备资料,我们会不断优化,为用户带来更好的使用体验jvzquC41yy}/xxqegpmjpn3eqo5eqlx186921:::456
7.易学模块(火山PC)3.0支持调用大漠插件和支持X64位的图色插件奥迦截至到目前全网发布的火山PC大漠模块或其它同类插件仍然采用的是我2020年公开发布的那种调用C++文件的方法,jvzquC41yy}/g‚~38:4dqv4vjtkbf677/3320qyon
8.职业病危害风险告知卡大全(100页)下班沐浴等。健康监护,患有过敏性疾病或过敏体质的人不得从事木尘作业。哮喘发作时使用氨茶碱、喘定、糖皮质激素等药物治疗。过敏性肺 泡炎可使用抗过敏药物、抗生素和激素,给予全身支持疗法,如补液、输氧、降温、通气等过敏性皮炎参照职业性过敏性皮炎处理原则处理,慢 jvzq<84yyy4489iqe0ipo8iqewsfp}44416:4B43;1755<8:8a716B=4637:0|mvon
9.TypenotsupportedinVisualBasic|MicrosoftLearnOffice VBA reference topicjvzquC41nggsp7rketutqoy0eqs0u{2e{tr.t|4qhhodg8{dc1rbppzcig5sgojtgpif1~xgt/oovnwhcek.jnqr1vqg6sqv/yvryttvgj.kw2xku{bn6gcuki
10.火山视窗对象数组类与数据类型转换操作介绍火山pc的文本数组火山视窗对象数组类与数据类型转换操作介绍 本文介绍了如何在编程中使用火山视窗对象数组类,包括添加成员(文本数组、整数数组)、取成员和数据类型转换技巧。通过实例演示了如何将不同类型的数组添加到对象数组并执行相应的操作。 本源码转载自利快云https://www.lkuaiy.com/jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu523@>499:8
11.火山视窗文本数组类增删查改操作⑤给按钮1添加被单击事件 判断来源对象为按钮1(因为火山中所有按钮事件都集中在一起,需要辨别事件来源) “消息” 编辑框1.内容,是需要的编辑框和1个按钮二、设置TCP ①添加一个HP客户端,这里使用pack模式(此模式自动处理,不会粘包),可设置相关参数(HP单包最大长度为4194303) ②在客户端1变量上右键,添加jvzquC41yy}/rrfpujko0lto1cxuklqg19>48;;:66681
12.当前项目不支持此类型的文件|MicrosoftLearn库参考 Learn VBA 使用英语阅读 通过 Facebookx.com 共享LinkedIn电子邮件 当前项目不支持此类型的文件 此错误的原因和解决方案如下: 您试图打开的文件不是有效的项目文件,或者虽然是项目文件,但其包含的功能不受此 Visual Basic 宿主应用程序和 Visual Basic 环境支持。 请确保您要打开的项目文件是有效jvzquC41fqit0vnetqyph}3eqo5{j6hp1qlgklj1xdg0Njsiwcmf1[jhgtkoen4Wugx.Kwygthgdg6Mgnr5ujn2ewtxfp}2rtqpfe}2fqgy.pxy/uwvqq{y/hkrfu6th/vnju6y{rg
13.火山PC视窗窗口讲解新建项目时选择“MFC窗口程序”会自动生成“创建主窗口”代码。 代码界面: 创建后自动生成启动类、主窗口类、主窗口变量以及“创建主窗口”方法。 运行效果如下图: 默认窗口运行效果如下图,如果想使用菜单可看“菜单操作教程” 帮助文档如下图: 通过本方法可创建一个子窗口,此窗口将会嵌入在主窗口内部,并不会弹出jvzquC41fqi/xxqfr0ipo8{qna}jp8rhea{j1vkeaeq/j}rn
14.易语言实现火山PC参数参考教程火山PC参数参考的实现可能涉及到创建一个参数管理模块,该模块能够存储、修改和检索各种参数值。 4. 易语言的数据库连接与操作 易语言支持多种数据库,包括但不限于Access、SQLite、MySQL等。在实现参数参考时,可能需要将参数存储在数据库中,并通过易语言编写查询和更新操作,以实现对参数的管理。 5. 界面设计与交互 jvzquC41ygtlw7hufp4og}4fqe54g{ujzwlw8
15.火山PC单线程单对象使用大漠插件基础火山pc大漠3.在软件上方工具栏中,找到项目(P),点击,选择当前项目属性(P) 4.在编译中,找到目标平台,将目标平台改成32位,调用大漠不能使用64位,修改完毕后点确定保存 三、大漠插件变量的创建以及注册 1.在主窗口下创建名为dm的变量,类型为大漠插件 2.在主窗口下按 Ctrl U 进入界面布局设计,双击界面空白处,快速生成 我jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu523A95;366
16.【魔兽争霸3冰封王座】魔兽争霸3冰封王座(War31.32)中文免安装版这个版本免安装下载之后解压就可以游戏了,支持各大战网、对战平台游戏。 魔兽争霸3冰封王座1.24epc版介绍: 《魔兽争霸3:冰封王座1.32》是一款非常不错的多人即时战略游戏,游戏将拥有DoTA2的画面质感,游戏以《魔兽世界》的故事为背景,包含人类(Human)、兽人(Orc)、暗夜精灵族(NightElf)和不死族(Undead)四个玩法各jvzq<84yyy4xkw|kp94dqv4uqhz04;5420nuou
17.火山PC常量类与函数方法参数的使用详解本文详细介绍火山PC中常量类的高级应用,包括作为函数默认参数,限制用户输入选择等,通过具体案例演示增强代码灵活性。 **今天我们来实战讲解火山PC的常量类与函数方法的实战操作 相信对于常量类,大家还是比较熟悉的,但是大家却不知道,它的一些深层次的用法操作,本篇文章,我们就来详细的介绍火山PC的常量类。** 一、首先我们新建一个火山PC的jvzquC41dnuh0lxfp0tfv8vs33>6;9<8725bt}neng5eg}fknu522A:76293
18.新闻中心——驱动之家:您身边的电脑专家据悉,该机将搭载8核处理器(不出意外应该是联发科的MT6595),并采用5寸以上屏幕,可能会分为3G版和4G版,发布时间大概在今年8月份左右。 之前有消息称,红米2代以及魅族的千元新机都将使用MT6595处理器,该处理器内置了四颗Cortex-A17核心(最高2.1GHz)和四颗Cortex-A7核心(1.7GHz),整合PowerVR 6系列图形核心,支持双jvzquC41pg}t0v~ftk|ft|3eqo5cnxl142752>680jzn
19.这10款经营建造类游戏,每一款都能让你玩到天亮!风暴之城(Agait the Storm)(PC) 本作是一款肉鸽+经营建造类型的游戏。在游戏的设定中,风暴会呈周期性的出现,摧毁这个世界的文明,但火山城却是一个不错的庇护之地。玩家作为决策者,需要在风暴袭来的周期之间去探索火山城的周边来获取资源,用以建设城市。当然实际游戏中本作完全以女王的任务作为意志就好。 jvzquC41yy}/cun4354og}4pgyy0j}rn14636681:477;@3jvor
20.登峰造极NV最强显卡GTX590震撼首测在本期测试中,我们采用了显卡天梯图以便更直观的体现出显卡的具体性能以及对比测试显卡之间的性能高低。同时,通过这个显卡天梯图我们能一目了然的看到当前主流显卡之间的相对排位。 PConline显卡产品天梯图说明:为了让网友更直观地了解评测显卡的档次,我们引入了天梯图。在显卡天梯图中,我们按产品的性能划分产品档次,段位jvzquC41i0vdqwqkpg4dqv3ep1~04<<145=1596acnr/j}rn
21.更新大漠v7.2450模块(易语言+火山PC),支持Win1124h2<火山程序 类型 = "通常" 版本 = 1 /> 方法WriteDataAddrZjj <公开 类型 = 整数 注释 = "WritejvzquC41ddy/3;:0nc5gq{zo0rnqAvtf?xofy}mtgcj'vri?36>55:62
22.ByRef参数类型不匹配|MicrosoftLearn常量、固定长度字符串、数组、用户定义类型和 Declare 语句无法允许作为对象模块的公共成员 无法访问系统注册表(错误 335) 无法创建引用:“项” 无法执行指定的程序 无法启动 Internet Explorer 当前模块不支持打印方法 不允许项目的循环引用 “局部变量”窗口中显示的数据类型 jvzquC41fqit0vnetqyph}3eqo5{j6hp1qlgklj1xdg0njsiwcmf1{jhgtkoen4wugx.kwygthgdg6mgnr5c{{jh/cxhwvjpv/zzrn2okusbvlmAuq{senBtgeunonsfcvopp|