01JVM_内存结构

news2024/12/24 20:33:39

一、什么是JVM

1.JVM的定义

Java程序的运行环境,java二进制字节码的运行环境

2.JVM的好处

①一次编写,到处运行

②自动内存管理,垃圾回收功能

③数组下标越界检查

④多态

3.jvm,jre,jdk的比较

 3.常见的JVM

主要学习的是HotSpot虚拟机

4.jvm的学习路线

 

①ClassLoader:java代码编译成二进制后,会经过类的加载器,这样才能加载到JVM运行

②Method Area:类是放在方法区的

③Heap:类的实例化对象放在堆区

④当类调用方法时,会用到虚拟机栈,程序计数器,本地方法栈

⑤方法的每行代码执行是在执行引擎的解释器逐行执行,频繁调用的方法热点代码在JIT即时编译器执行。GC垃圾回收对堆的不用对象进行回收

⑥需要和操作系统打交道的是本地方法接口。

二、内存结构

1.程序计数器

①定义

程序计数器(寄存器)记录下一条jvm指令的执行地址

②特点

线程私有的,不会存在内存溢出。

2.虚拟机栈

定义:

①每个线程运行需要的内存空间,称为虚拟机栈。

②每个栈由栈帧Frame组成,对应着每次调用方法(参数,局部变量,返回地址)时所占的内存

③每个线程只能有一个活动栈帧,对应着当前正在执行的方法

问题分析

①垃圾回收是否涉及栈内存?

不会。栈内存由栈帧组成,对应着每次调用方法时占用的内存。每次方法调用结束会自动弹出栈。

②栈内存分配越大越好吗?

不是。默认栈内存是1M,物理内存是一定的,所以栈内存越大,能够支持更多的递归调用。但是线程会变少。

③方法内的局部变量是否线程安全?

线程安全:方法内的局部变量且无返回值。

线程不安全:方法内的局部变量有返回值。方法内的参数。

栈内存溢出 java.lang.stackOverflowError

①栈帧过多(方法递归调用)

②栈帧过大

③第三方类库的操作

修改栈内存大小-Xss

 栈溢出线程运行诊断

案例1:cpu占用过多怎么排查

①用top命令查看占用cpu最高的进程

ps H -eo pid,tid,%cpu|grep 进程id 进一步定位哪个线程引起的cpu占用过高

jstack 进程id 可以根据线程id找到有问题的线程

3.本地方法栈

 在本地方法栈有带有native关键字的方法,作用是java调用本地的C或C++方法跟系统底层交互。

4.

Heap

通过new关键字,创建对象都会使用堆内存

堆的特点

①线程共享,堆中的对象需要考虑线程安全的问题

②有垃圾回收机制

堆内存溢出

大量的对象占据了堆内存的空间java.lang.OutOfMemoryError:java heap space导致堆内存空间溢出

使用-Xmx内存大小  修改堆内存

 

排查堆内存溢出的原因

①jps工具

查看当前系统有哪些java进程

②jmap工具

查看堆内存占用情况 jmap -heap 进程id

③jconsole工具

图像界面,多功能检测,连续监测

5.方法区

定义

①方法区线程共享的(堆也是)

②方法区在JVM启动创建且内存空间不连续,可以实现扩展

③方法区类似编译代码的存储区域。方法区是存放类的信息(成员变量,方法数据,成员方法和构造器的代码)

方法区组成

①在jdk1.6中:

方法区是概念的,用PermGen永久代实现方法区。存储类的信息,存储类的加载器,运行时常量池

②在jdk1.8中:

方法区是概念的,用Metaspace云空间实现方法区(使用系统内存,不由JVM管理内存,由操作系统管理)。存储类的信息,存储类的加载器,运行时常量池

方法区内存溢出 类加载过多

①1.8前:永久代内存溢出java.lang.OutOfMemoryError:PermGen

使用-XX:MaxPermSize=8m 指定永久代内存大小

②1.8后:元空间内存溢出 java.lang.OutOfMemoryError:Metaspace

使用-XX:MaxMetaspaceSize =8m 指定元空间内存大小

溢出的场景

Spring -生成大量的类

Mybatis

运行时常量池

 

①常量池

常量池就是一张常量表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等信息

②运行时常量池

常量池是*.class文件,当类被加载,常量池信息就会放入运行时常量池,并把里面的符号地址改为真实地址。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下Git Bash调用rsync

rsync 提供了补充只需要在git安装目录下放入对应的文件即可。 需要将这个三个文件放到git的bin目录下 如果是默认安装路径是如下: C:\Program Files\Git\usr\bin 然后大功告成。

软件测试Day3|软件测试理论01

目录 1.缺陷1.1 定义1.2 缺陷由来 2. 软件测试的定义和目的2.1 软件测试定义2.2 软件测试目的 3. 软件开发模型3.1 生命周期3.2 瀑布模型3.3 螺旋模型3.4 迭代模型3.5 敏捷开发模型-scrum3.6 增量模型3.7 快速原型模型 4. 软件测试流程和模型4.1 软件测试工作流程4.2 软件测试模…

【AntV】canvas表格s2完全封装手册

前言 由于我们业务中有很多地方需要有纵向复制,刷选等操作,一般的传统表格并不支持。 目前支持度较好的葡萄城表格与handsontable都需要收费,而s2作为一款轻量级开源表单较为符合我们的需求,但是由于s2仍然不够成熟,有非常多的功能需要自定义。 我在公司对s2做了大量封…

100天精通Golang(基础入门篇)——第20天:Golang 接口 深度解析☞从基础到高级

🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂&#x1f…

FI 数据源(AP) 及 增量逻辑

AP 一般AP里要分析行项目数据,交易数据,历史付款信息。 还有一些供应商主数据。 基础的抽取数据源就是下面几个: 0FI_AP_4: Vendors: Line Items with Delta Extrcation0FI_AP_6: Vendor Sales Figures via Delta Extraction0FI_AP_7: Ve…

SQLPro Studio for Mac:强大的SQL开发和管理工具

SQLPro Studio for Mac是一款强大的Mac上使用的SQL开发和管理工具,它支持各种数据库,包括MySQL,PostgreSQL,SQLite等。使用 SQLPro Studio,您可以轻松地连接和管理您的数据库,执行SQL查询和脚本&#xff0c…

【python爬虫】8.温故而知新

文章目录 前言回顾前路代码实现体验代码功能拆解获取数据解析提取数据存储数据 程序实现与总结 前言 Hello又见面了!上一关我们学习了爬虫数据的存储,并成功将QQ音乐周杰伦歌曲信息的数据存储进了csv文件和excel文件。 学到这里,说明你已经…

国标视频融合云平台EasyCVR视频汇聚平台关于远程控制的详细介绍

EasyCVR国标视频融合云平台是一个能在复杂网络环境下统一汇聚、整合和集中管理各类分散视频资源的平台。该平台提供了多种视频能力和服务,包括视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、集群、电子地图、H.265视频自动转码和智能分析等…

一种基于WinDump自动抓包实现方法

本发明的技术方案包括以下步骤和组件: 配置抓包参数:设置抓包的IP、端口以及过滤包大小等参数,以控制抓取的数据范围。循环自动抓包:利用WinDump工具实现循环自动抓包功能,类似于记录日志的方式保留抓包数据。当抓包数…

年收入超10亿美金?OpenAI 的“赚钱戏法”

点击关注 文丨郝鑫、刘雨琦,编丨刘雨琦 “我当时见到他不到三分钟,就在想,啊,19岁的比尔盖茨估计也就这样了吧!” 在YC创始人Paul Graham(格雷厄姆)的眼里,28岁的Sam Altman与19…

香港服务器快还是台湾服务器快?

​  基于机房位置不同,香港服务器相对于台湾服务器在访问速度方面有一定的优势。香港服务器拥有CN2线路,因此访问速度较快。在网络服务商方面,中华电信等台湾服务商提供的带宽也具有很高的性价比。 香港服务器对大陆用户的影响 对于大陆用户…

如何将电子画册生成二维码,扫码查看产品图册?

随着移动互联网的发展,二维码已经成为了人们生活中不可或缺的一部分。无论是支付宝、微信支付的扫码支付,还是商家的促销活动、产品包装上的二维码,都展示了二维码的广泛应用。 电子画册也果不其然,它也可以生成二维码&#xff0c…

高德地图jsapi报错INVALID_USER_SCODE

看了各种网上方法,还是搞不定。无奈在高德开放平台提了工单。 很快高德的技术人员就给出了答复“您好,您检查一下您的安全密钥是否在key之前,安全密钥设置必须是在JS API 脚本加载之前进行设置,否则设置无效。” 并给出了推荐的…

使用 zipfile创建文件压缩工具

在本篇博客中,我们将使用 wxPython 模块创建一个简单的文件压缩工具。该工具具有图形用户界面(GUI),可以选择源文件夹中的文件,将其压缩为 ZIP 文件,并将压缩文件保存到目标文件夹中。 C:\pythoncode\new\z…

如何提高工业网关的数据传输速度?

工业网关是工业物联网系统中不可或缺的设备,提高工业网关的数据采集、传输速度,是保障和优化物联网系统运营效率的基础。如何提高工业物联网关的数据传输速度?本篇就为大家简单介绍一下。 1、选用高品质网络设备 选用具有足够带宽容量的高质…

深圳发墨西哥专线要多久才能清关?

深圳发往墨西哥专线的货物清关时间会受到多种因素的影响,包括货物的性质、数量、海关政策、运输方式以及货物的文件准备等。下面将详细介绍这些因素对清关时间的影响。 1.货物的性质和数量是影响清关时间的重要因素之一。 一般来说,墨西哥专线中普通商品…

C语言_分支和循环语句(3)

文章目录 前言一、猜数字游戏1.1.电脑随机生成一个数(1~100);1.2.猜数字:1.3.玩完一把不过瘾,可以继续玩,不用退出程序。1.4.rand 和 srand 之间的联系5.猜数字游戏源码 二、go to 语句2.1.例如&#xff1a…

PMP项目管理主要学习内容是什么?

PMP项目管理是指根据美国项目管理学会(Project Management Institute,简称PMI)制定的项目管理知识体系和方法论进行项目管理的一种认证。PMP主要关注项目的规划、执行和控制等方面的知识和技能。 下面是PMP项目管理《PMBOK指南》第六版的主要学习内容: …

RT-内核介绍

内核是一个操作系统的核心,是操作系统最基础也最重要的部分。它负责管理系统的线程、线程间通信、系统时钟、中断及内存等。 下图为 RT-Thread 内核架构图,内核部分包含内核库、实时内核实现。 内核库是为了保证内核能够独立运行的一套小型的类似C库的函…

新款岚图 FREE 26.69 万元,继续修高端操作

新款岚图 FREE 正式上市,新车共有一款车型,超长续航智驾版售价 26.69 万元。 在选装和上市权益方面,新款岚图 FREE 可选装百度 Apollo 高阶智驾选装包,价值 2.5 万元。 在 12 月 31 日前购买新款岚图 FREE ,用户可以…