JVM笔记

1,什么是JVM

1.1 定义:

Java Virtual Machine ,是java程序的运行环境(java二进制字节码的运行环境)

1.2 优势:
  • 一次开发,到处运行
  • 自动内存谷粒,垃圾回收功能
  • 数组下标越界检查(防止越界覆盖其他数据结构的内存)
  • 多态
1.3 JDK与JRE的关系

在这里插入图片描述
经常使用JPS/JAVAC/JAVAP等命令都是属于JDK,不属于JRE,有些服务器上只安装了JRE,也能运行JAVA服务,但是不能通过JPS查看java进程,不能使用jmap等性能检测工具。

2,学习JVM有什么用?

2.1 提升面试竞争力

学成文武艺,货与帝王家,JVM就是竞争力。

2.2 理解底层实现原理

JVM是内功,有深厚的内存,才能练出高强的招式。

2.3 工作必备技能

如何写出高性能的代码,如何设计高性能的应用架构,如何排查生产中出现的问题。只有学习了JVM,理解原理和常用工具,才能实现以上目标。

3,常见的JVM

3.1,实现了JVM规范的应用程序就是JVM

在这里插入图片描述

4,学习路线

4.1 Jvm组成部分
  • Java 类加载
  • Jvm内存结构:方法区、堆、虚拟机栈、PC计数器、本地方法栈
  • 执行引擎 :解释器、即时编译器、GC
  • 本地方法接口

在这里插入图片描述

4.2 学习顺序
JVM内存结构
GC垃圾回收
字节码
类加载器
Jvm引擎-即时编译器

5,程序计数器

5.1 Java代码的运行流程
Created with Raphaël 2.3.0 开始 Java编译器将Java代码编译成字节码 Jvm引擎中的解释器将Jvm字节码解释出机器码 CPU执行机器码 结束

计数器的作用是在解释器读取字节码的过程中,记住当前字节码的地址,程序计数器总是指向下一条字节码指令的位置。

6,程序计数器-特点

6.1 线程私有

容易理解,线程是CPU调度的基本单位,每个线程独立的执行代码,线程会竞争CPU资源,竞争失败会被挂起,挂起之后恢复需要知道下一个指令的地址,所以必须私有。

6.2 唯一不存在内存溢出的区域

7,虚拟机栈

7.1 线程私有

每个线程都有一个虚拟机栈,虚拟机栈是线程私有的

7.2 作用

在代码执行的过程中,会形成一个方法调用链,这个链本质是栈,每个方法调用在虚拟机中都会有一个栈帧与之对应,调用结束栈帧会被弹出。

7.3 结构
  • 局部变量表
  • 操作数栈
  • 返回地址(调用当前方法的地址)

8,Idea演示栈帧

使用Idea Debug程序时,可以看到方法调用链,就是虚拟机栈的外在表现形式,每个虚拟机栈都会对应一个局部变量表,存放局部变量的值,为了配合代码的执行,还必须有一个操作数栈,操作数栈在Idea中未通过UI呈现。

9~11,问题辨析1

1,垃圾回收释放设计栈内存?

不需要,栈帧在使用结束后就会被释放,不会继续存在,所以无需垃圾回收

2,栈内存越大越好吗?
  • 通过-Xss125m 设置虚拟机栈的大小
  • 不是越大越好,虚拟机栈是线程私有的,每个线程都有虚拟机栈,总的虚拟机栈大小=线程数*虚拟机栈大小,设置的就是单个虚拟机栈大小,所以虚拟机栈设置的太大,受限于内存总大小,线程数就会受到限制,所以虚拟机栈并不是越大越好。
3,方法内局部变量是否线程安全?

在这里插入图片描述

  • m1的变量sb是线程安全的,在方法内定义、方法内使用,生命周期在方法内部
  • m2的变量sb不是线程安全的,其生命周期大于方法的周期,其作用范围大于方法内部的作用范围,可能会被其他线程共享
  • m3的变量sb虽然是在方法内部创建的,但是其引用会传递给其他方法,可能被其他线程共享,所以不是线程安全的

12~13 栈内存溢出

  • 方法调用链太深,栈帧太多,比如递归调用、死循环调用,会导致栈内存溢出
    在这里插入图片描述

  • 栈太大,一个栈帧把栈内存撑爆。

复现 使用 -Xss1k,把栈内存设置为1k,创建一个大于1k的局部变量,就会栈内存溢出

  • 第三方包导致栈内存溢出:比如Dept内引用Emp类对象,Emp对象又引用Dept对象,在Json序列化时就可能导致栈内存溢出

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

基于springboot+Redis的前后端分离项目(九)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 附近的商户、用户签到、UV统计 (一)附近的商户1.附近商户-GEO数据结构的基本用法2.附近商户-导入店铺数据到…

uni-app实现emoj表情包发送(nvue版)

uni-app实现表情包发送&#xff0c; vue实现思路直接使用grideview网格布局加载emoj表情包即可实现&#xff0c;很简单&#xff0c;但是nvue稍微复杂&#xff0c;这里采用的方案是nvue提供的组件list 看效果 代码 <template><view style"margin-right: 10rpx;m…

自定义类型详解(C语言)

自定义类型 一. 结构体1.1 什么是结构体1.2 结构体的声明1.3 特殊的声明1.4 结构体的自引用1.5 结构体变量的定义和初始化1.5.1 结构体变量的定义1.5.2 结构体变量的初始化 1.6 结构体内存对齐1.6.1 为什么存在内存对齐 1.7 修改默认对齐数1.8 结构体传参 二. 位段2.1 什么是位…

k8s与集群管理

从docker讲起 终于有人把 Docker 讲清楚了&#xff0c;万字详解&#xff01; Docker资源&#xff08;CPU/内存/磁盘IO/GPU&#xff09;限制与分配指南 默认情况下&#xff0c;Docker容器是没有资源限制的&#xff0c;它会尽可能地使用宿主机能够分配给它的资源。如果不对容器资…

python如何打包整个项目成exe文件?

首先需要进入项目打包文件所在的目录 运行以下命令打包 build_medicalgraph.py文件 pyinstaller -D build_medicalgraph.py 打包完成后一定要记得下面这个步骤&#xff0c;否则运行会发现报错 把数据文件给放到exe文件同级别目录下 除了以下文件保留&#xff0c;其他文件可以…

win10远程桌面控制Ubuntu服务器 - 内网穿透实现公网远程

文章目录 前言视频教程1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 转载自cpolar极点云文章&#xff1a;树莓派使用Nginx 搭建轻量级网站远程访问 前言 XRDP是一种开源工具&#xff0c;它允许用户通过Windows R…

springboot项目自定义注解+Aop实现收集日志

一 工程结构 二 配置 2.1 配置pom <!--spring boot的启动类 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.…

安卓:表示日期的控件

一、日期控件 &#xff08;一&#xff09;、DatePicker DatePicker是一种安卓平台上常用的控件&#xff0c;用于让用户选择日期。它通常以日历的形式显示&#xff0c;并允许用户通过滑动或点击来选择年、月和日。 常用属性&#xff1a; android:calendarViewShown&#xff1…

[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)

在编程方面&#xff0c;从来都是实践出真知&#xff0c;书读百遍其义自见&#xff0c;所以实战是最好的提升自己编程能力的方式。 前一段时间&#xff0c;写了一些实战系列文章&#xff0c;如&#xff1a; ASP.NET MVC开发学生信息管理系统VueAntdvAsp.net WebApi开发学生信息…

基于Dubbo分布式网上售票系统

一、项目介绍 民航售票是一个高度依赖信息业的行业。但在机票销售的管理和规范这方面上存在着很多各种各样的问题。例如订票是客运行业中的一个最基本的业务,表面上看,它只是机票站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,关系到民航公司能否正常运作。…

2023年8个最佳WordPress电子书主题

您是正在为您的网站寻找最佳的WordPress电子书主题吗&#xff1f;无论您是独立作家、出版社还是同时销售电子书和实体书的在线书店&#xff0c;拥有一个可以直接销售电子书的网站都是一个好主意。 销售电子书可能有助于分销和扩大影响力&#xff0c;但也会侵蚀您的利润。例如&…