• java笔记之变量的存储方式


    1.java变量存储域

    java变量的存储区域主要放在以下几个地方:

    (1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定。

    (2)栈:存放关于基本类型数据和对象的引用,但是对象本身并不在栈里,(通过new出来的)对象放在堆里或者常量池中(字符串的常量对象就放在常量池中)。

    (3)堆:用于存放new出来的对象。

    (4)常量池:存放字符串常量和基本类型数据的常量(通过 public static final修饰)。

    (5)静态域:用于存放静态的成员(static)。

    (6)非RAM存储:比如硬盘等。

    在这里主要说说堆、栈和常量池。存放在栈里的数据的大小和生命周期是确定的,当所引用的数据消失时,该栈数据就会被JVM回收。存放在堆里的数据具有不确定性,当满足一定条件时,会被JVM的垃圾回收机制回收。

    2.例子

    比如以下代码:

    1 String s1 = "example";
    2 String s2 = "example";
    3 String s3 = new String("example");
    4 String s4 = new String("example");

    对于s1、s2将会存放在常量池中,对于s3(new出来的对象),会先去常量池中查找有没有"example"的对象,如果有,就会在堆里创建一个"example"的拷贝对象;如果没有,就会先在常量池中创建一个"example"的对象,然后再在堆里创建拷贝对象。

    所以有道题:String str = new String("abc")创建了几个对象?

    答曰:一个或两个。

  • 相关阅读:
    pixijs设置层级的方法
    6.Linux CPU实时监控mpstat命令详解
    5.Linux vmstat命令详解
    4.Linux iostat命令详解
    3.linux top 命令详解
    2.linux sort 命令详解
    1.Linux vim命令详解
    0.Linux命令参考博客
    洛谷 U140956 新漂亮国大选
    CF457C Elections
  • 原文地址:https://www.cnblogs.com/yuxiuyan/p/5656447.html
Copyright © 2020-2023  润新知