JVM内存区域解析,Java开发必学

学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模 本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实 阅读详情

        Java语言最重要的特点之一:跨平台使用,正是由于JVM的存在。

        想要Java开发稳步进阶,学JVM这条路绕不开。

1.为什么要学JVM?

        我们都知道,要做Java开发,必须在你的电脑上安装JDK才行,安装JDK之后里面会有一个JRE的目录,JRE提供了软件环境----JVM。

        在开发过程中当我们出现内存泄漏、内存溢出的时候我们不应该想到-Xms去设置或者栈的-Xss或者restart来解决,而是更应该去想想,为什么会出现?什么导致?怎么优化?

2.JVM是什么?

        JVM,即Java Virtual Machine ,Java虚拟机 运行在操作系统之上的虚拟的计算机 。

        我们主要研究的是 HotSpot VM JDK自带的虚拟机,这个虚拟机有两个很好的优点:准确式GC + 热点代码探测技术。所谓准确式GC,就是让JVM知道内存中某位置数据的类型什么。

        比如当前内存位置中的数据究竟是一个整型变量还是一个引用类型。这样JVM可以很快确定所有引用类型的位置,从而更有针对性的进行GC roots枚举。

        JVM进行一段代码是不是热点代码,是不是需要触发即时编译,这样的行为称为热点探测。

        Java语言最重要的特点之一:跨平台使用,正是由于JVM的存在。

3.JVM虚拟机内存结构

        JVM虚拟机将其内存分为程序计数器、虚拟机栈、本地方法栈、java堆、方法区。

        我们看看上面图片,当文件被加载之后,会变成一个JVM进程 而字节码文件就运行在JVM进程内。开启一个线程就独占一块内存区域, 彼此独立。分区只考虑线程安全问题,线程共享不安全,存在线程对于资源得争夺。

4.你真正了解方法区吗?

        方法区实际上是属于共享内存区域,Java源文件反映的信息都叫类信息,Java源文件会被编译成二进制文件加载到JVM去执行。比如:要去拿类对象,通过Student.class,类对象存在方法区,实际上拿到的是方法区的引用。

        这里多提一点,方法区也存在垃圾回收,但是回收率低,回收主要针对常量池的回收,和类型卸载。当方法区无法满足内存需求时,会报OOM。

        在共享区画堆内存,这个大家比较了解了:

Student stu = new Student();

        new 出来得对象存在堆里面,stu是存在栈里面,这里提到的堆就是堆区。

        对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。

        试想,堆中存储了对象,到底存的是什么?Java对象在内存中的布局?

        先运行int num = 1; 不会存num的名称,而是存1。然后是存 marsLee,不是名称,而是引用堆区的地址。

        元信息保存在方法区,元信息(模板)在堆区都有实例存储。静态变量和方法都存在方法区。存储对象只是存储实例对象的值,名称不会存。

那对象怎么鉴定呢?

        通过对象头object header,包含Mark Word(标记字段)和 Klass Pointer(类型指针)

        Klass Pointer,即是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

        Mark Word,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等。

5.总结

对象放堆区,线程安不安全?不安全。多个线程操作一个对象就会不安全,除非只读。

当多个线程访问Student对象时 ,这个静态字段会不会安全?不安全。

6.Java学习视频:

Java300集!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受

4 屏 + 8 摄像头一开,谁在悄悄拖慢你的座舱域控? 如果你觉得座舱卡顿:❌ 别第一反应怪 SoC❌ 别盲目堆算力。 阅读详情

相关推荐

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2179

JVM总结之内存区域详解

JVM 运行时数据区概述

正在努力工作的搬砖人 3688

从零到精通:ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程

本文详细介绍了ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程,从环境准备到高级功能扩展,帮助开发者实现精准控制。通过集成模型预测控制(MPC),机械臂能够优化复杂轨迹规划,处理动态避障,提升工业自动化效率。

juice的博客 706

JVM有哪些内存区域?经典面试题你会吗?

JVM有哪些内存区域?经典面试题你会吗?

杨荧的优快云博客 1131

告别环境配置烦恼:用Conda一键搞定GATK4、samtools、fastp等生信分析全家桶

本文介绍如何利用Conda快速搭建包含GATK4、samtools、fastp等工具的生物信息学分析环境,解决软件安装和版本冲突问题。通过详细的配置步骤和实战案例,帮助研究者十分钟内完成重测序分析全家桶的环境配置,显著提升上游分析效率。

weixin_30753873的博客 334

道岔故障监测系统设计(源码+开题)

通过实时监控道岔的工作状态,系统能够及时发现异常情况,预防潜在的安全隐患,从而减少事故发生的概率。此外,监测系统还能够为维护人员提供详细的数据支持,帮助他们更准确地判断道岔的磨损程度和故障类型,优化维修计划,延长道岔的使用寿命。随着智能化、自动化技术的发展,道岔故障监测系统的设计与应用也将推动铁路行业的技术进步,为实现智能铁路和未来交通系统的构建奠定基础。因此,开展道岔故障监测系统的设计研究,不仅具有重要的工程实践价值,也有助于推动铁路运输行业向更高水平的发展。

灵军程序设计 771

JVM的内存区域

JVM内存区域一、内存区域分布图二、区域详解三、JVM的运行时内存 一、内存区域分布图 JVM的内存区域分为线程私有区域(程序计数器、虚拟机栈、本地方法区)、线程共享区域(堆、方法区)和直接内存。 线程私有区域随着线程的启动而创建,随线程的结束而销毁。 线程共享区域随虚拟机的启动而创建,随虚拟机的关闭而销毁。 二、区域详解 1.程序计数器 程序计数器是线程私有的一块内存空间,用于存储当前运行的线程所执行的字节码的行号指示器,每一个运行的线程都有一个独立的程序计数器,是唯一没有内存溢出的一块区域。

SSimeng的博客 2378

Power Automate Desktop实战:一键自动登录Chrome网站

本文详细介绍了如何使用Power Automate Desktop实现Chrome网站的一键自动登录,提升工作效率。从环境准备、基础配置到高级技巧与异常处理,全面解析自动化登录流程的构建与优化,特别适合需要频繁登录多个系统的用户。

weixin_29231725的博客 467

JVM 内存区域

【概述】JVM是Java虚拟机(Java Virtual Machine)的简称,是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。我们学习使用的基本都是HotSpot虚拟机。【优点】优点说明实现跨平台运行让底层代码和运行环境分离开,编写好一份代码后,不用再次修改内容,只用通过安装不同的JVM环境自动进行转换即可运行,在各种系统中无缝连接。自动内存管理专门设计了垃圾回收机制,来自动进行内存的管理,极大的优化了操作。数组下标越界检查。

m0_51607909的博客 1830

SpyGlass Lint脚本实战:如何用TCL自动化RTL代码检查(附完整配置模板)

本文详细介绍了如何利用TCL脚本实现SpyGlass Lint工具的自动化RTL代码检查。通过构建模块化、工程化的脚本框架,文章提供了从环境搭建、核心配置、规则定制到豁免管理的完整实战指南,并附有可复用的配置模板,旨在帮助IC设计工程师构建高效、一致的代码质量检查流水线。

weixin_29204205的博客 134

手把手教你学Simulink--人形机器人控制场景实例:基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真

matlab编辑% 连杆长度 (m)% 躯干(髋到CoM)% 大腿% 小腿% 质量 (kg)% 转动惯量(绕质心,简化为杆)matlab编辑% 躯干CoM(假设在髋上方L_body/2处)% 左大腿CoM% 左小腿CoM% (右腿类似,略)本文完成了基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真,实现了:✅ 定义7-DOF平面人形结构✅ 使用Symbolic Math Toolbox自动推导动力学方程✅ 生成。

MHD0815的博客 146

【JVM】JVM 的内存区域

JVM的内存区域

hui_zai_的博客 1303

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2249

java程序员必学 - JVM

JVM 类加载器,通过双亲委派机制,先委托给父类找代码,再一步一步交给子类,防止用户代码污染源代码。 栈空间,通过栈帧管理程序的运行。 方法区(元空间),存放类的结构信息,被虚拟机加载的类信息、常量、静态变量、以及编译后的方法等数据 。 空调 f = new 格力(); /* 方法区 -> f */ 堆空间(存储空间),分为新生代,老年代,元空间。新生代和老年代采用的虚拟机...

Honghuan的博客 208

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

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

面试必学JVM面试题(附答案)

Java语言区别于其他计算机语言的最大特点就是面向对象性,也被称为与平台无关的编程语言,java能实现这样的特点,就是因为JVM虚拟机的作用,因此关于JVM的知识点都是需要大家掌握的。下面整理了10道JVM面试题,是在java面试中考察几率最大的题目,一起来学习吧。 1.什么情况下会发生栈内存溢出? 栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型; 如果线程请求的栈深度大于虚拟

jvm__cgmx9880的博客 1243

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

热门项目推荐:jvm - Java开发者必备的底层原理知识库

热门项目推荐:jvm - Java开发者必备的底层原理知识库 【免费下载链接】jvm ???? JVM 底层原理最全知识总结 项目地址: https://gitcode.com/doocs/jvm ...

gitblog_01403的博客 661

VB摄像头监控

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

Java虚拟机必学之四大知识要点

作为一位 Java 程序员,在尽情享受 Java 虚拟机带来好处的同时,我们还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉 JVM,你才能在遇到 OutOfMemory 等异常时,不会束手无策,不会一脸懵逼地上网找解决办法,最后就算改了几个启动参数解决了问题,也还是云里雾里。 这次,我会从我专栏里提取了学习 Java 虚拟机的 X 大知识要点,助力大家深入理解 JVM...

Java_No2的博客 362

Java实习生必学:JVM内存模型与调优实战

JVM内存模型(JMM)是Java并发编程的核心基础,它定义了线程如何与内存交互的规则。理解JMM可以帮助开发者解决多线程环境下的可见性、原子性和有序性问题,从而编写出更高效的并发代码。在实际应用中,JVM内存调优是提升系统性能的关键手段,涉及堆内存分配、GC策略选择等核心参数配置。通过工具链如jstat、jmap和VisualVM,可以诊断内存泄漏、GC瓶颈等常见问题。对于Java实习生和开发者来说,掌握JVM内存模型和调优技巧,不仅能应对大厂面试中的高频考点,更能有效提升线上系统的稳定性和性能。本文结合

weixin_30899023的博客 233

2024年Java工程师外派,程序员必学

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。快速入手通道:(戳这里,免费下载)诚意满满!!!你的支持,我的动力;祝各位前程似锦,offer不断!!!满满!!!**针对以上面试题,小编已经把面试题+答案整理好了。

2401_84584628的博客 417

从初级到架构师:Java程序员节必学的7大核心课程体系

掌握Java进阶核心技能,系统提升开发与架构能力。本篇java程序员节推荐课程涵盖并发编程、微服务、JVM调优等7大体系,结合实战场景与主流框架,助力从初级迈向架构师。内容体系完整,学习路径清晰,值得收藏。

AlgoFun的博客 1068

最早的90后Java开发已经31岁,最早的00后已进网易大厂,你在哪里?_30岁才进网易(1)

包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

2401_84689601的博客 1067

java native方法_JVM的基础知识点Java的内存模型

Java虚拟机是Java工程师必学的进阶功课,这段时间开始死磕JVM。今天梳理一下JVM的基础知识点Java的内存模型!程序计数器是什么:程序计数器是很小的一块内存空间,它是当前线程所执行的字节码的行号指示器。有什么用:解释器通过这个计数器来选取下一条需要执行的字节码指令。存储什么内容:如果线程执行的是Java方法,存储的是正在执行的虚拟机字节码指令的地址;如果是native方法,计数器值为空(...

weixin_39713219的博客 102

程序员必学!Java程序员最大的悲哀是什么

前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的同学,在这分享总结的Java面试的高频面试题(包括了Java集合,JVM,并发与多线程,Spring,MyBaits,微服务,Dubbo,Kakfa,中间件,Redis,数据库,设计模式等),进行了整理,免费分享给大家,希望大家能带着这些问题和答案解析,能让你进行有针对性行的学习,对面试做到知己知彼,

m0_57501730的博客 187

Android开发必学!15分钟的字节跳动视频面试,2年以上经验必看

最近在知乎上,有许多人在邀请我去回答“Android前景怎么样、是不是要凉了、是不是应该考虑要转行?”等一系列的问题。 想着可能有很多人都有这样的担心,于是就赶紧写篇文章,来跟你们谈下Android开发的前景到底怎么样? 1、Java 相关 容器(HashMap、HashSet、LinkedList、ArrayList、数组等) 需要了解其实现原理,还要灵活运用,如:自己实现 LinkedList、两个栈实现一个队列,数组实现栈,队列实现栈等。 HashMap、HashTable 和 Current

m0_56255097的博客 159

java学习资料整理(开发必备)

收集的java学习资料整理了下,里面包含了计算机基础、算法和数据结构、常用工具、java核心知识、性能优化、基础框架、数据库、消息队列、缓存中间件、搜索引擎、大数据、RPC、网关、容器、面试等知识

m0_67537062的博客 1万+

开发人员必学!25K大牛甩出的超详细面试总结,面经解析

什么是 Spring Boot Java (面向对象编程语言)经过30多年的发展,产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一, 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得繁琐了,因为它使用了大量的XML配置文件,配置繁琐,整合不易,开发和部署效率低下。这时急切需要一-种新的能解决这些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的

m0_57286518的博客 117
上一篇: 多种Java软件开发工具都有哪些?
下一篇: Java面向对象7大设计原则讲解
程序媛_小白
博客等级 码龄5年 322粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值