看了很多jvm写的文章,网上都是一转再转,讲的也不细,对于实际出现的问题用他们的原理来讲很难讲通,今天我特地自己理了一下,帮助别人的同时也提高自己,希望有不组的地方多指点
jvm研究
为什么要研究:首先研究这个可以让我们更加清楚jvm的工作原理,和解决实际生产中堆溢出和栈溢出的原因,同时对为什么会产生同步问题也有了更进一步的思考
首先jvm会有一个classload机制加载你所有的类和一些本地方法等,这个我就不再重复讲,主要讲下面一块
jvm对数据的存储
jvm对数据存储分5大块:
1.堆
2.栈
3.方法区(方法区(主要2个):常量池,静态成员区)
4.本地方法栈
5.程序计数器
首先,除了栈不是线程共享之外,其他都是线程共享
堆中存放的数据:数组和任何new 的对象(连带着对象的成员变量是属于每个对象的,所以也是放在堆中。例子:单例模式中,对一个成员变量操作会有同步问题。备注:servlet的机制)。 方法中new的对象一样存放在堆中,所以当你在一个方法中new很多对象,一样会出现堆溢出。
栈中存放的东西:(这里主要讲一个线程的流程)准确来说栈是给线程执行的一个通道,每个线程在启动进入栈时,jvm都会赋予一个栈帧给这个线程,栈帧中存放(中间结果集,方法中变量,对象的引用等。因为每个线程都有一个栈帧,所以方法内部变量都是线程安全的。所说的栈是线程安全的也是这个原因。所以很多文章说基本类型int是放在栈中,但是我觉得这个不太准确),在赋予栈帧的之后,jvm会从栈中给这个线程分配栈空间,假设线程使用a,b,c方法,那么线程就会把方法区中的方法放入栈中,然后通过栈帧来进行结果集的计算。所以当你的递归方法很多不能及时释放栈空间,就会有栈溢出。
本地方法:(static和final 修饰符的存放地方)
常量池:存放final的常量
静态成员区:存放类的成员变量(由于方法区是多线程共享,所以静态成员变量是具有同步问题的)
其他:存放方法的信息,比如方法名,方法返回值等等
程序计数器,本地方发栈,一个是线程的执行过程,一个是jvm自身的方法存放位置
分享到:
相关推荐
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
Monkey老师的JVM调优课程,无疑为我们提供了一个宝贵的平台,来深入探究JVM的工作原理及其优化技巧。下面,我们就一起来深入学习Monkey老师关于JVM调优的核心知识点。 首先,我们要明白JVM的重要性。它是Java程序...
### 个人总结之—JVM性能调优实战 #### 概述 本文档是一篇关于JVM(Java虚拟机)性能调优的经典实战总结。在实际应用开发与维护过程中,JVM性能调优是一个非常重要的话题,它直接关系到应用程序运行效率、资源利用...
对于初学者而言,掌握JVM的基础知识不仅可以帮助深入理解Java语言的工作原理,还能为解决实际开发中遇到的问题提供强大的工具。本文旨在探讨为什么学习JVM如此重要,并分享作者撰写“JVM基础系列”专栏的初衷。 ###...
《深入理解JAVA虚拟机》是一本经典的技术书籍,详细解析了JVM的工作原理和性能优化技巧。读者可以从这本书中了解到类加载机制、内存模型、垃圾收集算法、JVM调优策略等关键知识点。对于Scala开发者来说,理解JVM至关...
"JAVA进阶高级jav"进一步指出这份资料主要面向已经有一定基础的Java开发者,旨在帮助他们深入理解JVM的工作原理,提升到更高级的Java开发水平。 【压缩包子文件的文件名称列表】"尚宋-硅红-谷康-JVM-ppt"可能是作者...
项目名为"jvm-rs-main",通过这个项目,我们可以深入学习Rust语言与JVM的交互,以及如何构建一个简化版的JVM。 一、Rust语言的魅力 Rust是一种系统级编程语言,它强调安全、并发和速度。它的内存管理模型避免了空...
理解OS意味着掌握进程管理、内存管理、文件系统、设备驱动、网络通信等基本原理,这对于优化Java应用的性能和理解JVM与系统的交互至关重要。 5. **汇编语言**:汇编语言是低级编程语言,与机器指令一一对应,用于...
理解JVM的工作原理对于优化代码性能、排查问题以及提升编程技艺都有着深远的影响。"jvm虚拟机源码学习资料"是一份专门针对JVM内部机制深度探索的学习资源,其中包含了配置jar包cglib-2.2.2.jar,这是一款常用的Java...
在"java虚拟机源码学习-deep-learning-to-jvm:深入理解Java虚拟机源码学习"这个主题中,我们将探讨JVM的内部工作原理、其源码结构以及如何通过学习源码来提升对Java运行机制的理解。 1. **JVM结构** JVM主要包括类...
使用场景及目标:准备面试、提升个人技术水平、理解和掌握JVM的关键技术和概念、学会JVM的基本配置与调优。 阅读建议:本文不仅涉及基础知识,还有深入的技术细节。建议初学者先通读一遍形成整体认识,在遇到特定...
JVM入门涉及理解其组成部分、内存管理机制、垃圾回收原理及垃圾回收器的使用等。 一、JVM组成部分 1. 程序计数器(PC Register):它是线程私有的,用于记住下一条JVM指令的执行地址。由于线程是相互独立的,所以...
综上所述,《深入理解计算机系统》这本书很可能是为了帮助读者深入了解计算机系统的工作原理,特别是在Java编程、JVM管理和Linux操作系统的使用方面提供了深入的技术细节和实践指导。对于希望成为高级软件工程师或...
《Java虚拟机规范》是Java开发人员和技术爱好者深入了解JVM内部工作原理的关键文档之一。本规范详细介绍了Java SE 7版本中的JVM架构、设计原则及其运行机制,为Java平台上的应用程序提供了一致且高效的操作环境。 #...
文章提供了一些关于JVM内部工作原理的深入洞察,但需要指出,由于文章的快速发布的性质,内容主要是基于作者个人经验的趣闻轶事,可能没有经过正式的技术审查,因此使用和信任这些内容需要谨慎。 在给出的内容中,...
面试中,深入理解JVM的工作原理,特别是内存管理和垃圾回收机制,对于Java工程师来说至关重要。能够分析和调优JVM参数,解决内存溢出、性能瓶颈等问题,是高级工程师必备的能力。此外,了解不同JVM实现之间的差异和...
JVM逃逸是一种高级的软件安全问题,涉及到Java虚拟机(JVM)的安全机制被绕过,允许恶意代码获取不应有的权限或执行非授权操作。...总结来说,理解JVM逃逸的原理和防御机制对于保障Java应用的安全至关重要。
综上所述,深入理解JVM的工作原理对于Java开发者来说至关重要。通过对JVM内存结构、生命周期、垃圾收集机制、类加载机制以及JIT即时编译等方面的学习,不仅可以提升个人技术能力,还能在实际工作中解决复杂的技术...
理解JVM的工作原理,包括类加载机制、内存模型(堆、栈、方法区、本地方法栈)以及垃圾回收机制(GC),对于优化程序性能至关重要。了解类加载器的双亲委派模型,以及如何调优JVM参数(如-Xms, -Xmx, -XX:...
Java虚拟机(JVM)是Java程序...总结,理解和掌握JVM的工作原理及性能优化,不仅能帮助我们编写出高效、稳定的Java应用程序,也是提升个人技术能力、通过面试的关键。深入研究JVM,将使你在编程世界中更加游刃有余。