JVM进修之路(一)程序计数器与虚拟机栈

news2024/9/21 10:40:58

JVM

定义:JVM:Java Virtual Machine,也就是Java运行时所需要的环境(Java二进制字节码运行时所需要的环境)
好处:
1.java代码一次编写,跨平台运行
2.自动内存管理,垃圾回收
3.数组下标越界检查
4.多肽

JVM与jdk、jre的关系

在这里插入图片描述

JVM内存结构

在这里插入图片描述

1.程序计数器

java源代码编译后无法直接在操作系统上运行。
在这里插入图片描述

程序计数器的作用就是记录下一条jvm指令的地址,在物理上是基于cpu中的寄存器实现的。
特点:
1.线程私有(每一个线程都有自己的程序计数器)
2.唯一不存在内存溢出的区

2.虚拟机栈

定义:栈:线程运行需要的内存空间。
说明:
1.一个线程有一个虚拟机栈,一个栈内由多个栈帧组成
2.每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法(每个栈帧也需要一块内存来存储方法中的参数、局部变量、返回地址等)
3.从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程(先进后出)

在这里插入图片描述
思考:
1.垃圾回收涉及栈内存吗?
答:不涉及。每个线程对应一个虚拟机栈,每个栈帧对应一个方法的调用。每次方法调用结束后,都会被弹出栈,被自动回收,所以不需要垃圾回收来管理栈内存。
垃圾回收只涉及堆内存中的对象,对于栈内存并不涉及。
2.栈内存分配越大越好吗?
答:否。电脑的物理内存是固定的。每个线程对应一个虚拟机栈,当栈分配内存过大时,物理内存中可运行的线程就会变少。
可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小。
3.方法内的局部变量是否线程安全?
答:
情况1:如果方法内局部变量没有逃离方法的作用范围,线程安全。
情况2:如果局部变量引用了对象,并逃离方法作用范围,则需要考虑线程安全的问题。

线程运行诊断
1.cpu占用过高。
linux环境下执行top命令可以查看所有进程对系统cpu的占用情况。
在这里插入图片描述

执行ps H -eo pid,tid,%cpu查看进程(pid)、线程(tid)和cpu的占比情况
在这里插入图片描述

找到占用cpu高的进程的id,使用jstack命令查看进程的具体信息。可以根据线程id(先转换为16进制),找到问题线程,定位到问题代码。

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

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

相关文章

千锋Node.js学习笔记

千锋Node.js学习笔记 文章目录千锋Node.js学习笔记写在前面1. 认识Node.js2. NVM3. NPM4. NRM5. NPX6. 模块/包与CommonJS7. 常用内置模块1. url2. querystring3. http4. 跨域jsonpcorsmiddleware(http-proxy-middleware)5. 爬虫6. events7. File System…

Mysql常用命令练习(一)

Mysql常用命令练习(一)一、数据库的三层结构二、数据库2.1、创建数据库2.2、查看、删除数据库2.3、备份和恢复数据库三、表3.1、创建表mysql常用的数据类型(列类型)创建表查看表查看表结构练习3.2、修改表修改表名修改表的字符集添加列修改列删除列练习3…

轻量级网络模型ShuffleNet

在学习ShuffleNet内容前需要简单了解卷积神经网络和MobileNet的相关内容,大家可以去看我之前的一篇博客MobileNet发展脉络(V1-V2-V3),🆗,接下来步入正题~卷积神经网络被广泛应用在图像分类、目标检测等视觉…

易盾sdk引起项目的整体耗时问题?

大家好: 我是烤鸭。今年年初的时候,项目接入易盾sdk之后,随着接口调用次数增多(用到易盾sdk的接口),项目整体性能变差。写篇文章做个复盘记录,其实同事已经写过了,我借鉴部分再拓展一些。 问题描述 突然收…

【JavaEE初阶】第五节.多线程 ( 基础篇 ) 线程安全问题(上篇)

目录 文章目录 前言 一、线程安全的概述 1.1 什么是线程安全问题 1.2 存在线程安全问题的实例 二、线程安全问题及其解决办法 2.1 案例分析 2.2 造成线程不安全的原因 2.3 线程加锁操作解决原子性 问题 ; 2.3.1 什么是加锁 2.3.2 使用 synchronized关键字…

爆品跟卖商家必读:2023年快速入局TikTok选品5大关键

TikTok商业进程一直有在发展,开启东南亚小店,美国小店内邀……有吸引了不少外贸工厂和传统跨境电商卖家等玩家入局。2022年这一年,不管是直播带货,短视频带货,还是广告投流,数据都有新的变化。据报道&#…

Word 允许西文在单词中间换行,没用/无效 终极办法

有时在写论文中,英文的调整相当麻烦,为了节约版面,会设置允许西文在单词中间换行。但有时不希望这样,特别是在复制网上英文时,会出现单词分断换行情况,如何解决: 1.一般办法。 在Word选择要调整…

C规范编辑笔记(十)

往期文章: C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) 正文: 又是新的一年,2023年的第一篇没想到隔了这么久…

MyBatis-Plus加密字段查询(密文检索)

MyBatis-Plus数据安全保护(加密解密)解释说明 1.字段加密后,数据库存储的字段内容为十六进制格式的密文2.条件查询时,若不对密文进行处理将无法匹配出想要的结果3.处理方式是借助SQL的AES_DECRYPT函数将密文解密后匹配4.SQL的解密函数只有AES_DECRYPT&am…

Java-流和IO

文章目录流InputStreamFileInputStream常用方法详情代码示例BufferInputStream常用方法详情代码示例OutputStreamFileOutputStream常用方法详情代码示例BufferedOutputStream常用方法详情代码示例ReadWriteJava的java.io库提供了IO接口,IO是以流为基础进行输入输出的…

云原生技能树-docker image 操作-练习篇

从Docker Hub 拉取已有镜像 一个Docker 镜像(image)包含了程序代码和程序运行所依赖的所有环境。 Docker 镜像一般存放在镜像仓库服务(Image Registry)里,默认的镜像仓库服务是Docker Hub。 用户可以制作、构建镜像、将镜像上传到镜像仓库服务,从而可以…

100w人在线的 弹幕 系统,是怎么架构的?

Shopee是东南亚及中国台湾地区的电商平台 。2015年于新加坡成立并设立总部,随后拓展至马来西亚、泰国、中国台湾地区、印度尼西亚、越南及菲律宾共七大市场。 Shopee拥有商品种类,包括电子消费品、家居、美容保健、母婴、服饰及健身器材等。 2022年第二…

【STM32学习】GPIO口的八种工作模式

GPIO口的八种工作模式一、参考资料二、施密特触发器1、电路2、电路计算一、参考资料 GPIO原理图详解 强烈建议观看:GPIO为什么这样设计? 施密特触发器—原理 施密特触发器—计算 什么是运放的虚短和虚断? 二、施密特触发器 关于GPIO的原理与…

JavaWeb-JSP

JavaWeb-JSP 1,JSP 概述 JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 J…

设计模式 (二) 工厂模式 Java

目录 一、案例引出 二、简单工厂模式 二、抽象工厂 工厂设计模式,顾名思义类似一家工厂来制造各种产品,目的在于提高代码的可扩展性。 一、案例引出 通过接口来实现一类产品的功能,如目前有飞机、轮船、汽车这类产品的实体类&#xff0c…

Windows 安装 Android Studio

1、下载Android Studio https://r1—sn-2x3edn7s.gvt1.com/edgedl/android/studio/install/2022.1.1.19/android-studio-2022.1.1.19-windows.exe?cms_redirectyes&mhBy&mip175.146.144.124&mm28&mnsn-2x3edn7s&msnvh&mt1673878346&mvm&mvi1…

Pycharm社区版侧边栏没有database按钮

Pycharm有专业版和社区版这两个版本,普通人在大多数情况下我们都会选择社区版进行下载安装。为啥呢?因为社区版免费,专业版收费一般人用不起呀,而且社区版能够基本满足我们的日常需求(但是这也就意味着社区版会比专业版…

LINUX学习之查看文件常用命令(四)

cat 命令描述 cat命令是一种用于查看文件内容的命令,它可以将文件的内容直接输出到标准输出 以下是cat命令常用参数: -A :显示所有字符,包括特殊字符-b :显示行号,仅针对非空白行-E :在每行…

【Java集合进阶】Collection 体系集合详解(ArrayList,LinkedList,HashSet,TreeSet...)

文章目录1. 概念2. 集合和数组的区别3. 集合的体系结构4. Collection父接口5. List 子接口6. List 实现类6.1 ArrayList 类6.2 Vector 类6.3 LinkedList 类6.4 ArrayList和LinkedList的区别7. Set 子接口8. Set 实现类8.1 HashSet 类8.2 TreeSet 类9. Collections 工具类Java编…

Vue9-数据代理

数据代理:通过一个对象代理对另一个对象中属性的操作(读写) 结论:Vue中通过vm(实例对象)来代理data中的所有数据 1.首先创建了一个vm对象 2.然后 vue就给vm准备了一些数据,当然也将data存放到…