`
- 浏览:
126702 次
- 性别:
- 来自:
北京
-
原文地址:http://wangf-longhz-com.iteye.com/blog/1452787
看了很多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自身的方法存放位置
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
jvm学习路线图,可以供初步想学习的同学了解学习。。。
这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...
本资料集合包含了多个关于JVM学习的重要主题,旨在帮助读者从基础到深入地掌握JVM的工作原理和优化技巧。 1. **JVM运行机制** (2.JVM运行机制.pptx) JVM的运行机制包括类加载、字节码执行、内存管理等关键过程。类...
首先,JVM学习涉及多个层面,包括内存管理、类加载机制、垃圾收集、线程管理等。理解JVM内存模型至关重要,它主要分为堆内存(Heap)、方法区(Method Area)、栈内存(Stack)、本地方法栈(Native Method Stack)...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...
NULL 博文链接:https://cooldatabase.iteye.com/blog/634599
### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...
JVM学习笔记(缓慢更新).md
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明.pdf》这本书是Java开发者深入理解JVM(Java Virtual ...而“新建文本文档.txt”可能包含个人笔记或者临时记录,对于JVM学习的具体内容没有直接关系。
### JVM学习札记 #### 一、JVM运行机制 ##### 1、JVM的启动流程 JVM的启动过程主要包括以下步骤: 1. **加载配置文件**:JVM启动时,首先会根据当前路径寻找配置文件`JVM.CFG`,这个文件包含了JVM的一些基础设置...
本文将深入探讨JVM中的访问控制器,并通过分析"java之jvm学习笔记十一(访问控制器) -源码"中的`MySecurityManager`来进一步理解其工作原理。 访问控制器的主要任务是对类、方法和字段的访问进行限制,防止恶意代码...
是不是学习方向迷茫,老衲这有本葵花宝典之JVM学习路线,只要你按这个来学离高级工程师就进一步了,加油。