黑马程序员技术交流社区

标题: java内存与String类型详解 [打印本页]

作者: 武汉分校-小舞    时间: 2017-8-18 15:49
标题: java内存与String类型详解
在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文。
1、java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小?
2、String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBuffer和StringBuilder有什么联系和区别?
3、java中常量是指什么?String s = “s” 和 String s = newString(“s”) 有什么不一样?
本文经多方资料的收集整理和归纳,最终撰写成文,如果有错误之处,请多多指教!
java内存分配1、 JVM简介
Java虚拟机(Java VirtualMachine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。
2、 java内存分区
从上节知道,运行时数据区即是java内存,而且数据区要存储的东西比较多,如果不对这块内存区域进行划分管理,会显得比较杂乱无章。程序喜欢有规律的东西,最讨厌杂乱无章的东西。 根据存储数据的不同,java内存通常被划分为5个区域:程序计数器(Program CountRegister)、本地方法栈(Native Stack)、方法区(Methon Area)、栈(Stack)、堆(Heap)。
在这里可能会有读者表示疑问:记得还有一个什么永久代(PermanentGeneration)的啊,难道它不属于Java堆?亲,你答对了!其实传说中的永久代就是上面所说的方法区,存放的都是jvm初始化时加载器加载的一些类型信息(包括类信息、常量、静态变量等),这些信息的生存周期比较长,GC不会在主程序运行期对PermGen Space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGenSpace错误。其相关设置参数:
·        -XX:PermSize –设置Perm区的初始大小
·        -XX:MaxPermSize –设置Perm区的最大值
新生代(Young Generation又分为:Eden区和Survivor区,Survivor区有分为FromSpace和To Space。Eden区是对象最初分配到的地方;默认情况下,FromSpace和To Space的区域大小相等。JVM进行Minor GC时,将Eden中还存活的对象拷贝到Survivor区中,还会将Survivor区中还存活的对象拷贝到Tenured区中。在这种GC模式下,JVM为了提升GC效率,将Survivor区分为From Space和ToSpace,这样就可以将对象回收和对象晋升分离开来。新生代的大小设置有2个相关参数:
·        -Xmn — 设置新生代内存大小。
·        -XX:SurvivorRatio — 设置Eden与Survivor空间的大小比例
老年代(Old Generation: 当 OLD 区空间不够时, JVM 会在 OLD 区进行 majorcollection;完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”Out of memory错误”  。
三、String类型的深度解析

1.png (13.56 KB, 下载次数: 22)

1.png

2.jpg (33.51 KB, 下载次数: 32)

2.jpg

3.png (9.05 KB, 下载次数: 14)

3.png

5.png (2.96 KB, 下载次数: 13)

5.png

4.png (3.05 KB, 下载次数: 23)

4.png

作者: zhangxiaozhan    时间: 2017-8-19 01:06
红红火火恍恍惚惚什么意思
作者: 今天吃什么    时间: 2017-8-23 16:58
紫薯布丁。。
作者: k1453711238    时间: 2017-8-23 23:00

红红火火恍恍惚惚
作者: pmyjava    时间: 2017-8-24 21:37
很牛   看看
作者: S_m_ith    时间: 2017-8-27 20:23
大家好,我是一个新来的
作者: czbk184    时间: 2017-9-2 14:13
红红火火恍恍惚惚
作者: 序灬曲    时间: 2017-9-2 16:24
和法规和福建福建高考高防御
作者: pamper    时间: 2017-9-4 00:35
,,,,,,,,,,
作者: zfrhm    时间: 2017-9-5 08:53
谢谢分享,受益匪浅!

作者: 略屌略屌    时间: 2017-9-5 09:04
kjahkFIUGwfj
作者: 榕树长枫叶    时间: 2017-9-7 15:11
不听不听 和尚念经
作者: 1007490567    时间: 2017-9-8 23:35
激发了附件安莉芳家阿拉法f
作者: 垃圾幻城    时间: 2017-9-9 21:32
不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不
作者: cbf    时间: 2017-9-14 20:41
标题: RE: java内存与String类型详解
java内存与String类型详解
作者: IT路上的老男孩    时间: 2017-9-14 21:13
java内存与String类型详解
作者: wuerzhang    时间: 2017-9-14 21:14
写得好呆呆呆呆呆呆呆呆地
作者: m767071654    时间: 2017-9-14 22:22
写的不错,支持一下·
作者: zy281990    时间: 2017-9-14 23:08
啊我也啊也啊啊
作者: 18883611660    时间: 2017-9-15 09:51
学习学习

作者: niuheng    时间: 2017-9-26 10:51
Vvbbbbbbb

作者: aochong    时间: 2017-9-26 17:04
111111111111111111111111111
作者: andy118    时间: 2017-9-26 20:19
感谢楼主分享
作者: hopbuck    时间: 2017-9-29 10:21
这个知识点必须掌握,看看
作者: hzj007    时间: 2017-9-29 14:53
dasdasdasdasdasda
作者: yu2220873413    时间: 2017-10-2 21:35
感谢楼主

作者: xgwhsgws    时间: 2017-10-3 10:05
很有用,值得学习,感谢楼主分享
作者: 采采    时间: 2017-10-3 15:59
~~~~~~~~~~~~
作者: newu    时间: 2017-10-3 16:35
java内存与String类型详解
作者: 蝴蝶心跳    时间: 2017-10-6 10:55
好厉害

作者: 嘻嘻666    时间: 2017-10-10 20:52
kan kan ba
作者: 天道轮回    时间: 2017-10-11 10:19
哈哈哈哈哈哈哈哈哈的意思,还有自嘲的意思,可以对llllllll
作者: 陈其遥    时间: 2017-10-12 13:19
一直想要资源不知去哪里
作者: 快乐的小笨    时间: 2017-10-13 11:54
谢谢分享。。。。。。。。。。。。
作者: majunmin    时间: 2017-10-13 13:01
好东西

作者: meng5351    时间: 2017-10-14 13:08
1111111111111111111111
作者: 亦丶风    时间: 2017-10-15 00:10
还行 感觉可以尝试看了看啦啦啦啦

作者: miss_cay    时间: 2017-10-25 15:20
66666666666666666666666666666666666666
作者: 似水流年1    时间: 2017-10-26 00:45
ddfvvvvv

作者: gaogaofeng    时间: 2017-11-2 19:23
看看随便看看
作者: yfm1996    时间: 2017-11-4 00:07
谢谢分享
作者: DoKo    时间: 2017-11-4 05:36
可以的

作者: 假行僧233    时间: 2018-1-28 11:37
红红火火恍恍惚惚看看能不能用

作者: 随风521    时间: 2018-2-25 13:51
嗯,学习
作者: qaztxr    时间: 2018-2-25 16:20
给力 zszszszs
作者: For白日梦想家    时间: 2018-2-27 10:45
qqqqqqqqqqqqqqqqq
作者: 海天酱油    时间: 2018-10-13 14:11
如果您要查看本帖隐藏内容请回复
作者: 小猪佩奇。。。    时间: 2018-10-15 10:24
很好很行和不错

作者: mx003    时间: 2018-10-29 10:11
谢谢分享
作者: junlol    时间: 2018-10-29 12:48
111111111111111111
作者: 淋雨一直走    时间: 2019-5-10 15:16
谢谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2