01JVM_内存结构

一、什么是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.mfbz.cn/a/97802.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac下Docker Desktop安装命令行工具、开启本地远程访问

Mac系统下,为了方便在terminal和idea里使用docker,需要安装docker命令行工具,和开启Docker Desktop本地远程访问。 具体方法是在设置-高级下, 1.将勾选的User调整为System,这样不用手动配置PATH即可使用docker命令 …

说说我最近筛简历和面试的感受。。

大家好,我是鱼皮。 都说现在行情不好、找工作难,但招人又谈何容易?! 最近我们公司在招开发,实习社招都有。我收到的简历很多,但认真投递的、符合要求的却寥寥无几,而且都是我自己看简历、选人…

对于uts namespace共享的测试

前言 单单以下列命令运行虽然是root,还不行,我们需要加--privileged,不然会报 hostname: you must be root to change the host name docker run -it --utshost ubuntu:latest /bin/bash 如果加上--privileged后 docker run -it --priv…

基于AI智能分析网关EasyCVR视频汇聚平台关于能源行业一体化监控平台可实施应用方案

随着数字经济时代的到来,实体经济和数字技术深度融合已成为经济发展的主流思路。传统能源行业在运营管理方面也迎来了新的考验和机遇。许多大型能源企业已开始抓住机遇,逐步将视频监控、云计算、大数据和人工智能技术广泛应用于生产、维护、运输、配送等…

hp惠普光影精灵5笔记本HP Pavilion Gaming-15-dk0135tx原装出厂Win10系统

原厂系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、惠普电脑管家等预装程序 适用型号: 15-dk0011tx,15-dk0018tx,15-dk0019tx,15-dk0020tx,15-dk0021tx,15-dk0038tx 15-dk0039tx,15-dk0040tx,15-dk0041tx,15-dk0125tx,15-dk0126tx,15-dk0127tx 15-dk012…

排序 Bubble Sort(提取函数)

C自学精简教程 目录(必读) 1 前驱知识点 3.5 for循环语句 3.6 if语句 3.7 函数 3.8 动态内存 2 排序 是将元素按照从小到大的顺序存放的方法。 一开始元素可能并不是按照从小到大的顺序存放的。 这时候我们需要找到需要调整的元素对,并交换这两个元素的值&…

Flutter实现动画列表AnimateListView

由于业务需要,在打开列表时,列表项需要一个从右边飞入的动画效果,故封装一个专门可以执行动画的列表组件,可以自定义自己的动画,内置有水平滑动,缩放等简单动画。花里胡哨的动画效果由你自己来定制吧。 功…

springboot实战(二)之将项目上传至远程仓库

目录 环境: 背景: 操作: 1.注册码云账号 2.创建仓库 步骤: 1.注册完码云账号后,点击加号,新建仓库 2.输入项目名称和介绍,点击创建 3.复制仓库地址,你可以选择https协议或者…

VSAN硬盘出现resetremoved

原创作者:运维工程师 谢晋 VSAN硬盘出现reset&removed 客户环境有8台服务器dell R740和R740XD服务器组成了一套VSAN集群,但R740那四台的物理机老是出现硬盘故障需进行硬盘更换,后发现刚换完的硬盘没过几天又坏了,先开始怀疑…

C++学习笔记总结练习:运算符重载两种方式

运算符重载的两种方式 1 基本概念 基础 运算符时具有特殊名字的函数:由关键字operator和气候定义的运算符共同组成。 可以被重载的运算符 方式 将运算符重载为类的成员函数。重载运算符函数,并声明为类的友元。 规则 重载后的运算符必须至少有一个…

vscode html使用less和快速获取标签less结构

扩展插件里面搜索 css tree 插件 下载 使用方法 选择你要生成的标签结构然后按CTRLshiftp 第一次需要在输入框输入 get 然后选择 Generate CSS tree less结构就出现在这个里面直接复制到自己的less文件里面就可以使用了 在html里面使用less 下载 Easy LESS 插件 自己创建…

深圳产品展示视频拍摄一站式服务

产品展示视频拍摄一站式服务是指一家专业的拍摄制作公司或团队提供从策划、拍摄到后期制作的全方位服务,以满足客户的产品展示需求。这种服务通常包括以下方面,由产品展示视频制作公司老友记小编从以下几个方面为您整理: 1.策划和预制阶段&a…

【期末复习笔记】计算机操作系统

计算机操作系统 进程的描述与控制程序执行进程进程的定义与特征相关概念定义特征进程与程序的区别 进程的基本状态和转换PCBPCB中的信息作用PCB的组织方式 线程进程与线程的比较 处理机调度与死锁处理机调度处理机调度的层次 调度算法处理机调度算法的目标处理机调度算法的共同…

PhpStorm安装篇

PhpStorm安装篇: 下载地址 : 进入官网下PhpStorm: PHP IDE and Code Editor from JetBrains 下载完之后,安装包 安装目录建议不要放C盘,放其他盘,其他直接一直点 next ,到结束 安装完,打开编辑器 注册账号并登录后…

继续绷紧油市神经,市场预计沙特10月继续自愿减产

KlipC报道:据了解,市场参与者大都认为沙特阿拉伯将会把自愿额外减产的措施延长至10月底,以寻求在经济低迷的背景下提振油价。 KlipC的合伙人Andi D表示:“今年5月起,沙特就自愿减产日均50万桶原油,今年6月初…

苹果使用3D打印技术制造Apple Watch Series 9手表外壳

据彭博社的马克・古尔曼报道,苹果公司正在使用 3D 打印技术来制造即将推出的部分Apple Watch Series 9 的外壳。这种制造工艺可以节省传统数控加工所需的大量金属材料,同时缩短生产时间。这与之前苹果分析师郭明錤的说法相吻合。 苹果公司自2021年推出Ai…

Linux 虚拟机同步时间crontab以及crond详解

目录 一 Linux 虚拟机同步时间设置 1. 检查是否安装cron服务(即时间同步器) 2. 下载时间同步器 3. 编辑crontab 内容 4. 同步更新电脑网络时间 5.设置 reload 6. 查看 crond 状态 二 crond 详解 1. 启动/关闭cron服务 2. crontab命令格式 3. …

【LeetCode-中等题】138. 复制带随机指针的链表

文章目录 题目解题核心思路:找random指针指向思路一:哈希思路二:迭代构造新链表 方法一:哈希递归方法二:纯哈希方法三:迭代 节点拆分 题目 解题核心思路:找random指针指向 这里的拷贝属于深拷…

为什么曾经一马当先的C语言,如今却开始出现骂声

今日话题,为什么曾经一马当先的C语言,如今却开始出现各种骂声?C语言的发展历程可以追溯到20世纪70年代初期,它的设计理念、简洁性、可移植性以及对底层硬件的直接控制能力使其在计算机科学领域逐渐受到重视从而成为了天王搬到存在…

安捷伦DSA91204A高性能示波器/Agilent DSA91204A

描述 安捷伦的DSA90000A系列示波器为同等的DSO90000A产品增加了串行数据分析、EZJIT和50 M存储标准。 Infiniium DSO90000系列拥有业界领先的技术,能够提供超越规格的卓越示波器性能。加速测量任务的定制软件可以完全集成到示波器应用中,实现无缝操作。…
最新文章