首页  >  文章  >  Java  >  15.Java 基础 - 堆&栈

15.Java 基础 - 堆&栈

黄舟
黄舟原创
2017-02-27 10:55:591259浏览

基本概念

在 Java 中,共有六个不同的地方可以存储数据。


1.寄存器

即 register,这是最快的存储区,因为它位于处理器内部,存取速度非常快,程序不可控制。


2.栈

即 stack,栈位于通用 RAM 中。它是的存储速度仅次于寄存器。针。

它具有以下特点:

  • 通过栈指针来控制内存。若向下移动,则分配新的内存;若向上移动,则释放那些内存。因此创建程序时候,Java 编译器必须知道存储在栈内所有数据的确切大小和生命周期,因为它必须生成 相应的代码,以便上下移动栈指

  • 栈内存归属于单个线程。每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。

  • 栈内数据共享。

  • 存放基本类型的变量数据、对象或数组的引用。但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。

  • 具有 FILO 先进后出的规则。


3.堆

即 heap,堆是一种通用性的内存池(也存在于 RAM 中),用于存放所有的 Java 对象。通俗来讲,就是存放所有 new 出来的对象。

堆不同于栈的是,它在分配存储时有很大的灵活性,但同时需要花费更长的时间。因为:

  • 编译器不需要知道要从堆里分配多少存储区域。

  • 编译器也不必知道存储的数据在堆里存活多长时间。

当你需要创建一个对象的时候,只需要写一行简单的代码;当执行这行代码时,会自动在堆里进行存储分配。


4.方法区

用来存放已被加载的类的信息、常量、静态变量、即时编译器编译后的代码。


5.常量池

常量池是方法区的一部分。

存放字符串常量和基本类型变量,比如String str=”www”。实际上”www”是在常量池里边。

Java的 8 种基本类型(Byte、Short、Integer、Long、Character、 Boolean、Float、Double) 除Float、Double 以外, 其它六种都实现了常量池,但是它们只在(-128 <= 值 <=127)才使用常量池。超出这个范围则不会使用常量池所以会直接在堆内存中创建对象。

基本概念

在 Java 中,共有六个不同的地方可以存储数据。


1.寄存器

即 register,这是最快的存储区,因为它位于处理器内部,存取速度非常快,程序不可控制。


2.栈

即 stack,栈位于通用 RAM 中。它是的存储速度仅次于寄存器。针。

它具有以下特点:

  • 通过栈指针来控制内存。若向下移动,则分配新的内存;若向上移动,则释放那些内存。因此创建程序时候,Java 编译器必须知道存储在栈内所有数据的确切大小和生命周期,因为它必须生成 相应的代码,以便上下移动栈指

  • 栈内存归属于单个线程。每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。

  • 栈内数据共享。

  • 存放基本类型的变量数据、对象或数组的引用。但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。

  • 具有 FILO 先进后出的规则。


3.堆

即 heap,堆是一种通用性的内存池(也存在于 RAM 中),用于存放所有的 Java 对象。通俗来讲,就是存放所有 new 出来的对象。

堆不同于栈的是,它在分配存储时有很大的灵活性,但同时需要花费更长的时间。因为:

  • 编译器不需要知道要从堆里分配多少存储区域。

  • 编译器也不必知道存储的数据在堆里存活多长时间。

当你需要创建一个对象的时候,只需要写一行简单的代码;当执行这行代码时,会自动在堆里进行存储分配。


4.方法区

用来存放已被加载的类的信息、常量、静态变量、即时编译器编译后的代码。


5.常量池

常量池是方法区的一部分。

存放字符串常量和基本类型变量,比如String str=”www”。实际上”www”是在常量池里边。

Java的 8 种基本类型(Byte、Short、Integer、Long、Character、 Boolean、Float、Double) 除Float、Double 以外, 其它六种都实现了常量池,但是它们只在(-128 <= 值 <=127)才使用常量池。超出这个范围则不会使用常量池所以会直接在堆内存中创建对象。

 以上就是15.Java 基础 - 堆&栈的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn