JVM学习-JVM简介以及其内部结构

目录

1.什么是JVM

2.JVM、JRE、JDK、JavaSE、JavaEE之间的联系 

3.JVM的内部结构

4.各部分的作用  

        4.1 类加载器

        4.2 方法区

        4.3 堆

​编辑         4.4 虚拟机栈

        4.5 程序计数器

        4.6 本地方法栈

        4.7 解释器和JIT即时编译器

        4.9 GC垃圾回收

5.拓展

        5.1一些可能会遇到的问题

        5.2堆内存溢出诊断方法

        5.3linux环境下线程诊断方法 


1.什么是JVM

        JVM是Java虚拟机的缩写,是Java程序的运行环境。更准确地说是Java程序的二进制字节码的运行环境,因为JVM的主要作用是将Java源码编译为字节码并执行。Java程序之所以能够跨平台运行就是因为JVM的存在,JVM编译后的字节码在任何支持JVM的平台都可以运行且无需再次编译;并且JVM有自己的垃圾回收机制,自动管理内存,减轻了程序员内存管理的负担。

        通过学习JVM,我们就可以了解一个Java程序在底层的执行过程,进而优化我们的代码。

2.JVM、JRE、JDK、JavaSE、JavaEE之间的联系 

3.JVM的内部结构

        

4.各部分的作用  

        4.1 类加载器

        用来加载类的二进制字节码(包括类的基本信息、常量池,类方法定义)。有四种类加载器:启动类加载器、扩展类加载器、应用类加载器、自定义类加载器

        4.2 方法区

        方法区是线程共享的一块区域,存储了和类结构相关的信息,比如运行时常量池、成员变量、方法数据等;方法区在虚拟机启动时被创建,逻辑上是堆的一部分。之所以说逻辑上是堆的一部分是因为实际的存储位置并不一定在堆中,比如Hotspot(JVM的一种)的jdk1.8版本是将方法区放在了元空间,而元空间使用的是操作系统的一部分内存;jdk1.6版本的则放在了永久代中,永久代使用的是堆内存。方法区也会触发垃圾回收当大量的类被加载时会导致方法区空间不足。要注意的是,在JDK1.7版本前方法区空间不足触发的异常是内存不足:永久代(java.lang.OutOfMemoryError: PermGen space),在JDK1.8版本后则是内存不足:元空间(java.lang.OutOfMemoryError: Metaspace)

        4.3 堆

        堆是线程共享的,所有通过new创建的对象都会存放在堆中。当存储的对象过多或者串池存放的值过多时会导致堆内存溢出,也就会触发垃圾回收如果垃圾回收后堆内存仍不足,那就是其中的对象大部分都还在被使用无法回收,内存占用仍然很高。要注意的是,在JDK1.6版本前串池空间不足触发的异常是内存不足:永久代(java.lang.OutOfMemoryError: PermGen space),而JDK1.7版本后提示的异常则是内存不足:堆空间(java.lang.OutOfMemoryError: Java heap space)

         4.4 虚拟机栈

        每个线程在创建时都会创建一个虚拟机栈,这是线程运行所需要的内存,所以虚拟机栈是线程私有的。每个栈中存放一个个栈帧,栈帧则是调用一个方法所需要的内存,里面存放着局部变量表、操作数栈、返回地址等;栈帧中仅有一个活动栈帧,对应当前正在执行的方法,也是栈顶的栈帧,如果当前方法调用了其他方法,那么对应的新的栈帧会被创建出来,放在栈的顶端成为新的活动栈帧。当方法执行完成或者抛出异常自动结束执行时,均作为执行完毕处理,就会将该方法对应的栈帧弹出虚拟机栈,活动栈帧自然就会变成下一个方法对应的栈帧。

        虚拟机栈不会触发垃圾回收,因为方法执行完后栈帧就被弹出去了,不会留在栈中。但存在栈内存溢出的问题,一种是栈帧过多导致的,比如无限递归;另一种是栈帧过大导致的,一般都是由栈帧过多引起的栈内存溢出,因为普通情况下执行一个方法所用到的局部变量不是很多,栈帧也不会太大。

        虚拟机栈由于栈帧中的局部变量都是线程私有的,所以只要不逃离线程的作用范围就不会产生线程安全问题;但堆是线程共享的,所以都需要考虑线程安全问题。

        4.5 程序计数器

        主要作用就是记住下一条JVM指令的执行地址,以在执行完当前的一个JVM指令后能够找到下一个指令,实际上是一个寄存器,每个线程只有一个程序计数器,且程序计数器是线程私有的不存在内存溢出的问题

        4.6 本地方法栈

        本地方法栈是线程私有的,随着线程的结束而消失,所以不会触发垃圾回收。 

        4.7 解释器和JIT即时编译器

        4.9 GC垃圾回收

        当堆内存不足时就会出发垃圾回收,堆中存放对象的地方又分为新生代和老年代, 新生代又分为伊甸园和幸存区,幸存区分为from和to两部分。一般情况下,新产生的对象被放在伊甸园中,执行垃圾回收时没有被回收的对象会放到幸存区中,如果这些对象在执行多次垃圾回收时依旧没有被回收,那么就会将这些对象从幸存区放到老年代中。

         详细内容见另一篇博客:JVM学习-垃圾回收专题。

5.拓展

        5.1一些可能会遇到的问题

        5.2堆内存溢出诊断方法

        5.3linux环境下线程诊断方法 

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

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

相关文章

opencv安装(C++)并配置vs

准备工作: 1.opencv安装包(此教程使用4.9) 2.visual studio(此教程使用vs2019) opencv安装: 1、下载opencv: 1.1 官网下载:Releases - OpenCV 1.2 百度网盘:链接:https://pan.baidu.com/s/1NpEoFjbbyQJtFD…

CTF-希尔加解密

对于希尔加解密很多writeup都说用在线工具,所以研究了一下,写了一个方便的加解密python代码,根据给定的字母表及私钥字符串,尝试不同纬度不同重叠的加密矩阵输出加解密结果。运行效果如下: 代码文件Hill希尔加解密_fi…

8:00面试,8:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到9月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

matlab simulink 工业现场漆包机烘炉模糊PID控制算法

1、内容简介 略 70-可以交流、咨询、答疑 2、内容说明 matlab simulink 工业现场漆包机烘炉模糊PID控制算法 第五章 控制算法仿真与分析 在第二章系统分析结合工业现场漆包机烘炉数学模型详细分析模糊PID控制算法以及解耦控制算法的优缺点、实现原理,为本章算法…

第8节课------列生成与分支定价法

列生成与分支定价法 1. 列生成 通过迭代的方式来构建和解决一个“受限”的主问题,并通过解决一系列相关的子问题来动态地生成新的变量(或称列),这些新变量有可能改进主问题的解。 原问题新添加的这一列可以通过对偶问题的行来计算。 2. 列生成的详细说明 对于原来的…

【TB作品】数字电压表设计,MSP430,电压表,Proteus仿真,分档位

文章目录 题目要求第1版方案第2版方案代码介绍获取代码和仿真 题目要求 33、数字电压表设计 基本要求: 了解电压表的工作原理。 对0~2.5V的模拟电压进行循环采集 采集的数据进行A/D转换后用LCD屏显示测量值,显示精度0.0001 用键盘选择测量范围(分档) 超过测量范围时指示灯持续…

基于springboot+vue实现员工信息管理系统项目【项目源码+论文说明】

基于springbootvue实现员工信息管理系统演示 引言 随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机在实现企业人事档案的管理势在必行。当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。从而使我们从繁杂的…

上位机图像处理和嵌入式模块部署(qmacvisual跳转语句)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们依次讨论了判断语句和结束判断语句,今天我们继续学习跳转语句。从功能上面来说,跳转语句和判断语句较为类似。不过…

时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较

最近时间序列预测预测领域的最新进展受到了各个领域(包括文本、图像和语音)成功开发基础模型的影响,例如文本(如ChatGPT)、文本到图像(如Midjourney)和文本到语音(如Eleven Labs&…

【JS】html字符转义

需求 将html转为字符串将html字符串转义&#xff0c;比如<div>转为<div> 码 /*** html标签字符转义* param {Stirng} str 要转换的html字符* returns String 返回转义的html字符串*/ const elToStr str > str.replaceAll(<, <).replaceAll(>, >)…

ChatGPT有身体了,能走向千家万户吗?

3月13日&#xff0c;OpenAI投资的人形机器人——Figure 01迎来重磅更新&#xff0c;接入最新版ChatGPT后&#xff0c;它能和人交流描述眼前看到的事物。在视频中&#xff0c;Figure 的人形机器人&#xff0c;可以完全与人类流畅对话&#xff0c;还能理解人的自然语言指令进行抓…

搞懂分布式技术:缓存更新的套路

目录 缓存更新的套路 Cache Aside Pattern Read/Write Through Pattern Read Through Write Through Write Behind Caching Pattern 再多唠叨一些 缓存更新的套路 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

shallowReactive浅层式响应对象

一、 reactive 和ref 都是深层响应式对象: 就是不管对象有多少层&#xff0c;修改此对象任一属性都会响应式处理 shallowReactive 和shallowRef 浅层响应式对象: 只会修改第一层对象&#xff0c;修改此对象第一层属性&#xff0c;视图会有同步变化&#xff0c;非第一层&#xf…

WorkPlus Meet局域网视频会议软件的领先解决方案

局域网视频会议软件在现代企业中发挥着重要的作用&#xff0c;而在众多选项中&#xff0c;为何选择WorkPlus Meet作为局域网视频会议软件&#xff1f; 选择局域网视频会议软件时需要考虑到企业的需求。WorkPlus Meet提供了稳定、高效的局域网视频会议功能&#xff0c;能够满足…

关于d3dx9_43.dll文件丢失的解决办法,六种详细方法

当d3dx9_43.dll文件缺失时&#xff0c;系统会显示错误信息来提示用户。这些错误信息可能会包含类似于"d3dx9_43.dll未找到"或"找不到d3dx9_43.dll"等字样。通常出现这样的字样那就是导致应用程序通常无法正常启动或执行相关功能。那么出现这样的功能有什么…

哔哩哔哩后端Java一面

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 最近各大公司的春招和实习招聘都开始了&#xff0c;这里分享下去年面试B站的的一些问题&#xff0c;希望对大家有所帮助…

Centos7安装ffmpeg

Centos7安装ffmpeg 用到的包压缩并安装 用到的包 压缩并安装 tar xvJf ffmpeg-5.0.1.tar.xz yum install -y gcctar -zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install yasm --versionyum install -y bzip2tar jxvf nasm-2.14.02.tar.bz2 cd n…

Spring MVC文件上传配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现&#xff1b;示例代码如下&#xff1a; Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…

Guitar Pro 8.1功能介绍及如何安装安装破解教程

音乐创作是许多音乐人的核心工作&#xff0c;而吉他作为其中最为常用的乐器之一&#xff0c;其创作和演奏的重要性也不言而喻。在创作过程中&#xff0c;如何更好地记录和编辑音乐成为了许多音乐人所面临的挑战。而Guitar Pro 8.1则是一款专业的吉他音乐编辑软件&#xff0c;它…