JVM专题之深入运行时数据区

计算机体系结构

> **JVM的设计实际上遵循了遵循冯诺依曼计算机结构**

 CPU与内存交互图:

硬件一致性协议:

MSI、MESI、MOSI、Synapse、Firely、DragonProtocol

摩尔定律

摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度。

>为了使摩尔定律更为准确,在摩尔定律发现后10年,1975年的时候,摩尔又做了一些修改。将翻番的时间从一年半调整为两年。

常量池分类:

1.静态常量池

静态常量池是相对于运行时常量池来说的,属于描述class文件结构的一部分

由**字面量**和**符号引用**组成,在类被加载后会将静态常量池加载到内存中也就是运行时常量池

**字面量** :文本,字符串以及Final修饰的内容

**符号引用** :类,接口,方法,字段等相关的描述信息。

2.运行时常量池

当静态常量池被加载到内存后就会变成运行时常量池。

> 也就是真正的把文件的内容落地到JVM内存了

3.字符串常量池

**设计理念:**字符串作为最常用的数据类型,为减小内存的开销,专门为其开辟了一块内存区域(字符串常量池)用以存放。

JDK1.6及之前版本,字符串常量池是位于永久代(相当于现在的方法区)。

JDK1.7之后,字符串常量池位于Heap堆中

**面试常问点:(笔试居多)**

下列三种操作最多产生哪些对象

**1.直接赋值**

`String a ="aaaa";`

解析:

最多创建一个字符串对象。

首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,并且将“aaaa”的引用维护到字符串常量池中(实际是一个hashTable结构,存放key-value结构数据),再返回该引用;如果在字符串常量池中已经存在“aaaa”的引用,直接返回该引用。

**2.new String()**

`String  a  =new  String("aaaa");`

解析:

最多会创建两个对象。

首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,然后再在堆中创建一个“aaaa”对象,返回后面“aaaa”的引用;
**3.intern()**

```java
String s1 = new String("yzt");
String s2 = s1.intern();
System.out.println(s1 == s2); //false
```

解析:

String中的intern方法是一个 native 的方法,当调用 intern方法时,如果常量池已经包含一个等于此String对象的字符串(用equals

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令人着迷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值