public class T { // 常量池中分配 String final private String a = "aa"; // 常量池中分配 final int ee = 22; // 堆中分配 int ff = 20; // 超过一定的范围 在常量池中 int ff2 = 200000; // 堆中分配 Integer i = 4; // 超过一定的范围 在常量池中 Integer i2 = 444444; // 堆中分配 final Integer ii = 544; // 超过一定的范围 在常量池中 final Integer ii2 = 55555; public void t() { // 常量池中分配 String final String b = "bb"; // 常量池中分配 final String c = "cc"; // 栈中分配 int f = 1; // 超过一定的范围 在常量池中 int f1 = 111111; // 栈中分配 final int f2 = 33; // 超过一定的范围 在常量池中 final int f3 = 33333; } }
const #2 = Asciz T; const #3 = class #4; // java/lang/Object const #4 = Asciz java/lang/Object; const #5 = Asciz a; const #6 = Asciz Ljava/lang/String;; const #7 = Asciz ee; const #8 = Asciz I; const #9 = Asciz ConstantValue; const #10 = int 22; const #11 = Asciz ff; const #12 = Asciz ff2; const #13 = Asciz i; const #14 = Asciz Ljava/lang/Integer;; const #15 = Asciz i2; const #16 = Asciz ii; const #17 = Asciz ii2; const #18 = Asciz <init>; const #19 = Asciz ()V; const #20 = Asciz Code; const #21 = Method #3.#22; // java/lang/Object."<init>":()V const #22 = NameAndType #18:#19;// "<init>":()V const #23 = String #24; // aa const #24 = Asciz aa; const #25 = Field #1.#26; // T.a:Ljava/lang/String; const #26 = NameAndType #5:#6;// a:Ljava/lang/String; const #27 = Field #1.#28; // T.ee:I const #28 = NameAndType #7:#8;// ee:I const #29 = Field #1.#30; // T.ff:I const #30 = NameAndType #11:#8;// ff:I const #31 = int 200000; const #32 = Field #1.#33; // T.ff2:I const #33 = NameAndType #12:#8;// ff2:I const #34 = Method #35.#37; // java/lang/Integer.valueOf:(I)L ang/Integer; const #35 = class #36; // java/lang/Integer const #36 = Asciz java/lang/Integer; const #37 = NameAndType #38:#39;// valueOf:(I)Ljava/lang/Integer; const #38 = Asciz valueOf; const #39 = Asciz (I)Ljava/lang/Integer;; const #40 = Field #1.#41; // T.i:Ljava/lang/Integer; const #41 = NameAndType #13:#14;// i:Ljava/lang/Integer; const #42 = int 444444; const #43 = Field #1.#44; // T.i2:Ljava/lang/Integer; const #44 = NameAndType #15:#14;// i2:Ljava/lang/Integer; const #45 = Field #1.#46; // T.ii:Ljava/lang/Integer; const #46 = NameAndType #16:#14;// ii:Ljava/lang/Integer; const #47 = int 55555; const #48 = Field #1.#49; // T.ii2:Ljava/lang/Integer; const #49 = NameAndType #17:#14;// ii2:Ljava/lang/Integer; const #50 = Asciz LineNumberTable; const #51 = Asciz LocalVariableTable; const #52 = Asciz this; const #53 = Asciz LT;; const #54 = Asciz t; const #55 = String #56; // bb const #56 = Asciz bb; const #57 = String #58; // cc const #58 = Asciz cc; const #59 = int 111111; const #60 = int 33333; const #61 = Asciz b; const #62 = Asciz c; const #63 = Asciz f; const #64 = Asciz f1; const #65 = Asciz f2; const #66 = Asciz f3; const #67 = Asciz SourceFile; const #68 = Asciz T.java; { final int ee; Constant value: int 22 int ff; int ff2; java.lang.Integer i; java.lang.Integer i2; final java.lang.Integer ii; final java.lang.Integer ii2; public T(); Code: Stack=2, Locals=1, Args_size=1 0: aload_0 1: invokespecial #21; //Method java/lang/Object."<init>":()V 4: aload_0 5: ldc #23; //String aa 7: putfield #25; //Field a:Ljava/lang/String; 10: aload_0 11: bipush 22 13: putfield #27; //Field ee:I 16: aload_0 17: bipush 20 19: putfield #29; //Field ff:I 22: aload_0 23: ldc #31; //int 200000 25: putfield #32; //Field ff2:I 28: aload_0 29: iconst_4 30: invokestatic #34; //Method java/lang/Integer.valueOf:(I)Ljava/l teger; 33: putfield #40; //Field i:Ljava/lang/Integer; 36: aload_0 37: ldc #42; //int 444444 39: invokestatic #34; //Method java/lang/Integer.valueOf:(I)Ljava/l teger; 42: putfield #43; //Field i2:Ljava/lang/Integer; 45: aload_0 46: sipush 544 49: invokestatic #34; //Method java/lang/Integer.valueOf:(I)Ljava/l teger; 52: putfield #45; //Field ii:Ljava/lang/Integer; 55: aload_0 56: ldc #47; //int 55555 58: invokestatic #34; //Method java/lang/Integer.valueOf:(I)Ljava/l teger; 61: putfield #48; //Field ii2:Ljava/lang/Integer; 64: return LineNumberTable: line 1: 0 line 4: 4 line 7: 10 line 9: 16 line 11: 22 line 15: 28 line 17: 36 line 19: 45 line 22: 55 line 1: 64 LocalVariableTable: Start Length Slot Name Signature 0 65 0 this LT; public void t(); Code: Stack=1, Locals=7, Args_size=1 0: ldc #55; //String bb 2: astore_1 3: ldc #57; //String cc 5: astore_2 6: iconst_1 7: istore_3 8: ldc #59; //int 111111 10: istore 4 12: bipush 33 14: istore 5 16: ldc #60; //int 33333 18: istore 6 20: return LineNumberTable: line 26: 0 line 28: 3 line 30: 6 line 32: 8 line 34: 12 line 36: 16 line 37: 20 LocalVariableTable: Start Length Slot Name Signature 0 21 0 this LT; 3 18 1 b Ljava/lang/String; 6 15 2 c Ljava/lang/String; 8 13 3 f I 12 9 4 f1 I 16 5 5 f2 I 20 1 6 f3 I }
相关推荐
### JVM内存空间分配详解 #### 一、JVM内存模型概览 ...综上所述,理解JVM内存分配机制对于Java开发者来说至关重要,这不仅有助于编写高效、稳定的代码,还能在遇到性能瓶颈时快速定位问题并进行优化。
本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个关键区域:方法区(Method Area)、堆(Heap)、栈(Stack)、程序计数器(PC ...
Java JVM(Java虚拟机)内存分配与调优是Java开发者必须掌握的重要技能,它涉及到程序的性能优化和稳定性。在Java应用中,JVM扮演着至关重要的角色,它负责解析字节码、管理内存以及执行线程等。本文将深入探讨JVM...
JVM 内存分配与垃圾回收详解 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,它提供了一个平台独立的方式来执行 Java 字节码。JVM 内存分配与垃圾回收是 JVM 中两个非常重要的概念,本文将对 JVM 内存分配与垃圾...
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,但缺点是要在运行时动态分配内存,存取速度较慢。 JVM 如何设置虚拟内存?在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候...
通过命令行参数,我们可以精细地控制JVM的内存分配,以适应不同的应用场景。以下是一些关键参数的解读与实践指南: 1. **-Xms**:设置JVM初始堆内存大小。保持-Xms和-Xmx相等,有助于减少GC停顿时间,尤其在Server...
### JVM初始分配的内存知识点详解 #### 一、概述 JVM(Java Virtual Machine)是运行Java程序的基础环境,它负责将编译后的字节码转换成机器指令并执行。为了确保Java应用能够高效地运行,正确配置JVM的内存参数至...
JVM内存管理主要包括内存结构、内存分配以及垃圾回收(GC)等方面。了解这些知识对于优化Java应用程序的性能至关重要。 ### 1. JVM内存结构 #### 1.1.1 JVM内存概述 JVM内存分为几个关键区域,每个区域都有特定的...
深入理解JVM内存分配、垃圾收集(Garbage Collection, GC)原理以及垃圾收集器的工作方式对于优化程序性能至关重要。 首先,我们要了解JVM内存结构。在Java中,内存主要分为以下几个区域: 1. **堆内存(Heap)**...
内存分配指的是当应用程序创建对象时,JVM会为对象分配内存。这个过程对Java程序员来说是透明的,通常不需要干预。对象通常在Java堆的新生代的Eden区创建,当Eden区空间不足时,会触发一次Minor GC(年轻代垃圾收集...
《Jvm内存分配(7)》这篇博文主要探讨的是Java虚拟机(JVM)中的内存管理,特别是关于内存分配的相关知识。在Java程序运行时,JVM会为不同部分的内存区域进行分配,以保证程序的正常执行。以下是对这一主题的详细...
通过动态地调整`-Xms`和`-Xmx`参数,可以在运行时根据实际需求优化内存分配,从而提高程序的性能和稳定性。此外,定期检查和分析`heapSize`、`heapMaxSize`和`heapFreeSize`等指标,可以帮助开发者及时发现潜在的...
### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成...通过合理的内存分配策略和恰当的 GC 调整,可以显著提高应用程序的性能和稳定性。
本教程将涵盖JVM内存模型、内存分配以及优化策略。 一、JVM内存模型 1. 堆内存:堆是所有线程共享的一块内存区域,主要用于存储对象实例。Java中的动态内存分配主要在堆上进行,垃圾收集器也会对堆进行管理,进行...
Java虚拟机(JVM)是Java程序运行的基础,它的内存结构是理解Java应用程序性能和内存管理的关键。在“jvm的内存结构图的ppt模型分析”中,我们将深入探讨JVM内存的不同区域及其功能。 首先,JVM内存可以分为堆内存...
JVM内存优化的目的是尽可能让对象都在新生代里分配和回收,避免频繁对老年代进行垃圾回收。以下是一些JVM内存优化的技巧: 1. 设置适当的堆大小:根据实际项目情况,设置适当的堆大小可以避免频繁的垃圾回收。 2. ...
由于 JVM 栈是线程私有的,因此其在内存分配上非常高效,并且当线程运行完毕后,这些内存也就被自动回收。当 JVM 栈的空间不足时,会抛出 StackOverflowError 的错误,在 Sun JDK 中可以通过-Xss 来指定栈的大小。 ...
本文将详细解析JVM的内存结构、内存分配策略以及相关的配置参数。 1. **JVM内存结构** JVM内存主要分为以下几个区域: - **方法区(Method Area)**:这是所有线程共享的区域,存储类信息、常量、静态变量、...
### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...