JVM总结

JVM详解——什么是JVM、JVM优点 JVM详解——什么是JVM、JVM优点 最近在学习Java,经常在书中看到JVM这三个字母,那到底什么是JVM呢? 并且JVM的知识在Java面试中也是非常受面试官青睐的知识点,那对于JVM我们到底要掌握哪些呢? 1、JVM概念 JVM是Java Virtual Machine(Java虚拟机)的缩写。 1.1、什么是Java虚拟机呢?Java虚拟机的好处是什么呢? 答:虚拟机是一种抽象化的计算... 阅读详情

JVM总结

运行时数据区

Java虚拟机运行时数据区
线程共享:

  • 方法区(Method Area):用于存放已被虚拟机加载的类型信息、常量、静态常量、即时编译器编译后的代码缓存等数据。
    • 运行时常量池(Runtime Constant Pool):是方法区的一部分,用于存放Class文件中的常量池表,常量池表用于存放编译器生成的各种字面量与符号引用,这部分类容将在类加载后存放到方法区的运行时常量池中。
  • 堆(Java Heap):Java堆在虚拟机启动时创建,用来存放Java对象实例。

线程私有:

  • 虚拟机栈(Java Virtual Machine Stack):Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会创建一个栈帧用于存放局部变量表、操作数栈、动态连接、方法出口等信息。每个方法从调用到执行完毕的过程,对应于栈帧在虚拟机栈中从入栈到出栈的过程。
  • 程序计数器(Program Counter Register):当前线程所执行的字节码行号指示器,用于指示程序执行到哪一行。
  • 本地方法栈(Native Method Stacks):与虚拟机栈类似,不同的是,虚拟机栈为Java字节码服务,而本地方法栈为Native方法服务。

对象的创建

new 一个对象在JVM中发生了什么?

  1. 首先看在运行时产量池中是否能找到这个类的符号引用,并且检查这个类是否被加载、解析和初始化过。如果没有,则先执行类加载过程。

  2. 为新生对象分配内存。对象所需内存的大小在类加载过程就已经确定。然后在堆中为该新对象分配一块内存区域。分配的方式有指针碰撞(Bump the Pointer)和根据空闲列表分配。如果堆是规整的,则直接挪动指示未分配和已分配区域分界点的指针,这种方式成为指针碰撞。如果不是规整的,即已分配和未分配交叉混合在一起,则根据空闲列表进行分配。

    • 在如何划分可用空间中,仅仅修改指针的指向并不是线程安全的。JVM使用两种方式来保证线程安全。一种是堆分配内存空间的动作进行同步——采用CAS配上失败重试的方式保证更新操作的原子性,另一种是吧内存分配的动作按照线程划分在不同的空间之中,即每个线程在Java堆中于线分配一小块内存,成为本地线程分配缓冲(Thread Local Allocation Buffer, TLAB)
  3. 将分配到的内存空间(不包括对象头)初始化为0

  4. 对对象进行必要的设置,比如说设置对象头,或者说按照构造函数进行初始化。

对象的内存布局

对象在堆内存中的存储布局分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。

  • 对象头:包含Mark Word和类型指针。Mark Word用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,在32位和64位虚拟机中分别为32bit/64bit。类型指针是对象指向它的类型元数据的指针,Java虚拟机通过这个指针来确定该对象是哪个类的实例。

  • 实例数据:对象的信息,即定义的各种类型的字段内容。

  • 对齐填充:占位符。由于HotSpot中规定的对象的大小为8字节的整数倍,如果对象头和实例数据不到8的整数倍字节,则通过对齐填充来补全。

【JVM】JVM监控 jvm 阅读详情

相关推荐

【JVM】JVM是什么?

1.基本概念 JVM 是可运行 Java 代码的假象计算机,包括【一套字节码指令集】、【一组寄存器】、【一个栈】、【一个垃圾回收】,【堆】和【一个存储方法域】。 JVM 是运行在操系统之上的,它与硬件没有直接的交互。 ...

良月柒 1371

JVM 基础知识和JVM性能检测

1:JVM内存模型 所有线程共享区:方法区(元数据)、堆 线程私有区:java虚拟机栈、本地方法栈、程序计数器。 以下是对这5个进行详细说明。 程序计数器(线程私有):用来存储指向下一条指令的地址,内存特别小 本地方法栈(线程私有):登记native方法 java栈(线程私有): Java线程执行方法的内存模型,一个线程对应一个栈,每个方法在执行的同时都会创建一个栈帧 方法区(共享):类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义 堆(共享):虚拟机启动时创建,用于存放对

小罗 380

3.5.3以太网ETH TC8-PMA物理层测试

英文原版-OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_100BASE-T1_v3.0.pdf。PMA测试时各个测试项目所进入的测试模式不同,如TX_01对应测试模式1;TX_04对应测试模式5;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。TX_07对应测试模式5;物理层测试主要分为两部分:IOP测试(包括链接时间,信号质量,线路诊断),PMA测试。

qq_28664971的博客 7696

面试官:说下你对Synchronized的理解。

ps:最近一直在面试,Synchronized被问到的挺多的,分三个方面总结下,有不对的地方请也希望大家指正出来。 Synchronized作用: Synchronized的主要作用是为了保证多线程环境下的线程的安全性,它是一种悲观锁的实现机制。 大家也可以这样理解:现在有一群人都要去上公共厕所,但是坑位只有一个,那谁先上呢?那当然是谁先抢到谁先上啦,但是这个厕所没门碰巧又有两个人同时挤了进去(尴尬不)。这两个人想,这都进去了也不能大眼瞪小眼啊,事还是要办的啊!于是这两个人协商一人用马桶一秒钟再

LRBrZero的博客 478

APM32取代STM32的经验分享

我仔细检查了代码中与硬件相关的部分,例如外设寄存器的访问和中断处理程序的设置,并进行了相应的修改。在本文中,我将分享我将APM32引入项目中取代STM32的经验,并提供相应的源代码。我查看了APM32的官方网站、开发者论坛和相关社交媒体,了解了开发者社区的活跃度和可用的资源。总结起来,将APM32替换STM32的过程需要经过几个关键步骤:了解APM32的规格和功能、评估软件生态系统、迁移代码和调试,以及性能和功耗优化。在开始替换之前,我对APM32进行了详细的研究和评估,以确保它能够满足项目的需求。

UplKubernetes的博客 2004

SVN使用:使用TortoiseSVN遇到提示请执行“清理”命令的解决方法

作为程序员来说,在团队开发过程中关于代码管理的工具使用并不陌生,比较常用的代码合并管理工具如:Git、SVN等,虽然相关工具的使用并不复杂,但是还是要掌握常用的使用方法,尤其是相关的第三方软件的使用也是极为重要的,而且有时候使用这些三方软件来进行代码管理的时候也会遇到一些问题。本篇博文就来分享一下在SVN使用的时候使用TortoiseSVN遇到提示请执行“清理”命令的解决方法,方便查阅使用。

全沾软贱开发攻城狮 1万+

JVM监控:JVM监控指标、JVM监控界面实现、Java监控JVM

本文概要: 1、监控JVM的哪些指标; 2、一目了然的JVM监控的UI界面; 3、Java代码获取JVM监控状态。 1、监控JVM的哪些指标 javaVersion /** Java版本号 */ ...

tjiyu的博客 1万+

物联网应用开发教程专栏介绍与说明——列表目录查阅(持续更新)

为方便查阅学习本专栏,特整理专栏介绍与说明及提供列表目录便于查阅。阿齐Archie《物联网应用开发教程》专栏。本专栏为物联网应用开发教程,将更新涵盖常见的WIFI、蓝牙、蜂窝网、以太网、Lora、NB-iot等物联网技术实战应用及详解其技术知识。专栏为技术文章,订阅一个文章即可本专栏内所有文章可看,实战开发,亲测无误,附视频演示效果,会持续更新本专栏。本专栏内有理论篇也有完整实战应用篇。

嵌入式阿齐Archie 2万+

JVM(四)JVM调试命令、JVM参数

jps、jstat、jinfo、jmap、jstack;JVM参数;GC日志分析

HK的博客 2631

ArduPilot简介

一,什么是ArduPilot? ArduPilot是一个可信的,多用途的,开源的自动驾驶系统。该系统支持了非常多的交通工具类型,包括多旋翼无人机,传统直升机,固定翼飞行器,船,潜艇,巡逻车等。源码由大型开发者社区的专家和爱好者共同开发和维护。也欢迎更多的开发者加入源码的迭代演进,最好的“打开”方式就是加入开发者团队论坛。该论坛对所有人开放,在这里可以深入感受到开发者们对ArduPilot的热爱。 论坛链接:ArduPilot Discourse 开发者指南:Welcome to the ArduPil

从0到1,突破自己 5452

基于深度学习的水果新鲜程度检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

本文详细介绍了如何使用YOLO系列模型(YOLOv5、YOLOv6、YOLOv7、YOLOv8)构建水果新鲜度检测系统。通过数据集准备、模型训练、推理过程以及UI界面的实现,我们能够构建一个实时检测水果新鲜度的系统。通过本博客,您可以全面了解如何应用深度学习技术解决实际问题,尤其是在智能监控和食品质量检测领域。

YOLO 815

JVM - JVM调优

JVM - JVM调优

qq_43350524的博客 1431

华为OD机试真题 新系统 【社交网络相同爱好好友查询】

华为od机试真题 新系统【社交网络相同爱好好友查询】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试真题【社交网络相同爱好好友查询】多语言题解实现。

qq_45776114的博客 1336

JVM系列之JVM介绍

JVM系列之JVM介绍1、为什么要学习JVM2、 JVM 定义3、JVM的作用4、查看自己的JVM5、JVM,JRE 和 JDK 联系4、往期佳文4.1、面试系列4.2、技术系列4.3、源码系列4.4、数据结构和算法系列4.5、并发系列4.6、面试题系列 1、为什么要学习JVM        跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看。所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试

Java学习之乐的博客 2644

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM的优化

我们首首先要了解1.8jdk 1、我们为什么要对jvm做优化? 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们 可能将有下面的需求: (1)运行的应用“卡住了”,日志不输出,程序没有反应 (2)服务器的CPU负载突然升高 (3)在多线程应用下,如何分配线程的数量? …… 所以我们不仅要让程序能跑起来,而且是可以跑的更快!可以分析解决在生产环境中所遇到的各种“棘手”...

weixin_46106066的博客 5000

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JVM之Arthas的jvm命令

通过 jvm 命令,可以快速了解 JVM 的整体运行状态,为性能分析和问题排查提供基础数据。

qq_57756904的博客 1121

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JVM——JVM调优方案

如果你的应用和用户没有什么交互,完全不需要关注用户体验,那么你的硬性标准就是不顾一切的提升吞吐量,达到程序性能的最优。为了验证自己的猜想,于是准备登录后台去测试下,结果在测试的过程中发现到处订单的按钮前端居然没有做点击后按钮置灰交互事件,结果按钮可以一直点,因为导出订单数据本来就非常慢,使用的人员可能发现点击后很久后页面都没反应,结果就一直点,结果就大量的请求进入到后台,堆内存产生了大量的订单对象和EXCEL对象,而且方法执行非常慢,导致这一段时间内这些对象都无法被回收,所以最终导致内存溢出。

庄小焱 1952

【JVM】初识JVM(上)

平时我们都是用IDE编写好代码后,执行,就能看到效果了。可是我们有没有想过,这其中的流程是怎么样的呢? 我们编写的代码是“java语言”的,可是计算机只能听懂“01语言”。那其中是怎么转换的呢?JVM讲的就是这个。 引入JVM java语言到机器语言 我们先来看一个java文件是怎么翻译为机器语言的。 从上图中可以看出:我们编写出.java文件,经过编译器(javac)编译,生成.class文...

玫瑰与鹿° 1231

JVM-常见JVM参数、如何查看JVM参数、如何动态设置JVM参数

1 JVM参数 1.1 标准参数 // 查看java版本 -version // help命令就不用了说了吧 -help // -server // 指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符, // window上分号“;”.Linux下使用“:” -cp 1.2 -x参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xi...

抠脚的汉子 2606

32位JVM和64位JVM之间的明显差异

32位JVM和64位JVM之间存在一些明显的区别和细微差别。我们认为我们将通过本问答文章来澄清它们,我是否需要了解32位JVM和64位JVM之间的区别? 如果您不是在构建性能关键型应用程序,则不必了解它们之间的区别。32位JVM和64位JVM之间的细微差别不会对您的应用程序产生太大影响。您可以进一步跳过further。64位JVM的性能是否优于32位JVM? 我们大多数人认为64位大于32位,因此64位JVM性能将优于32位JVM性能。不幸的是,事实并非如此。与32位JVM相比,64位JVM的性能可...

allway2的博客 1835

JVM上篇(一、JVM_Java 及 JVM简介)

JVM(jdk 1.8) 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! JVMJVM(jdk 1.8)一. 前言二. Java 及 JVM简介1.虚拟机介绍2.JVM架构模型3.JVM 生命周期4.JVM发展三. 类加载子系统1.类加载器及加载过程:1.1加载过程1.2类加载器2.双亲委派机制2.1双亲委派机制2.2双亲委派优势2.3沙箱安全机制3.其他四.运行时数据区1.基础知识2.程序计数器(PC寄存器)2.1 PC Register介绍2.2 PC Register举例2.

weixin_43695916的博客 1372

【JVM】JVM总结应有尽有

JVM JVM是什么?JVM 内存模型Java堆:程序计数器:方法区:本地方法栈:JVM栈:GC算法标记清除算法复制算法标记整理算法分代收集算法垃圾收集器类加载机制类加载时机类加载过程加载验证准备解析初始化类加载器java内存模型JVM调优总结导图 JVM是什么? JVM是Java Virtual Machine(java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是...

凤凰涅槃 488

细说JVM系列:JVM介绍

  JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站、企业内部应用、实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError,

有心好书 6121

JVM是什么?Java程序为啥需要运行在JVM中?

JVM 代表Java 虚拟机,本质上是一个虚拟机或运行时环境,允许 Java 程序在多个设备和操作系统上运行和操作。Java 程序不能在没有 JVM 支持的机器上运行,它是 Java 运行时环境 (JRE) 的一个组成部分。JVM 具有许多共同运行 Java 程序的规范。它本质上是平台相关的,即每个操作系统都有不同的JVM。规范实现实例规范是正式描述 JVM 实现所需内容的文档,拥有单一规范可确保所有实现都是可互操作的。JVM 实现是满足 JVM 规范要求的计算机程序。

m0_73311735的博客 1249
上一篇: LeetCode#239,滑动窗口最大值,学习单调队列使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值