首页 微博热点正文

深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场

Java规划者为String供给了字符串常量池以进步其功用,那么字符串常量蛇妃带蛋跑池的详细原理是什么,咱们需求带着以下三个问题,去了解字符串常量池:

  1. 字符串常量池的规划目的是什么?
  2. 字符串常量池在哪里?
  3. 怎么操作字符串常量池?

字符串常量池的规划目的是什么?

字符串的分性竞赛配,和其他的目标分配相同,消耗昂扬的时刻与空间价值。

JVM为了进步功用和削减内存开支,在实例化字符串常量的时分进行了一些优化:

为了削减在JVM中创立的字符串的数量,字符串类保护了一个字符串池,每逢代码创立字符串常量时,JVM会首要查看字符串常量池;

假如字段王爷出品符串现已存在池中,就回来池中的实例引证JT2750;

假如字符串不在池中,就会实例化一个字符串并放到池中。Java能够进行这样的优化是由于字符串是不行深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场变的,能够不必忧虑数据抵触进行同享;

完成的根底仲景艾宝:

由于字符串是深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场不行变的,能够不必忧虑数据抵触进行同享;

运行时实例创立的大局字符串常量池中深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场有一个表,总是为池中每个仅有的字符串目标保护一个引证,这就意味着它们一向引证着杰夫杀手噩梦缠身字符串常量池中的目标,所以,在常量池托付啦学妹中的这些字符串不会被废物收集器收回。

咱们来看下面一段代码,便是从字符串常量池中获取烧屁股3相应的字符串:撸管撸多了

字符串常量池在哪里?

在剖析字符串常量池的方位时,首要得了解JVM内存模型,JVM内存区域分为线程同享区线程独占区

线程同享区包含 [堆杀鸡美拍] 和 [办法区]

线程独占区包含 [Java虚拟机栈]、[本广州的一场春梦地办法栈] 和 [陈程序计数器]

办法区:

寄存加载的类信息、常量、静态变量,静态代码块等信息;

类信息包含类的版别、字段深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场、办法、接口等,办法区也被称为永久代。

程序计数器:

是一块比较小的内存区域,是仅有一个不会发作OutOfMemoryError的区域,能够这样了解办法进栈后,每一行代码都有一个标识,程序按着标识天尸符魔往下履行。

Java虚拟机栈:

每个办法履行,都会创立一个栈帧,办法调用进栈,办法完毕出栈; 栈帧里边寄存着局部变量表,操作数栈,动态链接以及办法出口等;

局部变量表里边寄存着根本数据类型,引证深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场类型等; 栈帧伴随着办法的开端而开端,完毕而结深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场束;

局部变量表所需的内存空间在编译期间就完成了分配,在运行期间是不会改动的;

栈很简单呈现StackOverFl豪门长媳17岁owError,栈内存溢出过错,常见于递归调用;

本地办法栈和Java虚拟机栈:

其实是差十分完美崔玉不多的,可是也是有差异的Java虚拟机栈为Java办法服务,本地办法栈为native办法服务

堆:

功用单一,便是存储目标的实例,堆其实又分新生代和老时代;

新生代又分Eden、Survivor01和Survivor02三个区域,废物收集器首要办理的区域,Eden区回苏沐然收功率很高。

并不是一切的目标实例都会分配到堆上去,Java虚拟机栈也会分配。堆很简单呈现OutOfMemoryError过错,内存溢出

怎么操作字符车上干串常量池?

JVM实例化字符串常量池时

String.internv家黑化曲()判别这个常量是否存在于常量池。

假如存在{

判别存在内实在相片容是引证仍是常量{

假如是引证{

回来引证地址指向堆空间目标

}

假如是常量{

直接回来常量池常量

}

}

}

假如不存在{

将当时目标引证复制到常量池,而且回来的是当时目标的引证

}

经过new操作符创立的字符串目标不指向字符串池中的任何目标,可是可毒爱纯男以经过运用字符串的intern()办法来指向其间的某一个。java.lang.String.intern()回来一个保存池字符串,便是一个在大局字符串池中有了一个进口。假如曾经没有在全深圳天气预报,JAVA面试官:请说什么是字符串常量池?,股票市场局字符串池中,那么它就会被添加到里边。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。