`
peonyzzdx
  • 浏览: 592004 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java中的堆、栈、常量池

 
阅读更多
Java内存分配:
1. 寄存器:我们在程序中无法控制
2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
3. 堆:存放用new产生的数据
4. 静态域:存放在对象中用static定义的静态成员
5. 常量池:存放常量
6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间
-----------------------------------------------------------------


栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象
分享到:
评论

相关推荐

    java内存分配之常量池,栈,堆1

    在运行时,如果两个字符串的值相等,它们在常量池中可能只有一份拷贝,这是Java字符串常量池复用机制的体现。在Java 6及之前,字符串常量池位于永久代,从Java 7开始移到了堆中。 栈和堆之间的区别在于,栈中的数据...

    java 内存中 堆、栈、常量池、方法区的总结

    常量池的好处是让字符串等数据可以被共享,因此在常量池中的数据不会存在多份副本,它们是唯一的。 接下来是栈,它主要用于方法调用的上下文,每个线程都会拥有一个或多个栈。栈主要用于存储局部变量、操作数栈、...

    Java堆、栈和常量池——内存剖析

    ### Java堆、栈和常量池——内存剖析 #### 寄存器 寄存器作为最快的存储区域之一,由编译器自动管理分配与回收,它位于CPU内,用于存储临时变量,例如局部变量和一些操作数。由于寄存器的数量有限且由编译器自动...

    Java堆,栈和常量池详解

    - 类加载过程中,会把.class文件中的常量池内容复制到方法区的常量池中。 - 方法区的内存回收主要针对常量池。 - **应用场景**: - 字符串字面量的存储。 - 方法、字段的符号引用。 #### 实例解析 下面通过几...

    java堆、栈和常量池

    对于String常量,其值是直接存储在常量池中的。虚拟机为每个被加载的类型维护一个常量池,它是该类型所使用的常量的一个有序集合。 - **结构形式**:在JVM中,常量池是以表的形式存在的。对于String类型,有一张...

    Java中的堆、栈和常量池_.docx

    但对象本身并不存放在栈上,而是存放在堆或者常量池中。栈中的数据生命周期较短,当没有引用指向它时,数据会被自动销毁。 3. 堆(Heap): 堆是Java内存模型的主要部分,用于存储所有通过new关键字创建的对象。堆...

    Java堆、栈和常量池详解

    易混点完美解析

    java堆-栈-堆栈常量池的区别,史上最全总结

    常量池中的字符串可以通过`intern()`方法实现引用共享。 4. 数据类型: Java中有两种数据类型:基本类型和引用类型。基本类型包括8种,它们的大小和生命周期是固定的,因此通常存储在栈中。例如,声明一个`int a = ...

    Java堆、栈和常量池

    `s1`、`s2`和`s3`都引用了常量池中的同一字符串对象,因为它们在编译时已知。而: ```java String ss1 = new String("china"); String ss2 = new String("china"); String ss3 = new String("china"); ``` 虽然它们...

    详解java堆和栈

    1. **直接赋值**:如 `String str = "abc"`,此时会在字符串常量池中查找是否存在 `"abc"` 的字符串对象,如果不存在,则创建;如果存在,则直接使用。 2. **使用new关键字**:如 `String str = new String("abc")`...

    Java 中的堆和栈

    在Java中,内存主要分为两个区域:栈内存和堆内存。这两部分内存各自有不同的特点和用途。 首先,栈内存主要负责存储基础数据类型(如byte, short, int, long, float, double, boolean, char)和对象的引用。当在...

    Java String 字符串常量池解析

    它维护着一个表,总是为池中每个唯一的字符串对象维护一个引用,这意味着它们一直引用着字符串常量池中的对象,因此,在常量池中的这些字符串不会被垃圾收集器回收。 操作字符串常量池的方式有多种,例如使用 `...

    java中的栈(深层了解java虚拟机对对象的内存分布)

    后者利用了字符串常量池(String Constant Pool)的概念,当字符串字面量首次出现时,会在常量池中创建一个新的字符串对象,之后相同的字符串字面量将直接引用池中的已有对象,避免了重复创建相同内容的字符串。...

    Java数据结构之栈与堆

    ` 这样的创建方式实际上是将字符串字面量存储在常量池中,然后str引用这个字面量的位置,这种方式称为字符串常量池优化。而`String str = new String("abc");` 则会在堆中创建一个新的String对象。此外,JDK 5.0以后...

    关于Java栈与堆的思考

    2. 在字符串常量池中查找是否存在值为"abc"的字符串,若不存在则创建一个新的`String`对象,并将字符串值"abc"放入常量池,若存在则直接返回该字符串的引用。 3. 将变量`str`指向这个`String`对象的引用。 这种方式...

    Java中堆和栈的区别

    - `a` 和 `b` 都指向了常量池中的 `"abc"` 字符串。由于它们都引用了同一个字符串对象,所以 `a == b` 返回 `true`。 - `c` 是通过 `new String("abc")` 创建的新对象,尽管它的内容与 `a` 和 `b` 相同,但是它位于...

    string常量池和intern_韩雅茹Java系列2021.pdf

    在Java中,字符串是不可变的,可以共享运行时实例创建的全局字符串常量池中。字符串常量池维护一个引用表,每个唯一的字符串对象都有一个对应的引用。这样,字符串常量池中的字符串不会被垃圾收集器回收。 字符串...

    Java中堆与栈的区别[参考].pdf

    `时,Java会在栈中创建`str`引用,然后在字符串常量池中查找或创建值为"abc"的字符串。如果常量池中已有该字符串,那么`str`将指向该字符串的引用;如果没有,将创建新的字符串对象并放入常量池,然后`str`指向这个...

    java中堆与栈的区别

    这是因为JVM优化了字符串常量池,避免重复创建相同的字符串对象。 - **使用 new 创建对象** ```java String str1 = new String("abc"); String str2 = new String("abc"); ``` 使用 `new` 关键字创建的字符...

Global site tag (gtag.js) - Google Analytics