欢迎来到天天文库
浏览记录
ID:30780176
大小:690.14 KB
页数:12页
时间:2019-01-03
《java内存分配和string类型的深度解析-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、java内存分配和String类型的深度解析-编程开发技术java内存分配和String类型的深度解1!原文出处:OSChina-肖慧一、引题在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,木文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文。1、java内存具体指哪块内存?这块内存区威为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小?2、String类
2、型在执行连接操作吋,效率为什么会比StringBuffer或者StringBuiIder低?StringBuffer和StringBuiIder有什么联系和区别?3、java中常量是指什么?Strings="s”和Strings=newString(“s”)有什么不一样?本文经多方资料的收集整理和归纳,最终撰写成文,如果有错误之处,请多多指教!二、java内存分配1、JVM简介Java虚拟机(JavaVirtualMachine简称JVM)是运行所冇Java程序的抽彖计算机,是Java语言的运行环境,它是Java最具吸引力的特性之一。Java
3、虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同吋运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。如下图所示,JVM的体系结构包含几个
4、主要的子系统和内存区:垃圾回收器(GarbageCollection):负责回收堆内存(Heap)屮没冇被使用的对彖,即这些对彖己经没有被引用了。类装载子系统(ClassloaderSub-System):除了要定位和导入二进制class文件外,还必须负责验证被导入类的正确性,为类变量分呢并初始化内存,以及帮助解析符号引用。执行引擎(ExecutionEngine):负责执行那些包含在被装载类的方法中的指令。运行时数据区(JavaMemoryAllocationArea):乂叫虚拟机内存或者Java内存,虚拟机运行时需要从整个计算机内存划分一
5、块内存区域存储许多东西。例如:字节码、从已装载的class文件中得到的其他信息、程序创建的对象、传递给方法的参数,返回值、局部变量等等。
6、!'•1;Programi11;Count'Natb;Register;[!!111L-MethodStack2、java内存分区从上节知道,运行时数据区即是java内存,而且数据区要存储的东西比较多,如杲不对这块内存区威进行划分管理,会显得比较杂乱无章。程序喜欢冇规律的东西,最讨厌杂乱无章的东四。根据存储数据的不同,内存通常被划分为5个区域:程序计数器(ProgramCountRegister)、本地方法
7、栈(NativeStack)、方法区(MethonArea)、栈(Stack)、堆(Heap)。程序计数器(ProgramCountRegister):又叫程序寄存器。JVM支持多个线程同时运行,当每一个新线程被创建时,它都将得到它自己的PC寄存器(程序计数器)。如果线程正在执行的是一个Java方法(非native),那么PC寄存器的值将总是指向下一条将被执行的指令,如果方法是native的,程序计数器寄存器的值不会被定义。JVM的程序计数器寄存器的宽度足够保证可以持有一个返回地址或者native的指针。栈(Stack):又叫堆栈。JVM为每
8、个新创建的线程都分配一个栈。也就是说,对于一个J3V3程序來说,它的运行就是通过对栈的操作來完成的。栈以帧为单位保存线程的状态。JVM对栈只进行两种操作:以帧为单位的压栈和出栈操作。我们知道,某个线程正在执行的方法称为此线程的当前方法。我们可能不知道,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的Java堆栈里新压入一个帧,这个帧自然成为了当前帧。在此方法执行期间,这个帧将用來保存参数、局部变量、中间计算过程和其他数据。从J"。的这种分配机制来看,堆栈又可以这样理解:栈(Stack)是操作系统在建立某个进程时或者线
9、程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性。其相关设置参数:•・Xss-设置方法栈的最人值本地方法栈(NativeSta
此文档下载收益归作者所有