JVM系列(1)-----初始JVM

JVM系列-参数调优1 说到JVM的参数调休,一定得知道JVM的内存结构,理解JVM内存结构的参数调优都是耍流氓,参数调优至少要知道调的是什么,优化的是什么。 JVM内存和物理机内存其实是有很多对应关系的,JVM的内存也受到物理机内存的约束,毕竟JVM内存是基于物理内存虚拟出来的东西,大体来说, JVM内存分为heap区、stack区、method区、程序计数器,再细分一点的话heap区又分为新代和老代,栈区又分为j 阅读详情

这几天面试,问了一些JVM的知识感觉答的不是很好,在此写JVM系列的文章(再次讨论的是java8的相关知识点),回顾一下相关知识,希望能够帮到看我文章的朋友,现在马上开始。

相关概念:
1.什么是jvm?(java virtual machine)
Java虚拟机是抽象的计算机。像真正的计算机一样,它具有指令集并在运行时操作各种内存区域。

2.什么是运行时数据区?
Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的,仅在Java虚拟机退出时才被销毁。其他数据区域是每个线程的。创建线程时创建每个线程的数据区域,并在线程退出时销毁每个数据区域。

The Java Virtual Machine defines various run-time data areas that areused during execution of a program. Some of these data areas are created on Java Virtual Machine start-up and are destroyed only whenthe Java Virtual Machine exits. Other data areas are per thread.Per-thread data areas are created when a thread is created anddestroyed when the thread exits. —摘录java8官网描述

3.运行时数据区示意图

在这里插入图片描述

4.内存模式(JMM)
在这里插入图片描述

类加载机制

先用一张图看看一个java文件时怎样被加载进虚拟机的
在这里插入图片描述
在将生成的class文件加载进jvm中时主要有三个步骤:

装载
	1.找到class文件的位置,并用类加载器classLoader基于双亲委派的机制进行加载
	2.将类文件信息交给jvm
	3.将类文件的对象交给jvm
链接
链接阶段负责把类的二进制文件合并到JRE中,可以分为三个:
  (1) 验证 保证类的加载正确性。
  (2) 准备 要将类的静态变量分配内存空间,并将其的值进行初始化成默认值。
  (3) 解析 将类的符号引用转换为直接行用。
初始化
	主要对类的静态变量,常量真正的赋值 
类的初始化时机
1.创建类实例(new 、发射,反序列化)。
2.调用某个类的静态方法
3.访问类或者接口的类变量,或为该变量赋值
4.初始化某个类的子类
双亲委派机制

在这里插入图片描述
双亲委派机制为了避免同名的对象重复加载而出现的机制
类加载还会出现下列机制
1.全盘负责 :当一个类加载器负载一个类的加载时,该类所依赖的和引用的其他类也将由这个类加载
2.父类委托:尝试让父类加载器加载,当父类加载器无法加载时才让自己加载
3.缓存机制:所有加载过的class都会被缓存,所有的类只加载一次

运行时数据区

Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的,仅在Java虚拟机退出时才被销毁。其他数据区域是每个线程的。创建线程时创建每个线程的数据区域,并在线程退出时销毁每个数据区域。

在这里插入图片描述

方法区

线程共享的一片内存区域,方法区也叫永久代,用户存储被jvm加载的类信息,静态变量,常量,以及即时编译器编译的代码等数据,内存管理由GC分代收集来实现压缩,标记,清除等操作

堆

线程共享的一片内存区域,主要用来存储对象和数组,采用分代算法进行内存管理,从GC角度将堆细分为新生代和老年代。

虚拟机栈

线程非共享的一片区域,跟线程的生命周期一致,在每个方法调用会生成栈帧(Stack Frame),里面主要存储局部变量 ,操作数栈,动态链接,和方法返回值,为执行Java方法服务

本机方法栈

与虚拟机的类似,但是主要为native的方法服务

程序计数器

一块较小的内存空间,当前线程执行字节码的行号指示器,每条线程都有独立的计数器,这个内存区域时唯一没有OOM的区域,因为程序在生成字节码文件时都已经确定了程序的最大行号

JVM 的GC回收算法----G1 JVM内存垃圾回收目前有多种算法,每种算法都有自己的特点和使用场景,本文主要介绍一下G1(Garbage-First)算法.G1是一款面向服务端应用的垃圾回收器,是SUN公司在JDK1.7中提出来的,初衷是替换JDK1.5中的CMS垃圾回收算法。G1之前的所有收集器都是对整个新生代或老年代进行垃圾回收,而G1不是这样:G1是将整个堆空间分成许多个大小不等的独立区域(Region),大约有2... 阅读详情

相关推荐

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 473

深入理解JVM:运行时数据区域划分

一、运行时数据区 Java虚拟机在Java执行的过程中会将它所管理的内存区域划分为若干个不同的数据区域。Java7.0划分如下 其中: 线程共享:方法区、堆 线程私有:虚拟机栈、本地方法区、程序计数器 注:在Java8中移除了永久代(方法区),通过元数据区(meataspace)存储数据。元数据区本质与永久代类似,都是对方法区的实现。 区别:元数据空间不在虚拟机中,而是使用本地内存 1.1、程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是记录当前

正义 705

Arduino Nano + MCP3422A0 ADC 毫欧表:3档分辨率(0.1mΩ-1.3kΩ)开尔文连接实测

本文详细介绍了如何使用Arduino Nano与MCP3422A0 ADC构建高精度毫欧表,采用四线制开尔文连接和三档量程设计,实现0.1mΩ-1.3kΩ的精确测量。通过精密恒流源和18位ADC技术,结合智能量程切换和数字滤波算法,显著提升测量精度和稳定性,适用于电子维修、PCB测试等场景。

weixin_28292761的博客 325

JVM06_方法区的概述、内部结构、演变、常量池、运行时常量池、垃圾回收

①. 什么是JVM? 1.什么是JVM? ①. JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机 ②. jvm是运行在操作系统之上的,与硬件没有任何关系 ②. Java的跨平台及原理 2.Java的跨平台及原理 ①. 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行 ②. 原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM) ③. JVM的分类 3.JVM的分类 ①. 类加载子系统

所得皆惊喜 5144

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1176

UI-TARS桌面版模型部署

在 UI-TARS 中配置 VLM(视觉语言模型)模型,无论是选择云端(Hugging Face)还是本地(vLLM)部署,都需要经过一系列步骤,下面为你详细展开介绍。

二琳爱吃肉的博客 4539

JVM系列-第12章-垃圾回收器

垃圾收集机制是Java的招牌能力,极大地提高了开发效率。这当然也是面试的热点。那么,Java常见的垃圾收集器有哪些?截止JDK1.8,一共有7款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器(重点记忆图)。

xiejunxing的专栏 2341

Source Insight 4.0 及最新版序列号验证机制全解析:如何快速定位关键函数并构造有效Key

本文深入解析了Source Insight 4.0及最新版的序列号验证机制,详细介绍了如何快速定位关键函数并构造有效Key。通过静态分析和动态调试技术,帮助开发者理解现代软件保护的设计哲学,掌握逆向分析方法论,提升安全研究能力。

weixin_26642481的博客 427

快速上手JVM系列(一)——进一步认识Java与JVM概述

进一步认识Java,Oracle JDK与Open JDK,Java语言的地位,Java上层框架与JVM的关系,Java代码的执行流程,初识JVM——跨语言的平台,虚拟机是什么,JVM发展历程,JVM架构模型,初探JVM内存结构,JVM的生命周期,周志明老师深入理解Java虚拟机与尚硅谷JVM教程的整合

1741

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1366

JVM 系列(一) --- 深入浅出对 JVM 的理解

本篇文章主要介绍 **JVM 是什么, JVM 的内存布局是什么样的, JVM 的类加载机制是怎么一回事,以及垃圾回收的概念,**这些概念都是以后升学或者是找工作面试常考/常问的问题,因此需要我们经常回顾,本篇文章便可以当做常回顾的工具.我们在上学期间可能已经接触过虚拟机这个概念,虚拟机就是一个完整的计算机系统,其具有完整的硬件功能,并且运行在一个完全隔离的环境中,

Fug_Lee的博客 1685

遗传算法(Genetic Algorithm)详解与实现

遗传算法(Genetic Algorithm, GA)是受自然进化原理启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索、优化和学习的各种问题提供高质量的解决方案。同时,它们类似于自然进化,因此遗传算法可以克服传统搜索和优化算法遇到的一些障碍,尤其是对于具有大量参数和复杂数学表示形式的问题。

盼小辉丶的博客 24万+

JVM系列(十)[CMS和G1的GC日志分析解读,JVM常用参数]

文章目录

书院二层楼 1104

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java 8 jvm参数_jdk8 jvm配置参数说明

设置内存分配池的初始大小(以字节为单位)。该值必须为0或1024的倍数且大于1 MB。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。根据系统配置在运行时选择默认值。请参阅Java SE HotSpot虚拟机垃圾收集调整指南中的“人体工程学”部分。以下示例显示如何使用各种单位将分配的内存大小设置为6 MB:-XX:InitialHeapSize = 6291456-XX:Initi...

weixin_39904809的博客 1592

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JVM系列--初始JVM

JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。Java源代码执行流程如下:分为三个步骤:1、编写Java源代码文件。2、使用Java编译器(javac命令)将源代码编译成Java字节码文件。3、使用Java虚拟机加载并运行Java字节码文件,此时会启动一个新的进程。

jifashihan的博客 984

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JVM-初始JVM

JVM全称是JavaVirtualMachine,中文译名Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。

weixin_64133130的博客 1734

初始jvm

什么是内存泄漏:指的是不在使用的对象在系统中未被回收,内存泄漏的积累可能导致内存溢出。Java中为了简化对象的释放,引入了自动的垃圾回收机制。通过垃圾回收器来对不再使用的对象完成自动回收,垃圾回收器主要负责对堆上的内存进行回收。

weixin_50823701的博客 825

Jvm系列-Jvm概述(一)

目录 1,什么是JVM? 2,JVM跨平台及原理 3,JVM的分类 4,JVM的位置 5,JVM的体系结构 6,Java代码的执行流程 7,JVM的架构模型 8,JVM的生命周期 9,三大商业虚拟机 1,什么是JVM? JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机。 jvm是运行在操作系统之上的,与硬件没有任何关系。 2,JVM跨平台及原理 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行。 原理:编译之后的字节码

理科男同学 5万+

1、初始JVM

一、什么是JVM 1.1 什么是JVM VM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机 虚拟机名称 介绍 HotSpot Oracle/Sun JDK和OpenJDK都使用HotSPot VM的相同核心 J9 J9是IBM开发...

吴大侠的博客 310

JVM的初始认识

JVM的初始认识什么是JVM1.JVM是Java跨语言平台的根本。(屏蔽操作系统和硬件的差异化:java一次编写到处运行)2.JVM是虚拟机架构,拥有自己的指令集(JVM提供了一套标准的指令)和不同运行时期的内存区域3.JVM只在乎 class file(字节码文件),JVM是一个多语言的平台(不单单为我们的Java语言服务)字节码及类装载机制类的加载过程加载:查找class文件(如何查找:类的全限定类名获取class文件)并导入到JVM运行时数据区链接初始化:为类的静态变量赋值,然后执行类的static语

weixin_43347737的博客 272

详解查看JVM初始和最终的参数

详解查看JVM初始和最终的参数

FuncPlotCalc 611

JVM底层原理之堆内存初始大小

一、java1.8堆内存基本情況 java1.8之後將最初的永久代取消了,由元空間取代。 在java8中,永久代已經被移除,被元空間取代。元空间本质和永久代类似。 元空间(java8)与永久代(java7)之间最大的区别在于: 永久代使用的是JVM堆内存,但是java8以后的元空间并不在虚拟机中,而是使用本机物理内存。 因此,默认情况下,元空间大小受本地内存限制。类的元数据放入na...

lixinkuan的博客 2210

01.基础篇:初始jvm

java Virtual Machine 中文译名:java虚拟机JVM本质上是一个运行在计算机上的程序,他的职责是运行java字节码文件主要是 .java文件 通过 javac命令编译为 .class(字节码文件)文件 进而通过java命令 运行代码。

weixin_42314827的博客 1892

JVM系列之内存与垃圾回收篇

JVM系列之内存与垃圾回收篇       今天听同事说,当996成为常态,没有一个程序员是无辜的 话说,咱们程序员总是有一颗想要学习的心,套用网上的一句话就是:一天不学习,浑身难受啊!!! 文章目录JVM系列之内存与垃圾回收篇前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机

JSDSFY的博客 2841
上一篇: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.
下一篇: 解决feign调用session传不出去的问题
jackwang91
博客等级 码龄10年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值