JVM涉及字符串的内存结构

JVM】13、StringTable StringTabeleString的基本特性String 底层 Hashtable 结构String 内存结构的分配位置调整String位置的原因String 的基本操作字符串拼接操作字符串拼接相关面试题拼接操作底层原理 String的基本特性 String:字符串,使用一对 “” 引起来表示 String s1 = "mogublog" ; // 字面量的定义方式 String s2 = new String("moxi"); // new 对象的方式 String声明为f 阅读详情

 

 

 

Heap堆

一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三部分:
Young Generation Space  新生区       Young
Tenure generation space  养老区        Old
Permanent Space    永久存储区          Perm

      实际而言,方法区(Method Area)和堆一样,是各个线程共享的内存区域,它用于存储虚拟机加载的:类信息+普通常量+静态变量+编译器编译后的代码等等,虽然JVM规范将方法区描述为堆的一个逻辑部分,但它却还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开
      对于HotSpot虚拟机,很多开发者习惯将方法区称之为“永久代(Permanent Gen)”,但严格本质上说两者不同,或者说使用永久代来实现方法区而已,永久代是方法区的一个实现,jdk1.7
的版本中,已经将原本放在永久代的字符串常量池移走

常量池(Constant Pool)是方法区的一部分,Class文件除了有类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池,这部分内容将在类加载后进入方法区的运行时常量池中存放。

新生区

新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾
回收器收集,结束生命。新生区又分为两部分∶伊甸区(Eden space )和幸存者区
( Survivor pace ),所有的类都是在伊甸区被new出来的。幸存区有两个:0区(Survivor 0 space )和1区(Survivor 1 space )。当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存0区。若幸存0区也满了,再对该区进行垃圾回收,然后移动到1区。那如果1区也满了呢?再移动到养老区。若养老区也满了,那么这个时候将产生Major GC ( FullGC),进行养老区的内存清理。若养老区执行了Full GC之后发现依然无法进行对象的保存,就会产生OOM异常
"OutOfMemoryError”。
如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二:
( 1 ) Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。
(2)代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。内存溢出;内存泄漏
 

永久区
      永久存储区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface 的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的内存。
      如果出现java.lang.OutOfMemoryError: PermGen space,说明是Java虚拟机对永久代Perm内存设置不够。一般出现这种情况,都是程序启动需要加载大量的第三方jar包。例如∶在一个Tomcat下部署了太多的应用。或者大量动态反射生成的类不断被加载,最终导致Perm区被占满。
Jdk1.6及之前:常量池分配在永久代,1.6在方法区
Jdk1.7 :有,但已经逐步“去永久代”,1.7在堆
Jdk1.8及之后:无,1.8在元空间

 

 

 

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大 阅读详情

相关推荐

精通 Android NDK/JNI:从入门到精通实战与面试精粹

在Android开发中,

郑伟强dev的专栏 97

JVM内存结构阐述

内存结构 程序计数器 作用,是记住下一条jvm指令的执行地址 是线程私有的 在线程上下文切换的过程中需要记录到下一条要执行的指令的地址,等到线程再次被调度到执行的时候,还是根据该线程的程序计数器,来找到下一条要执行的指令的地址 每个线程都有自己独有的程序计数器 唯一一个内存不会溢出的 随着线程创建而创建,随着线程销毁而销毁 栈 栈可以说是虚拟机栈中的局部变量表 局部变量表中存放了编译期可知的各种基本数据类型,对象引用(不等于对象本身,可能是一

m0_60264772的博客 3682

jvm如何处理长字符串

jvm如何处理长字符串java的classs文件中,constant_utf8_info的长度是u2,也就是说,一个字符串最长是65535个字节,但是,在本机做测试,超过这个长度的字符串也是允许的,原因是什么?

JAVA-String字符串以及String内存详解

java之String字符串以及String内存详解

Java技术加油站的博客 381

揭秘:Java字符串对象的内存分布原理

String如果要正确回答上面几个面试题,不深入理解String类型的内存原理是不行的,本篇的唯一目的就是言简意赅、深入浅出的梳理String类型的底层原理。

epitomizelu的专栏 1318

Java 字符串内存原理分析

Java 字符串是一种常用的数据类型,它在程序中的作用不言而喻。但是,你是否了解 Java 字符串内存原理呢?

m0_64015460的博客 1252

Java的String字符串内存布局知多少?

1. 初始化 public static void main(String[] args) { String str1 = "hello"; String str2 = new String("hello"); char[] chars = {'h', 'e', 'l', 'l', 'o'}; String str3 = new String(chars); } 仔细观察 str3 的创建过程 分析 new String(chars) 源码

开心的博客 833

JVM 虚拟机系列:内存结构

JVM面试题系列:new String(“abc“)创建了几个对象_Java大将军的博客-CSDN博客面试官考察点猜想这种问题,考察你对JVM的理解程度。涉及到常量池、对象内存分配等问题。涉及背景知识详解在分析这个问题之前,我们先来了解一下JVM的组成,如图所示。在JVM1.8中,内存划分为堆、程序计数器、本地方方法栈、方法区(元空间)、虚拟机栈。JVM知识点普及下面分别解释一下JVM运行时内存的功能。堆内存空间堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内

C++ JAVA的专栏 299

JVM概述和内存管理

首先代码会被javac编译器编译成.class字节码(类的基本信息、常量池、方法定义)存于方法区;然后字节码被JVM通过(方法区的)类加载器进行加载到方法区(元空间);接着字节码中的方法定义中的虚拟机指令被解释器解释成机器码(根据不同的平台生成不同的机器码),这个过程会去常量池中查表;然后分配执行这段指令需要的资源—主要是内存。CPU执行指令把结果写回内存了。..........................................

机械工程跑路哥 806

JVM内存结构详解

JVM的概念、JVM的组成(程序计数器、堆、栈、方法区)、常量池、运行时常量池、字符串常量池的理解、从运行角度理解各个部分的作用

qq_44898256的博客 287

简单分析 JVM 对象的内存(对象的创建)以及String相关知识

简单分析 JVM 对象的内存一、前言二、JVM 对象的内存解析1. 举例分析对象在内存中的存储过程2.内存中对象之间的赋值三、对象数组的内存分析四、早期让你尴尬的String1.简单介绍2.尴尬案例(1)String为啥不可被修改?a. 先简单看看String的b. 再简单来个好理解的例子(2)new String() 和 new Stirng("")(3)内存分析:字面量 和 new+构造器 创建Stringa. 字面量创建b. new+构造器创建c. 小思考——经典问题1)字符串常量池的优点?2)Str

@素素~的博客 656

JVM——StringTable面试案例+垃圾回收+性能调优+直接内存

常量池与串池+垃圾回收+性能调优+直接内存

测试 893

JVM学习之字符串常量池

在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。如果不是用双引号声明的String对象,可以使用String提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。2、使用 intern() 方法:由于数组中字符串的引用都指向字符串常量池中的字符串,所以程序需要维护的 String 对象更少,内存占用也更低。常量池就类似一个Java系统级别提供的缓存。

BLF2 237

JVM学习资料

常见JVM面试题及答案整理:https://blog.csdn.net/qq_41701956/article/details/100074023 一文搞懂JVM内存结构:https://blog.csdn.net/rongtaoup/article/details/89142396 强引用,软引用,弱引用与虚引用:https://www.cnblogs.com/rgever/p/8902210.html java 强引用的对象什么时候回收?:https://blog.csdn.net/weixin_

xajh_czbk的博客 152

JVM-图解

JVM内存结构 定义: java程序的运行环境(java二进制字节码的运行环境) 一次编写,到处运行 自动内存管理,垃圾回收机制 数组下标越界检查 多态(虚方法表调用) 比较 jvm java二进制运行环境 jre jvm+基础类库(所有类) jdk jvm+ jre +编译工具 开发javase jdk+IDE工具 开发javaee程序 jdk + 应用服务器+IDE工具 常见JVM HotSpot OpenJ9 。。。。。 ![img](https://ny

SunYang的博客 631

Java:String字符串内存分析

1.Java内存分析:栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。例如,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动 释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。    堆(heap):存放所有n

BAOLIANG196的博客 3833

Java】String字符串JVM中的存储及其内存地址问题

详细阐述了String类型在JVM中的存储及地址问题,从源码角度解析了字符串拼接的两种情况,最后介绍了String的intern()方法。

LYQ的博客 5525

java字符串数组内存结构解析

轻描时光 659

Java String字符串常量池深度详解

java中,内存分成两个区域stack(栈) 和 heap(堆) , stack 用于运行(包括变量引用和逻辑运行),heap 用于存储变量实体。java中对String对象特殊对待,所以在heap区域分成了两块,一块是String constant pool(String恒定池),用于存储java字符串常量对象,另一块用于存储普通对象及字符串对象。 而string的创建有两种方法:Strin......

苍煜 3068

Java-String字符串内存结构

Java-String字符串内存结构 本文参考自:公众号 程序新视界 原文链接: https://mp.weixin.qq.com/s/jC3Gv3Fi0bo0d7rP5ngqpw 字符串通常的创建方式有两种: new关键字创建 通过引号直接赋值 这两种形式的字符串创建在内存上是有区别的。 使用引号直接赋值 使用引号直接赋值创建字符串时,会先去常量池中查找该字符串是否已经存在,如果不存在的话先在常量池创建对象,然后返回引用地址;如果存在,则直接返回。 使用new关键字创建 使用new关键字创建字

weixin_43169156的博客 548

DMD.rar_DMD 代码_dmd matlab程序_dmd分解_matlab dmd_分解

动态模式分解的matlab 代码,有注释

上一篇: String不同拼接方式的对比
下一篇: String常用方法
ouxinde
博客等级 码龄8年 5粉丝 · 124原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值