国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

JVM内存分配及String常用方法

发布时间:2019/09/04标签:   常量    点击量:

原标题:JVM内存分配及String常用方法
一,JVM内存调配和常量池​ 在先容String类之前,先来简略剖析一下在JVM中,对内存的应用是怎样停止调配的。以下图所示(留神:在jdk1.8以后便没无方法区了):​ 如上JVM将内存分为多个差别的地区,这些地区都有各自的用处、创立和烧毁的时光,有些地区随虚构机过程的启动而存在,有些地区则是依靠用户线程的启动和停止来树立和烧毁。​ 地区称号的阐明:1.1,方式区:​ 属于数据同享内存地区,存储已被虚构机加载的类信息、常量、动态变量、立即编译器编译后的代码等数据。1.2,虚构机栈​ 虚构机栈就是咱们平日说的栈,是Java履行方式的内存模子,每当履行一次方式时,都市创立一个栈帧。把栈帧压入栈,当Java方式挪用时前往畸形的成果或许捕捉异样时,栈帧出栈。​ 栈帧:栈帧存储方式的相干信息,包括部分变量数表、前往值、操纵数栈、静态链接。1.3,当地方式栈​ 从功效下去说与虚构机栈相似,然而虚构机栈履行的是字节码,而当地方式栈挪用的是Native方式,而且它是线程独享的。1.4,顺序计数器​ 顺序计数器是线程独享的,它是记载以后线程履行的字节码行号。在多线程履行时,CPU会往返在线程之间停止切换,那末当再次回到一条线程时,是怎样得悉线程的存储单位及履行指令。而顺序计数器便会停止存储下一条存储单位的地点,履行结束后顺序计数器主动加 1 ,以此轮回直到顺序停止为止。1.5,堆​ 说到堆这个观点想必都不生疏,它是内存中的主要脚色。它重要是用来存储被创立进去的工具,经过要害字new实例进去的,是全部线程同享的一块最大的地区。​ ==特殊留神:在JDK1.7及当前,常量池挪动到堆内存中。==​ 堆还包含一个==常量池==,用来存储编译时期天生的==字面量和标记==援用。这局部内容在类被加载后,都市存储到方式区中。同时,运转时发生的新常量也能够被放入常量池中,比方 String 类中的 intern() 方式发生的常量。​ 常量池就是这个范例用到的常量的一个有序聚集。包含间接常量(基础范例,String)和对其余范例、方式、字段的标记援用。二,常量池2.1,甚么是常量:​ 常量是指被final润饰的变量,值一旦断定就无奈转变。​ final能够润饰动态变量、方式、实例变量和部分变量。​ 常量池分为两种情势:动态常量池和运转经常量池2.2,动态常量池​ 即*.class文件中的常量池,class文件中的常量池不只仅包括字符串(数字)字面量,还包括类、方式的信息,占用class文件绝大局部空间。这类常量池用于寄存字面量和标记援用量。2.3,运转经常量池​ 指JVM虚构机在实现类装载操纵后,将class文件中的常量池载入到内存中,并保留在方式区中,咱们常说的常量池,就是指方式区中的运转经常量池。一样运转经常量池一个主要的特点就是存在静态性,指并不须要常量只要在编译期才会发生,在运转期也会将新的常量保留到常量池中,如String类中的intern()方式。三,== 和equals3.1,二者之间区边​ ==:​ 关于基础范例来讲:==表现数值的比拟​ 关于援用范例来讲:==表现地点值的比拟​ equals:​ 比拟的是二者之间值能否相称,然而Java中的类都是间接或许直接继续Object类,而equals不也破例。实在在equals源码中也是应用==停止比拟的,以下源码:![](https://img2018.cnblogs.com/blog/1655301/201909/1655301-20190902223856542-1095893842.png)

上一篇:分享十个较佳的免费密码管理器

下一篇:没有了

返回
版权信息Copyright © IT技术教程 版权所有    ICP备案编号:鲁ICP备09013610号