String常量池问题 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs1
本版专家分:0
String常量池问题的几个例子
String<em>常量池</em><em>问题</em>的几个例子 示例1: Java代码   String s0="kvill";   String s1="kvill";   String s2="kv" + "ill";   System.out.println( s0==s1 );   System.out.println( s0==s2 );   结果为:   true   true 分析:首先,我
字符串常量池深入解析
字符串<em>常量池</em> 字符串<em>常量池</em> 概述 一、Java中两种创建字符串对象的方式的分析。 二、Intern的实现原理(JDK1.8) 三、JDK1.7的Intern的执行 四:几种特殊的情况的代码 参考的部分文章 概述   在分析字符串<em>常量池</em>之前,先来分析一下java的内存区域,然后再各种的情况分析一下各种情况下的情况; 在《深入理解java虚拟机》这本书上是这样写的:对于H...
String 对象内存分配(常量池和堆的分配)
     在一次面试中,面试官问了一个关于字符串对象创建<em>问题</em>,<em>问题</em>内容如下: 场景一: String s1 = &quot;123&quot; + &quot;456&quot;; 场景二: String s1 = &quot;123&quot;; String s2 = s1 + &quot;456&quot;;   在这两个场景下,分别会创建多少个字符串对象?当时其实并没太了解在 JVM 中,字符串对象的内存分配具体策略,只了解在 JVM 中有一个<em>常量池</em>,<em>常量池</em>...
java string 常量池问题
字符串相加,只要有变量参与的,那么就不会使用<em>常量池</em>里的字符串引用。如果是String s3 = &quot;ab&quot;;String s5 = &quot;a&quot; + &quot;b&quot;;这种在相加过程中没有变量参与的字符串参加,会使用<em>常量池</em>。所以,s3 == s5的值是true。反正别的不多说,具体看程序,看了下面的,那一切都懂了(基于jdk1.8)                String s1 = &quot;a&quot;; String s...
Java常量池的面试题 Integer Cache
一道很让人头疼的Java面试题。好像也不太像面向应届生的题目,不过里边一些了解一下还是不错的。 今天My partner问我一个让他头疼的Java question,求输出结果: /**  *   * @author DreamSea 2011-11-19  */ public class IntegerTest {     public static void m
String之常量池小结
String之<em>常量池</em>小结
JVM运行时常量池与String池
内容原创,欢迎指正,转载注明http://slevin1994.iteye.com/blog/2415778 [b][size=large]字面常量[/size][/b] [quote=&quot;《Java语言规范 基于Java SE 8》3.10节&quot;]字面常量是类型为简单类型,String类型和空类型的**值**在源程序中的表示。包括整数字面常量,浮点数字面常量,布尔字面常量,字符字面常量,字符...
JVM常量池与String类深入理解
深入理解java String与JVM<em>常量池</em> 创建一个String有二种形式 String a = "abc"; String b = new String("abc");
java中String之常量池与对象
最近一直在研究源码,今天把String类给看完了,基本上是把源码看了一遍(JDK1.8),所获得的收获还是可以的,但是看了归看了,俗话说的好好记性不如烂笔头,今天就写一写自己的心得体会。首先在String类型在开发项目中用的是比较多的,大多数的都是在比较是否相等判断之类的,在String中重写了equals方法,先是比较地址,然后比较是否是是同一类型的对象,如果是则比较length,如果lengt...
String放入运行时常量池的时机与String.intern方法解惑
运行时<em>常量池</em>概述 Java运行时<em>常量池</em>中主要存放两大类常量:字面量和符号引用。字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为final的常量值等。 而符号引用则属于编译原理方面的概念,包括了下面三类常量: - 类和接口的全限定名(包名+类名) - 字段的名称和描述符 - 方法的名称和描述符 运行时<em>常量池</em>位置 运行时<em>常量池</em>在JDK1.6及之前版本的JVM中
字符串常量池(String Constant Pool)深入解析
字符串<em>常量池</em>(String Constant Pool) 1:概述 字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化: 使用字符串<em>常量池</em>:每当我们创建字符串<em>常量池</em>时,JVM会首先检查字符串<em>常量池</em>,如果该字符串已经存在<em>常量池</em>中,那么久直接返回<em>常量池</em>中的实例引用,如果字符串不存在<em>常量池</em>中,就会实例化该
java-String常量池的知识点你知道多少?-结合jdk版本变更
String <em>常量池</em>知识点 总结 三大<em>问题</em>总结: 1.String<em>常量池</em>位置在哪? 2.String<em>常量池</em>里存的是对象还是引用? 3.String类中的==比较以及intern()方法原理?   回:1.String<em>常量池</em>位置在哪? 在jdk6版本,String<em>常量池</em>是在方法区中的运行时<em>常量池</em>。   三种情况: java7之前,方法区位于永久代(PermGen),永久代和堆相互...
java 堆栈常量池,String创建图解(内存分配,区)
       说到java中堆、栈和<em>常量池</em>,首先还是看看他们各自存放的数据类型吧!  堆:存放所有new出来的对象;栈:存放基本类型的变量数据和对象的应用,对象(new出来的对象)本身并不存在栈中,而是存放在堆中或者<em>常量池</em>中(字符串常量对象存放在<em>常量池</em>中);<em>常量池</em>:存放基本类型常量和字符串常量。 对于栈和<em>常量池</em>中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可...
Java中String对象在堆和常量池中的情况及比较
前言: 本文讨论<em>string</em> 对象分别在字符串常量及堆中的比较 String(jdk1.7) 1.非new出来的String 如果不是new出来的String,如果两个值相等那么返回true: String s = &quot;1&quot;; String s1 = &quot;1&quot;; System.out.println(s == s1); 这样返回的值是true: 可以看出在定义变量s之后只是在<em>常量池</em>中创建值为“1”...
Java进阶——Java中的字符串常量池
字符串<em>常量池</em> JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内存,这段内存被成为字符串<em>常量池</em>(方法区中)。实际上还有整型<em>常量池</em>、浮点型<em>常量池</em>等等。字符串<em>常量池</em>存放的是对象的引用,而不是对象。Java中字符串对象创建有两种形式:字面量形式和创建对象形式。 1、字面量形式 字面量的体现形式String str = &amp;amp;amp;amp;amp;quot;Hello&amp;amp;amp;amp;amp;quot;,简单理解为去字符串<em>常量池</em>中拿对象 当代码中出现字面量...
Java的string常量池及不可变性
1、String<em>常量池</em>     当使用new String(“hello”)时,JVM会先使用<em>常量池</em>来管理“hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中。即new String(“hello”)一共产生了两个字符串对象。 【<em>常量池</em>constant pool】管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类
String类和常量池
String类和<em>常量池</em> 1、 String对象的两种创建方式: String str1 = &quot;abcd&quot;; String str2 = new String(&quot;abcd&quot;); System.out.println(str1==str2);//false 这两种不同的创建方法是有差别的,第一种方式是在<em>常量池</em>中拿对象,第二种方式是直接在堆内存空间创建一个新的对象。 记住:只要使用new方...
String.intern()方法与常量池存入时的疑惑!
环境jdk:1.8今天再看极客学院关于《JVM自动内存管理:内存区域基础概念》 有这么一块没有看懂:public class RuntimeConstantPoolChange { public static void main(String[] args) { // 第一段代码 String str1 = new StringBuilder("极客").ap
java常量池概念,String,Integer等包装类对常量池的应用
在class文件中,“<em>常量池</em>”是最复杂也最值得关注的内容。   Java是一种动态连接的语言,<em>常量池</em>的作用非常重要,<em>常量池</em>中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:   类和接口的全限定名;   字段的名称和描述符;   方法和名称和描述符。   在C语言中,如果
这道关于String的面试题据说80%的人会答错!
很多人都会答错的一道关于String的题目,究竟有什么难度? 今天轻松点,我们一起来看一道关于String的面试题,准确说是改编的面试题! 小白: 庆哥,今天我们要学习什么知识啊? 庆哥: 今天我们就轻松一下,简单来看一道关于String的题目,毕竟等会我还要看沙海呢。 小白: 哈哈,没想到庆哥还追剧啊。 庆哥: 劳逸结合嘛,大脑总是需要休息的啊,看看电视剧休息一下还蛮好的,好了...
JVM-String常量池与运行时常量池
Start with JVM 先分析一波<em>常量池</em>-Constant Pool
Java基础之jdk1.8 JVM内存模型简述,含String常量池简单分析
最近有个机会整理JAVA基础相关知识,整理到JVM内存模型这部分的时候,画了两张图,记载在此,供感兴趣的新手参考。
String的不可变性、以及涉及到的字符串常量池和字符串拼接内部实现的剖析
1.String a="a"+"b"+"c"在内存中创建几个对象? 这个<em>问题</em>涉及到了字符串<em>常量池</em>和字符串拼接 String a="a"+"b"+"c" 通过编译器优化后,得到的效果是 String a="abc" 此时,如果字符串<em>常量池</em>中存在abc,则该语句并不会创建对象,只是讲字符串<em>常量池</em>中的引用返回而已。 如果字符串<em>常量池</em>中不存在abc,则会创建并放入
java中的String详解—-new对象和常量池的概念
原帖:[url]http://www.haohaoblog.com/?p=961[/url] :idea: 自己添加整理备用 :lol: [code=&quot;java&quot;]public class StringTest { public static void main(String[] args) { String a = new String(); St...
String intern方法及常量池理解
 几张图轻松理解String.intern()标签: 编译器 虚拟机 intern <em>常量池</em> 字符串2017年04月12日 20:35:496817人阅读 评论(13) 收藏 举报 分类:-------【Java基础】(5) 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/soonfly/article/details/70147205在翻《深入理解...
结合源码和常量池详解Java中的String
本篇对String结合源码和<em>常量池</em>进行总结String是java中一个常用的引用类型。先看String源码:所以String底层是由char[]数组存储数据的。那么String的最大长度应该是多少呢?由于String底层是char[]数组,所以其允许的长度是固定的, 由于char[]数组的元素是由下标来定位的,而下标的类型为int,所以char最多只能表示2^31 - 1(2G-1),也就是说st...
关于String常量池的理解
首先援引部分博客:http://www.cnblogs.com/kkgreen/archive/2011/08/24/2151450.html上述文章说明String<em>常量池</em>的简单理解;https://blog.csdn.net/guohan_solft/article/details/73655687上面文章说明String<em>常量池</em>优化<em>问题</em>更深入讨论:往往我们再说String<em>常量池</em>的时候我们往往倾向...
字符串常量池、运行时常量池
众所周知,在JVM中栈存放对象的引用和基本类型,堆存放具体的对象和每个对象包含一个与之对应的class信息,方法区存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。关于String<em>常量池</em>、<em>常量池</em>等又让人头大。String str = &quot;abc&quot;; 如此生成的字符串存放在<em>常量池</em>中String str = new String(&quot;abc&quot;); 如此生成的字...
JDK1.8版本java字符串常量池里存的是String对象还是引用?
先下结论:对象!众所周知,JDK1.8版本中,String<em>常量池</em>已经从方法区中的运行时<em>常量池</em>分离到堆中了,那么在堆中的String<em>常量池</em>里存的是String对象还是引用呢?我在网上查了一晚上,各有各的说法,最后索性直接查看API(果然API才是最强大的!!!),废话少说,直接上图:翻译一下,String类的intern()方法:一个初始为空的字符串池,它由类String独自维护。当调用 inter...
Java中的String、StringPool(字符串常量池)
字符串<em>常量池</em>与简单语法String s = "hahahah"; String s2 = "hahahah"; 1->在字符串<em>常量池</em>中查看是否存在内容与"hahahah"相同的字符串对象; 2->若没有,则新创建一个包含该内容的字符串对象,并让引用变量指向该对象。例如,创建字符串s的时候,字符串<em>常量池</em>中没有,则创建一个新对象,并让s指向该对象; 3->若已存在包含该内容的字符串对象,则让字符串引用
JDK1.8关于运行时常量池, 字符串常量池的要点
网上关于jdk 1.8的各种实验,  结论鱼龙混杂 , 很多都相矛盾,网上有的实验也被后人测试出了不同的结果 很多都分辨不了真假, 这里记录一下网络上正确的结论, 欢迎指正! 首先自行区分运行时<em>常量池</em>与Class文件<em>常量池</em>(静态<em>常量池</em>)的概念, JVM内存模型 ,方法区与永久代的区别, 有些在我的其他博客有介绍,  连接在文尾    在JDK1.7之前运行时<em>常量池</em>逻辑包含字符串<em>常量池</em>存放在...
JAVA String类与常量池,堆之间的错综复杂...
由JVM内存管理可知,在方法区中有一块独立的区域,被称之为运行时<em>常量池</em>,在虚拟机启动时,JVM会自动创建,有9种类型的<em>常量池</em>,8大基本类型与String类型。    <em>常量池</em>是存放数据字面量的,比如“abc”,1,5.0,'c',true等等(注:String类的具体值,都是存在<em>常量池</em>中,堆中存的是<em>常量池</em>中的引用;8大基本类型的包装类中,除了Float,Double类意外,都有实现<em>常量池</em>,但是,数
java String常量池与字符串拼接性能优化
----String<em>常量池</em>---- 1.<em>常量池</em>中的对象从哪里来的?String s1="hanhan"; String s2="hanhan"; System.out.println(s1==s2);//true当我们创建String对象采用字面量形式时,JVM首先会对这个字面量进行检查,如果<em>常量池</em>中存放有该字面量,则直接使用,否则创建新的对象并将其引用放入<em>常量池</em>中。String s1="han"
常量池之字符串常量池String.intern()
运行时<em>常量池</em>是方法区(PermGen)的一部分。需要提前了解: 1. JVM内存模型。 2. JAVA对象在JVM中内存分配<em>常量池</em>的好处<em>常量池</em>是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 - Java的自动装箱中其实就使用到了运行时<em>常量池</em>。详见:Java 自动装箱与拆箱的实现原理 - 还有字符串<em>常量池</em>。字符串进入到<em>常量池</em>的两种方法:1. new String()的实例
java 为什么需要常量池
转载自  java 为什么需要<em>常量池</em>java中讲的<em>常量池</em>,通常指的是运行时<em>常量池</em>,它是方法区的一部分,一个jvm实例只有一个运行<em>常量池</em>,各线程间共享该运行<em>常量池</em>。java内存模型中将内存分为堆和栈,其中堆为线程间共享的内存数据区域,栈为线程间私有的内存区域。堆又包括方法区以及非方法区部分,栈包括本地方法栈、虚拟机栈等,如下图所示:为什么需要<em>常量池</em>jvm 在栈帧(frame) 中进行操作数和方法的动...
Java常量池详解--比较蛋疼的面试题(一)
实例一 public class test { public static void main(String[] args) { objPoolTest(); } public static void objPoolTest() { int i = 40; int i0 = 40;
JAVA 常量池与String
提到<em>常量池</em>,一般是指运行时<em>常量池</em>,是方法区的一部分。方法区就是通常说的永久代。那么<em>常量池</em>中会存储那些数据呢?   ①编译期生成的各种字面量和符号引用   ②也有可能将运行期间的常量放入<em>常量池</em> 先看第一种:编译期生成的各种字面量和符号引用,这部分数据经过编译后存在.class文件的‘<em>常量池</em>’中,注意这个所谓的‘<em>常量池</em>’是‘静态<em>常量池</em>’,静态<em>常量池</em>的数据会在类加载后放入运行时<em>常量池</em>。举个
java String类有关静态变量,常量池,引用对象的问题
java-String类的各种小研究今天看到一个面试题,这让我对String类和jvm运行数据有新的了解,题目如下:static String str0="0123456789"; static String str1="0123456789"; String str2=str1.sub<em>string</em>(5); String str3=new String(str2); String str4=new
java_关于字符串类型及常量池
StringBuilder:可变字符串类型 *(字符串:底层是字符数组,及其对数组的操作) 特点: (1)由final修饰 (2)没有重写equals方法 (3)此类型提供的大多数方法都带有返回值 构造器 StringBuilder()构造了一个空的字符串生成器,初始容量为16个字符。 *StringBuilder(String str...
关于常量池和堆的情况
class StringEqualTest { public static void main(String[] args) { String s1 = &quot;Programming&quot;; //在字符串<em>常量池</em>存储&quot;Programming&quot;并返回引用值 String s2 = new String(&quot;Programming&quot;); ...
string字符串常量池在内存中的位置
这里只是举个简单的例子说明字符串<em>常量池</em>在内存中的位置。     闲言少叙,直接上代码。   Java代码   "font-size: large;">import java.util.ArrayList;    public class Test {        public static void main(String[] args) {          Strin
java中关于栈、堆、常量池介绍和关于String类的理解
栈、 <em>常量池</em>、 堆各自存放什么样的数据类型? 栈:存放基本类型的变量数据和对象的引用。像int a = 1;  String str = "hello" ; String str1 = new String("OK") ;  栈中存放的是 a, 1, str, str1。 <em>常量池</em>:存放基本类型常量和字符串常量。 堆:存放所有new出来的对象。 对于栈和<em>常量池</em>中的对象可以共享,对于堆中的对象
String的intern()方法 与运行时常量池(方法区)
String的intern()方法 与运行时<em>常量池</em>(方法区) ​ String.intern()是一个Native方法,作用是:如果字符串<em>常量池</em>存在字符串相等(equals() )的字符串对象,就返回此<em>常量池</em>中的String对象。否则将String对象添加到<em>常量池</em>中,并返回此String对象的引用。 ​ Jdk1.6及其之前的版本,<em>常量池</em>分布在永久带(方法区)中,In...
java 字符串常量池
试题一、String s = new String("abc")创建了几个对象? String s = new String("abc")实际上是"abc"本身就是字符串池中的一个对象,在运行 new String()时,把字符串池的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在字符串池中,一个在堆中。(注:我们假设的是字符串池中默认是没有abc字符
字符串常量池及byte数据常量池
Byte型数据缓冲池Demo1public class BufferPoolDemo { public static void main(String[] args) { Integer i1=127; Integer i2=127; System.out.println(i1==i2); System.out.println(
java基础常见问题解析(四)堆、常量池、方法区栈与队列
堆、<em>常量池</em>、方法区栈与队列 在Java 中,下面关于String 类和StringBuffer 类的描述正确的是哪一个 a. StringBuffer 类的对象调用toString()方法将转化为String 类型 b. 两个类都有append()方法 c. 可以直接将字符串”test” 赋值给声明的String 类和StringBuffer 类的变量 d. 两个类的实例的值都能够改变...
Java字符串常量池
开篇同学们面试的时候总会被问到字符串<em>常量池</em>的<em>问题</em>吧?如果你是死记硬背的答案,那么我想看了我这篇文章,你应该以后能胸有成竹了跟着Alan,走起!1. 享元模式其实<em>常量池</em>这个<em>问题</em>涉及到一个设计模式,叫“享元模式”,顾名思义 - - - &gt; 共享元素模式也就是说:一个系统中如果有多处用到了相同的一个元素,那么我们应该只存储一份此元素,而让所有地方都引用这一个元素Java中String部分就是根据享元模式设
JVM之常量池导致的内存溢出异常问题
1.代码运行的时候<em>常量池</em>是方法区的一部分,使用<em>string</em>.itern()是一个Native方法,如果字符串<em>常量池</em>中已经一个等于此String对象的字符串,则返回池中这个字符串的<em>string</em>对象,否则将<em>string</em>对象包含的字符串添加到<em>常量池</em>中,并且由此返回此<em>string</em>对象的引用。  ...
jvm 运行时数据区、String 常量池
私有 - 程序计数器:记录当前线程所执行字节码的行号指示器 - 虚拟机栈:存放了当前线程调用方法的局部变量表、操作数栈、动态链接、方法返回值等信息(可以理解为线程 的栈) - 本地方法栈:为虚拟机使用的Native方法提供服务 共享 - Java堆:占据了虚拟机管理内存中最大的一块,唯一目的就是存放对象实例,也是垃圾回收器主要管理的地方,故又称GC堆 - 方法区:存储加载的类信息...
java字符串常量池——字符串==比较的一个误区
起因 再一次js的json对象的比较中,发现相同内容的json对象使用==比较并不相等。 例如: var obj = {}; var obj2 = {}; console.log(obj == obj2); // 结果为false json在js中代表一个对象==比较的是对象栈中存放引用堆的地址。上面的obj和obj2创建的是两个对象地址肯定不同结果为false。 但最令我不...
Java : String类初始化时是否在常量池的一个容易混淆的点
String类在初始化的时候,会在<em>常量池</em>创建对象,这是之前对String类的概念,当然,这句话不完全正确,实际创建却要复杂许多。 先看几道题如下: String a = &amp;quot;abc&amp;quot;; String test1 = new String(&amp;quot;a&amp;quot;); System.out.println(a == test1); String b ...
string 的栈 堆、常量池的区别 特列
1.<em>string</em>的特点:只要改变<em>string</em>的值就要重新在堆里面new指向栈的新的地址,2.找对象值的步骤:现在<em>常量池</em>中找--找不到就去堆里newString a="hello"; String b="h"+"ello";但是上面的输出结果是相等的
String类创建对象问题
关于String类中<em>常量池</em>、字符串池的理解
Java中的常量池(字符串常量池、class常量池和运行时常量池)
简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同<em>常量池</em>的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨: 在Java的内存分配中,总共3种<em>常量池</em>:1.字符串<em>常量池</em>(String Constant Pool):1.1:字符串<em>常量池</em>在Java内存区域的哪个位置? 在JDK6.0及之前版本,字符串
JDK8 Java字符串常量池在Java堆中而不是方法区
String.intern()方法的作用是返回一个字符串引用,引用的是字符串<em>常量池</em>中的字符串(字面量),所以我们可以通过这个方法来测试,使得字符串<em>常量池</em>内存溢出,看看这个时候报错报的是哪里out of memory。 import java.util.ArrayList; public class StringConstancePool { public static void ma...
java: 封装缓存池(int与Integer)、常量池(拘留池)、static变量 static代码块 static方法、 final变量、final 方法、final类 整理
java 内存模型: JVM主要管理两种类型内存:堆和非堆,堆内存(Heap Memory)是在 Java 虚拟机启动时创建, 非堆内存(Non-heap Memory)是在 JVM堆之外的内存  堆:对象的具体(属性 方法);  非堆区: 栈:方法执行时 在此操作,局部变量,堆中对象的地址; 静态数据区: static修饰的数据区(假设 技术不能假设!!):如果经stat
8种基本类型的包装类和常量池简单介绍
/** * 8种基本类型的包装类和对象池 * 包装类:java提供的为原始数据类型的封装类,如:int(基本数据类型),Integer封装类。 * 对象池:为了一定程度上减少频繁创建对象,将一些对象保存到一个"容器"中。 * * Byte,Short,Integer,Long,Character。这5种整型的包装类的对象池范围在-128~127之间,也就是说, * 超出这
JAVA中关于String类型的创建和字符串常量池问题
在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种<em>常量池</em>的概念。<em>常量池</em>就类似一个JAVA系统级别提供的缓存。       8种基本类型的<em>常量池</em>都是系统协调的,String类型的<em>常量池</em>比较特殊。它的主要使用方法有两种: 1)直接使用双引号声明出来的String对象会直接存储在<em>常量池</em>中。
字符串常量池、class常量池和运行时常量池
  原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-<em>string</em>-pool/                         在java的内存分配中,经常听到很多关于<em>常量池</em>的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有<em>问题</em>,笔者尝试着...
字符串常量池和堆中的非常量池(堆)创建字符串(new 和非new穿件 == 和equal比较)
简单分析:String str1= &quot;hello&quot;, String str2=&quot;he&quot;+&quot;llo&quot;;之所以str1==str2返回true是因为两者都是在字符串<em>常量池</em>中(由于初始化就会在此区域分布内存)而<em>常量池</em>中的有个与栈区类似的特性,就是当str2指向的常量在常量区已存在时,他不会创建新的内存空间来存此常量,而是指向已有常量的内存(应该是以此节约空间),此时str1与str2这两个引用变量的值都...
JVM-String常量池与运行时常量池(java自带反编译)
Start with JVM 周志明先生著-《深入理解Java虚拟机》,书买回来好几天了,但是最近才准备开始搞一搞了(哭瞎…..)。首先是第一章的Java以及JVM发展历史,大概知道了现行的应用最广泛的Java虚拟机是HotSpot,当然一些商业公司也有使用自己的虚拟机。 JVM运行时数据区 这是放在Java内存区域与内存溢出异常里面的必备知识,描述了Java虚拟机在运行时的数据区域 私有 ...
String和常量池值的变化
public static void main(String[] args) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); // i1,i2分别位于堆中不同的内存空间 System.out.println("i1 == i2:" + (i1 == i2));//
来看看String类和常量池内存分析以及8种基本类型和常量池例子
基本<em>问题</em> String类和<em>常量池</em>内存分析 8种基本类型的包装类和<em>常量池</em> String 类和<em>常量池</em> 1 String 对象的两种创建方式 String str1 = &quot;abcd&quot;; String str2 = new String(&quot;abcd&quot;); System.out.println(str1==str2);//false 记住:只要使用 new 方法,便需要创建新的对象。 2 Str...
基于JDK1.8 分析运行时常量池、字符串常量池、各种常量池
  Java中的<em>常量池</em>分为三种类型: 类文件中<em>常量池</em>(The Constant Pool) 运行时<em>常量池</em>(The Run-Time Constant Pool) String<em>常量池</em>   类文件中<em>常量池</em> ---- 存在于Class文件中 所处区域:堆 诞生时间:编译时 内容概要:符号引用和字面量 class<em>常量池</em>是在编译的时候每个class都有的,在编译阶段,存放的是常量的符号引用...
常量池 运行时常量池 String intern方法想到的(一)
最近在看《深入理解java虚拟机》,看到了<em>常量池</em>(Constant Pool Table)和运行时<em>常量池</em>(Runtime Constant Pool)这两个概念,对这两个概念不是很理解。又看到了String类的intern方法,intern方法也没用过。于是,查了查,记录如下。 以后遇到了<em>问题</em>之后,写blog时,先下<em>问题</em>的结论。结论<em>常量池</em>这个概念是针对java class文件而言的。当java代码
Java内存模型分析(堆、栈和常量池以及相关String的详细讲解)
在JAVA中,有六个不同的地方可以存储数据: 寄存器(register)。 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。 ——最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指
常量池 运行时常量池 String intern方法想到的(四)之深入理解intern
上篇博文由<em>常量池</em> 运行时<em>常量池</em> String intern方法想到的(三),写到了String的内存模型,这篇博文讨论下String#intern方法的实现。 这篇博文主要参考自:深入解析String#intern。只是用来学习,无意侵犯版权。声明本文的讨论如在不特殊说明的前提下,使用的是JDK1.6,在特殊场合会说明使用的是JDK1.6还是JDK1.8。 JDK1.6java version
Constant Pool常量池的概念
Constant Pool<em>常量池</em>的概念 Constant Pool<em>常量池</em>的概念: 在讲到String的一些特殊情况时,总会提到String Pool或者Constant Pool,但是我想很多人都不太 明白Constant Pool到底是个怎么样的东西,运行的时候存储在哪里,所以在这里先说一下Constant Pool的内容. String Pool是对应于在Constant Pool中存
1.运行时常量池导致内存溢出异常的实现
其中intern()是本地native方法的一种; 具体的验证过程见下图: 一直到后期去不断的去增加intern() 直到将方法区溢出: 通过VM对程序进行监控 如下所示: 显示如下: 此时进行内存溢出的时PerGem space的这种情况: 详细验证代码如下: import java.util.ArrayList; import java.util.Lis...
StringBuffer何时初始化到常量池
首先,在源代码中用双引号引起来的会自动进入<em>常量池</em>中(其实字符串对象是在堆中,然后<em>常量池</em>里有个引用指向它,但是和直接说在<em>常量池</em>中似乎没多大影响,下面也就这么说了) String s1 = new StringBuffer("he").append("llo").toString(); System.out.println(s1==s1.intern());//结果是true 这
数据类型String常量池的特性
package com.test.Thread.StringAndSyn; /** * synchronized(<em>string</em>)同步块与String联合使用 * @author admin * 2017年4月20日 */ public class Service { public static void print(String parm) throws InterruptedExc
关于String常量池的一些个小实验
实验一:public class Test{ public static String a = "a"; public static void main(){ String b = "b"; } }使用Java自带的反编译工具反编译一下,编译后输入javap -verbose Test.classa、b两个字面值常量放进了<em>常量池</em>实验二:public class
字符串常量池、class文件常量池和运行时常量池
一、字符串<em>常量池</em>(String Pool)——位于方法区 1.结构: 它是一个String Table类,实质上是一个Hash表,默认长度是1009。全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例存到<em>string</em> pool中。(关于字符串<em>常量池</em>中存的到底是对象实例还是对象实例的引用,网上有各种说法,大家可以自行百度一下。) 2.特点: A、这个Strin...
Java的Integer常量池和String常量池
1.Integer的<em>常量池</em> 看下面一段代码: package cn.qlq.test; public class ArrayTest { public static void main(String[] args) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); ...
String常量池和synchronized关键字
在java中String是一个比较特殊的类,String有一个自己的<em>常量池</em>,存放了初始化的字符串,这一个特性经常能导致一些坑,下面简单的介绍一点。   一,用常量赋值的字符串 String a=”abc”; 当执行这条语句时,先在<em>常量池</em>中查找是否有”abc”对象,如果有则创建对象a并指向这个对象,如果没有则先在<em>常量池</em>中创建”abc”对象,然后创建对象a并指向这个对象。 最终a是指向常...
java常量池-字符串常量池、class常量池和运行时常量池
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-<em>string</em>-pool/                         在java的内存分配中,经常听到很多关于<em>常量池</em>的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有<em>问题</em>,笔者尝试着来区分...
java中的字符串到底是在方法区的常量池里还是new出来的对象里
String实质是字符数组,两个特点:1、该类不可被继承;2、不可变性(immutable)例如 String s1 = new String(&quot;myString&quot;);和 String s1 = &quot;myString&quot;; 第一种方式通过关键字new定义过程:在程序编译期,编译程序先去字符串<em>常量池</em>检查,是否存在“myString”,如果不存在,则在<em>常量池</em>中开辟一个内存空间存放“myString”;如果...
转 java常量池概念,String,Integer等包装类对常量池的应用
  2016年06月27日 15:47:59 V核桃V 阅读数:2794更多 个人分类: JavaSE 在class文件中,“<em>常量池</em>”是最复杂也最值得关注的内容。   Java是一种动态连接的语言,<em>常量池</em>的作用非常重要,<em>常量池</em>中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:   类和接口的...
String.intern 在java 6,7 和8中的使用- 字符串常量池
  String.intern in Java 6, 7 and 8 – <em>string</em> pooling String.intern 在java 6,7 和8中的使用- 字符串<em>常量池</em>   This article will describe how String.intern method was implemented in Java 6 and what changes were ma...
关于常量池,字符串常量池的整理
由于之前研究了一下JVM的内存划分,对里面方法区的<em>常量池</em>一知半解,于是想要探究一下 全局字符串池(<em>string</em> pool也有叫做<em>string</em> literal pool) 全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到<em>string</em> pool中(记住:<em>string</em> pool中存的是引用值而不是具体的实例对象,具体的实例对象是在...
检测一个字符串是否在jvm的常量池
检测一个字符串是否在jvm的<em>常量池</em>中 : public static boolean inPool(String s) {       String s2 = s.intern();       if (s2 == s)           return true;       return false;   }
java的String与Stringpool(字符串常量池)
字符串常量值与简单语法: String s1 = &quot;sworddancing&quot;; String s2 = &quot;sworddancing&quot;; //在字符串<em>常量池</em>中查看是否含有与“sworddancing”相同的字符串对象 //需要明确的是在java中每一个字符串就是一个字符串对象,存储在堆中,而字符串对象的引用则存储在字符串 <em>常量池</em>中 //若没有,则新创建一个包含该内容的字符串对象,并让引...
java中常量池的概念及存在的区域
--------java中<em>常量池</em>的概念 在class文件中,“<em>常量池</em>”是最复杂也最值得关注的内容。   Java是一种动态连接的语言,<em>常量池</em>的作用非常重要,<em>常量池</em>中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:   类和接口的全限定名;   字段的名称和描述符;   方
字符串过长处理
//设置宽度为200px,当字符串长度过大时,自动变成省略号,追加悬停显示完整信息 var transStr = ‘
JAVA三种常量池的区别
1.全局字符串池(<em>string</em> pool也有叫做<em>string</em> literal pool) 全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到<em>string</em> pool中(记住:<em>string</em> pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的。)。 在HotSpot VM里实现的<em>string</em> poo
运行时数据区域——运行时常量池(Runtime Constant Pool)。
博文中的内容来源《深入理解Java虚拟机_JVM高级特性与最佳实践》这一本书,感激不尽。
常量池String编译器优化
答:False 【运行时<em>常量池</em>】,则是jvm虚拟机在完成类装载操作后,将class文件中的<em>常量池</em>载入到内存中,并保存在方法区中,我们常说的<em>常量池</em>,就是指方法区中的运行时<em>常量池</em> -【 已知字面量会编译期优化】s3虽然是动态拼接出来的字符串,但是所有参与拼接的部分都是已知的字面量,在编译期间,这种拼接会被优化,编译器直接帮你拼好,因此String s3 = “Hel” + “lo”;在cla...
Java字符串常量池相关问题
首先,我们来熟悉字符串<em>常量池</em>:字符串在java程序中被大量使用,为了避免每次都创建相同的字符串对象及内存分配,JVM内部对字符串对象的创建做了一定的优化,有一块专门的区域用来存储字符串常量,该区域就是字符串<em>常量池</em>。字符串<em>常量池</em>涉及到一个设计模式,叫享元模式,所谓享元模式是说:一个系统中如果有多处用到了相同的一个元素,那么我们应该只存储一份此元素,而让所有地方都引用这一个元素。
java中的字符串常量池,栈和堆的概念
<em>问题</em>:String str = new String(“abc”),“abc”在内存中是怎么分配的?    答案是:堆,字符串常量区。 题目考查的为Java中的字符串<em>常量池</em>和JVM运行时数据区的相关概念。 &quot;abc&quot;为字面量对象,其存储在堆内存中。而字符串<em>常量池</em>则存储的是字符串对象的一个引用。   Java中的字符串<em>常量池</em> Java中字符串对象创建有两种形式,一种为字面量形式,如Stri...
Java运行时常量池与final修饰符的关系
概述Java运行时<em>常量池</em>是JVM运行时内存模型的重要部分.我对<em>常量池</em>的理解大都来自于周志明大大的《深入理解Java虚拟机》, 书中对<em>常量池</em>有较多的描述与解释, 在内存管理, 类文件结构等部分章节中都有说明. 正如我之前的博文–JVM内存管理对<em>常量池</em>描述的一样,<em>常量池</em>会存储字面量和符号引用,但我有个疑问: <em>常量池</em>与final修饰符的关系是怎么样的?Codepublic class Test{
方法区与常量池
一.相关概念 1. 什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 Class文件中的<em>常量池</em> 在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,...
java虚拟机常量池
原文链接:http://blog.sina.com.cn/s/blog_704084560101hg2p.html<em>常量池</em>在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = “java”这种申明方式;当然也可扩充,执行器产生的常量也会放入<em>常量池</em>,故认为<em>常量池</em>是JVM的一块特殊的内存空间。 Java是一
常量在什么时候被放入常量池
先来了解一下<em>常量池</em>,<em>常量池</em>分为方法区中的运行时<em>常量池</em>和class文件中的<em>常量池</em>,class文件中的<em>常量池</em>在编译时确定,其中包括符号引用和字面量(文本字符串,被声明为final的变量的值),运行时,JVM从中读取数据到方法区的运行时<em>常量池</em>,运行时<em>常量池</em>可以在运行时添加常量,常量可以在运行时或编译时被放入<em>常量池</em>,编译期放入到类文件的<em>常量池</em>中,运行时放入到方法区的运行时<em>常量池</em>中,JDK1.7后运行时常量
java jdk1.7常量池移到哪去了?
今天模拟了一下<em>常量池</em>的oom,突然发现设置的参数-XX:PermSize=10M -XX:MaxPermSize=10M不管用了,同时发现内存一直在上升,当上升到一个极值就会趋于平稳,然后再过一段时间会报: Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded 这个异常是当GC的时间超过
String str = new String("abc")究竟创建了几个对象?
先给出答案:两个。(如果原来<em>常量池</em>中没有&quot;abc&quot;)   String是一个特殊的包装类数据。即可以用String str = new String(&quot;abc&quot;);的形式来创建,也可以用String str = &quot;abc&quot;;的形式来创建 String str = &quot;abc&quot;创建对象的过程   首先在<em>常量池</em>中查找是否存在内容为&quot;abc&quot;字符串对象 如果不存在则在<em>常量池</em>中创建&quot;abc&qu
验证运行时常量池在JDK1.7被移到Java堆中
JDK1.6代码运行及其结果 /** * VM options:-Xms10M -Xmx20M -XX:PermSize=10M -XX:MaxPermSize=10M -XX:-UseGCOverheadLimit */ public class StringIntern { public static void main(String[] args) { Li...
关于字符串在常量池中中的存储问题
关于字符串在<em>常量池</em>中中的存储<em>问题</em> package com.xwl; /** * 关于<em>常量池</em>的<em>问题</em> * @author Administrator * 字符串<em>常量池</em> */ public class AboutInterview { public static void main(String[] args) { String s1 = &quot;hello&quot;; ...
string常量池、堆内存、==、equals辨析
<em>string</em> s1=&quot;programming &quot;;                    字符串缓冲池(<em>常量池</em>)  <em>string</em> s2=new String(&quot;programming&quot;);  堆内存 <em>string</em> s3=&quot;program &quot;;                              <em>string</em> s4=&quot;ming &quot;; <em>string</em> s5=&quot;program&quot;+&quot;ming .
文章热词 像质量评价标准 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程
相关热词 ios获取idfa server的安全控制模型是什么 sql android title搜索 ios 动态修改约束 java学习常见问题 java 学习中常遇问题
我们是很有底线的