`
wu_quanyin
  • 浏览: 209340 次
  • 性别: Icon_minigender_1
  • 来自: 福建省
社区版块
存档分类
最新评论

JVM内存分析

    博客分类:
  • J2SE
阅读更多

一,jvm核心编程中的内存分析

 

 

 

二,对其功能大概分析

 

 

三,一个对象的调用过程

 

 

四,一个数组的调用过程

五,方法区内存

 

问题:

参照本人以前对jvm内存的了解http://wuquanyin1011.iteye.com/admin/blogs/574971

看了这些之后,仍旧对内存有很多不懂的地方,我的理解,当一个主线程启动,创建了一个属于自己的栈内存,之后继续运行有创建局部变量(局部变量的值存放在操作数栈当中)与创建对象(对象引用在在栈中,对象存放在堆内存中(存放的是怎么)),接下来就对对象进行操作,在操作的过程,需要的信息从方法区中获得.

 

1,那还有全局变量放在哪里

2,常量放在哪里(不是应该放在rom内存中吗?)

3,静态变量放在哪里(怎样识别类型变量与对象无关)

........不明白.

走过的,路过的对本人的问题有见解的,请多多指教 ....

 

 

 

 

分享到:
评论
14 楼 wupuyuan 2011-09-05  
starsea 写道
1.放在堆里
2.常量池
3.方法区里


1和2我觉得都是在堆里,LZ可以想下现在GC的模型,1个永生带2个年轻带,常量这个是放在永生带里的。无论是全局变量还是方法中生成的变量都是在年轻带,对于一个类来说,可能是全局变量,对于调用这个类的对象来说,还是个临时的。所以全局局部都是相对的。

3.静态的东西我觉得都是在方法区,毕竟加载的类都放在方法区。
欢迎LZ去我空间拍砖,wupuyuan.itieye.com
13 楼 niveko 2010-07-07  
引用

希望高人给我答案,根据JVM的SPEC,每个线程有一个堆栈,线程之间共享堆。而堆保存的是数组类型或者对象类型。
那么对于基础类型的共享变量比如volatile除了本线程的一份外,主存的部分到底是分配在哪里呢?是否存在共享堆栈呢


堆栈是分开的,每个线程在执行方法的时候都有创建一个该方法的栈空间,里面保存的就是当前线程能访问到的数据。堆里面保存的数据才是所有线程都能访问的数据,它是通过new关键字来创建的。同样对于类里面的变量它也是在new该类的时候在堆里面给它分配了空间的,所以它是所有线程都可以访问的。而volatile关键字是指线程在访问该变量的时候会把线程上的变量值跟主内存上的变量值同步,这样多个线程访问和修改该变量值时相当于是一个值,不过在高并发的情况下还是会出现并发的错误。
12 楼 yangyi 2010-07-07  
希望高人给我答案,根据JVM的SPEC,每个线程有一个堆栈,线程之间共享堆。而堆保存的是数组类型或者对象类型。
那么对于基础类型的共享变量比如volatile除了本线程的一份外,主存的部分到底是分配在哪里呢?是否存在共享堆栈呢
11 楼 xcc258 2010-07-07  
好帖啊。。。我上回去面试的时候就问我内存空间怎么分配的。。
10 楼 asst2003 2010-07-07  
全局变量包含在类对象中,因为所有的对象都在堆上生成,所以全局变量是随对象放在堆上的。
但,方法中的局部变量就不一样了,它们被放在方法栈的栈帧中(注意,如果在方法中生成对象,该对象一样在堆中创建,不过引用该对象的引用变量是放在栈帧中的)

所有的对象都是在堆上创建(Class对象除外),即使是在方法中创建的对象也是这样。

每一个线程都有自己独立的栈和程序记数器,所有线程都共享方法区和堆!

静态变量放在方法区中。每个类都有一个对应的Class对象,静态变量放在它所属的类的Class对象中。Class对象放在方法区中。也就是说,静态变量也被放在方法区了。

如果静态变量是一个引用变量,它引用某个对象,那么这个对象仍然生成在堆上,只不过这个引用变量随Class对象放在方法区。

9 楼 hatedance 2010-07-07  
wu_quanyin 写道
joehe 写道
可惜啊,知道了又如何,就是自己开发不出来

呵呵,,,如果在技术中研究怎么都要开发怎么,那还得了。

纵然开发一个成熟的产品难,但学会其原理,做一个简单的原型却是可行的。
8 楼 wu_quanyin 2010-07-07  
joehe 写道
可惜啊,知道了又如何,就是自己开发不出来

呵呵,,,如果在技术中研究怎么都要开发怎么,那还得了。
7 楼 wu_quanyin 2010-07-07  
hatedance 写道
你说的都不是java层面的,而是c层面的。所以只看java源码是不涉及这些知识的。
lz在研究jvm的c源码么?

没有,想对jvm的大概操作有所了解。只有这样之后,才能知道何时用静态的,何时用全局的,,哪个好处更多。。
6 楼 niumd 2010-07-07  
楼主读<<深入java虚拟机>>,不理解的地方请教下,钻研精神可嘉;
5 楼 joehe 2010-07-07  
可惜啊,知道了又如何,就是自己开发不出来
4 楼 hatedance 2010-07-07  
你说的都不是java层面的,而是c层面的。所以只看java源码是不涉及这些知识的。
lz在研究jvm的c源码么?
3 楼 shuiguozheng 2010-07-07  
菜鸟飘过。。。
2 楼 flyfan 2010-07-07  
收~藏~了,有空要细看
1 楼 starsea 2010-07-07  
1.放在堆里
2.常量池
3.方法区里

相关推荐

    mat(mac)---jvm内存分析工具

    总之,MAT作为一款强大的JVM内存分析工具,对于优化Java应用的内存使用,提升应用性能,尤其是对于Mac OS X平台的开发者来说,是不可或缺的利器。通过熟练掌握MAT的使用,开发者可以更有效地管理和优化应用程序的...

    jvm内存分析工具mat安装包

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的JVM内存分析工具,尤其适用于诊断Java应用程序的内存泄漏问题。在Java开发过程中,内存溢出(Out Of Memory)问题常常会导致程序异常终止,而MAT就是解决这类...

    jvm 内存分析文档

    【Jvm 内存分析文档】 Java 虚拟机(JVM)是Java程序的核心运行环境,它负责管理和执行字节码。JVM内存管理主要包括内存结构、内存分配以及垃圾回收(GC)等方面。了解这些知识对于优化Java应用程序的性能至关重要...

    JVM 内存分析

    标题 "JVM 内存分析" 涉及到的是Java虚拟机(JVM)的...总之,JVM内存分析是Java开发中的重要课题,涉及到内存分配、垃圾回收、性能优化等多个方面,通过学习和实践,开发者可以更好地理解和解决内存相关的性能问题。

    idea插件JVM内存工具JProfiler11

    IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...

    jvm内存分析工具mat

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具。它主要用于诊断Java应用程序的内存泄漏问题,帮助开发者理解内存消耗情况,优化内存配置,从而提升应用性能。MAT以其易用性和...

    ibm HeapAnalyzer JVM内存分析工具 ha457.jar下载

    IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专为诊断和解决Java应用程序的内存泄漏问题而设计。这个工具能够帮助开发者深入理解Java应用程序的内存使用情况,从而优化性能并防止由于内存泄漏导致...

    (二)MATJVM 内存分析工具.MAT JVM 内存分析工具.MAT JVM 内存分析工具.

    MAT JVM内存分析工具可以帮助开发者深入理解Java虚拟机(JVM)的内存管理机制,通过分析堆内存快照来识别内存消耗异常的情况。 首先,MAT提供了丰富的视图来帮助用户查看内存状态,例如“概述”视图可以快速了解堆...

    ha456.jar(IBMHeapAnalyzer)JVM内存分析工具

    【ha456.jar(IBMHeapAnalyzer)JVM内存分析工具】是一款由IBM开发的专业工具,主要用于诊断Java虚拟机(JVM)的内存问题。它能够解析和分析JVM生成的内存转储文件(通常称为heap dump或hprof文件),帮助开发者识别...

    JVM内存溢出问题解析

    JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...

    MAT JVM 内存分析工具.

    MAT JVM内存分析工具有以下几个核心功能和知识点: 1. **快照分析**:用户可以创建JVM进程的内存快照,这包含了运行时的所有对象和它们之间的引用关系。快照可以保存以便后续分析,这对于远程服务器或不再运行的...

    (三)MATJVM 内存分析工具.MAT JVM 内存分析工具

    在进行MAT JVM内存分析时,我们首先要理解JVM内存的基本结构,它主要分为堆内存(Heap)和非堆内存(Non-Heap)。堆内存又细分为新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent ...

    jvm内存分析-jdk17-memoryAnalyer

    在"jvm内存分析-jdk17-memoryAnalyzer"这个主题中,我们将深入探讨JVM内存结构,特别是针对Java 17版本的内存配置和分析工具Memory Analyzer (MAT)。 JVM内存主要分为以下几个区域: 1. **堆内存**:这是Java程序...

    某硅谷jvm内存分析优化教程

    某硅谷jvm内存分析优化教程,链接失效,请私聊我。某硅谷jvm内存分析优化教程,链接失效,请私聊我。某硅谷jvm内存分析优化教程,链接失效,请私聊我。

    JVM内存空间分配笔记

    ### JVM内存空间分配详解 #### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分...

    JVM内存分析工具.7z

    IBM提供的ga456、ha456与jca457工具就是这样的利器,它们可以帮助开发者深入理解JVM内存的使用情况,找出内存泄漏或过度消耗内存的问题。 首先,ga456工具全称为"Garbage Collector and Memory Analyzer",它是一个...

    JVM内存管理白皮书

    在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...

    java获得jvm内存大小

    本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并解析给定代码片段中的关键概念。 ### JVM内存模型 在讨论如何获取JVM内存大小之前,首先需要理解JVM的内存布局。JVM内存...

    jvm内存监控工具使用

    ### JVM内存监控工具详解 #### 引言 Java Virtual Machine (JVM) 是运行 Java 应用程序的核心组件,其性能直接影响应用的响应速度和稳定性。JVM 的内存管理是性能优化的关键,尤其是在高并发环境下,合理的内存...

Global site tag (gtag.js) - Google Analytics