zoukankan      html  css  js  c++  java
  • 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")创建了几个对象?

    答曰:一个或两个。

  • 相关阅读:
    CDR
    xshell鼠标文本设置
    .NET多线程学习之龟兔赛跑
    js传“+”或“&”到后台变空值的问题
    Java递归读取文件夹下所有文档
    破解Myeclipse10找不到Commonplugins文件夹
    Java下载文件
    根据给定日期判断上一旬的开始结束日期
    查看Tomcat内存并调整Tomcat内存
    Could not parse mapping document from input stream
  • 原文地址:https://www.cnblogs.com/the-wang/p/6915073.html
Copyright © 2011-2022 走看看