31.jvm内存结构部分——StringTable字符串延迟加载

字符串加载时,延迟特性

package design.wlb.studyjava.demo.restudy.c4jvm专题.chapter02.c31StringTable_字符串延迟加载;

/**
 * 演示字符串字面量也是【延迟】成为对象的。
 */
public class Client {
	public static void main(String[] args) {
		int x = args.length;
		System.out.println(x);  // 字符串个数

		System.out.println("1");
		System.out.println("2");
		System.out.println("3");
		System.out.println("4");
		System.out.println("5");
		System.out.println("6");
		System.out.println("7");
		System.out.println("8");
		System.out.println("9");
		System.out.println("10");

		System.out.println("1");
		System.out.println("2");
		System.out.println("3");
		System.out.println("4");
		System.out.println("5");
		System.out.println("6");
		System.out.println("7");
		System.out.println("8");
		System.out.println("9");
		System.out.println("10");
	}
}

 这个特性,我们使用idea中debug里面memory功能来进行调试查看。

当走到图上断点1的位置时,此时java.lang.String类型的对象有3290个。
当执行完System.out.println("1");

此时java.lang.String类型的对象有3291个。
再往下走一行。当执行完System.out.println("2");

此时java.lang.String类型的对象有3292个。
这次我们直接到断点2的位置去。

此时java.lang.String类型的对象直接增加了7个,变为了3299个。我们把最后一个也跑一下

此时java.lang.String类型的对象直接增加了1个,变为了3300个。

下面还有10个,我们将其跑完,先再跑一下System.out.println("1");

此时String在内存中的对象,没有增加了。

 再跑一下System.out.println("2");

此时String在内存中的对象,也没有增加了。

 我们走完

当走到 System.out.println("10"); 时,内存中的对象,也没有增加了

以上说明了几点内容呢?

1.常量字符串被引用时,它是缓加载的,遇到了才会加载。

2.由前面的知识我们可以知道,它被加载到了串池里面那个堆里。

3.后续字符串被引用是,没有重新创建对象放入串池中,而直接从串池中去的。 

好,这一篇就讲到这里。

上一篇:30.jvm内存结构部分——StringTable编译期优化_tgbyhn31的博客-优快云博客

下一篇:32.jvm内存结构部分——StringTable_intern_1.8_tgbyhn31的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值