栈:
1 基础数据类型 byte short int long float double char boolean
2 方法的形式参数,方法调用完后从栈空间回收
3 引用对象的地址,引用完后,栈空间地址立即被回收,堆空间等待GC
a) 栈内的数据线程之间独立
b) 具体细分为:
b.1) 基本类型变量区
b.2) 执行环境上下文
b.3) 操作指令区
堆
1 this
2 new出来的对象
3 数组
a) jvm只有一个堆区,并被所有线程共享。
方法区域(又叫 静态区)
1 字符串常量
2 static
3 所有的class
a) 被所有线程共享, 其内存放程序中永远唯一的元素,eg: static class
案例分析:
public class AppMain {// 运行时 jvm把类信息加入方法区 /** * @param args */ public static void main(String[] args) {// main方法放入方法区 Sample test1 = new Sample("hello"); // test1是引用 放入栈中 new Sample("hello")对象放入堆中 test1.printName(); } } class Sample { // 运行时 jvm把 类信息放入方法区 private String name; // new Sample()后, name 引用放入栈 name对象放入堆 public Sample(String name){ this.name = name; } public void printName(){ // 方法本身放入方法区 System.out.println(name); } }
执行分析:
Sample test1 = new Sample("hello"); test1.printName(); 0 知识前导: jvm每个线程都拥有一个方法调用栈,用于跟踪线程中运行的一系列方法调用过程, 栈中的每个元素成为栈帧,线程调用每个方法时会将方法栈压入一个新帧, 帧里面存放方法参数,局部变量,运算过程产生的临时数据 1 jvm去方法区寻Sample类信息 2 寻找不到,jvm使用classloader加载Sample类信息进入内存方法区 3 在堆内存中创建Sample对象,并持有方法区中Sample类的类型信息的引用 4 test1添加到执行main()方法的主线程java调用栈中,指向堆空间中的内存对象 5 执行test1.printName()时,jvm根据test1定位到堆空间的Sample实例,在根据 Sample实例在方法区持有的引用,定位到方法区Sample类型信息,获得printName() 字节码,执行此方法执行,打印出结果。
看另一个案例图,再次了解下 各个区域存放数据的位置:
相关推荐
Thread Dump 是非常有用 Java应用问题的工具。每一个 Java 虚拟机 都有及时生成所有线程在某...照,及JVM 中所有 Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名 及所执行的方法,如果可能的话还有源代码的行数。
IBM java dump 文件分析工具,分析java堆栈信息
JVM堆栈性能分析pdfJVM堆栈性能分析pdfJVM堆栈性能分析pdf
第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行...
Java中的JVM基础-数据类型和堆栈_.docx
自己总结的jvm中方法区的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者
学习 09 方法区, 记录方法区相关知识,重绘图示和 PPT。 文章包括栈、堆和方法区交互、方法区基本概念、方法区的演进、方法区的内部结构、方法区垃圾回收等相关内容。
JVM优化方法
在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以...
visualvm监控jvm及远程jvm监控方法
课程简介: 目前,Java是最为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。...介绍JVM的字节码以及反汇编方法,同时介绍JIT相关的参数和应用。
当前,以Hadoop、Spark为...这些大数据处理框架采用分布式架构,使用Java、Scala等面向对象语言编写,在集群节点上以Java虚拟机(JVM)为运行时环境执行计算任务,因此依赖JVM的自动内存管理机制来分配和回收数据对象.
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候创建,在线程退出的时候销毁。
JVM介绍入门到深入,通过全面了解JVM组成底层工作原理以及数据结构,在今后JVM深入分析中全面提升运行性能
jvm 详细介绍,了解jvm各个组成部分和功能
JVM内存模型及方法区
JVM内存状况查看方法和分析工具,值得借鉴
一、JVM概述 二、JVM的体系结构 三、JVM运行时数据区 3.1 PC寄存器 3.2 JVM栈 3.3 堆(Heap) 3.4 方法区域 3.5 运行时常量池 3.6本地方法堆栈 四、Jvm堆 五、Jvm调优
JVM指令操作解析及指南手册.pdf
从JVM内存管理的角度谈谈静态方法和静态属性