神经网络中episode、epoch、iteration、batch

您所在的位置:网站首页 神经网络iteration 神经网络中episode、epoch、iteration、batch

神经网络中episode、epoch、iteration、batch

2024-07-09 08:00| 来源: 网络整理| 查看: 265

几张图彻底理解Java字符串常量池、String.intern()(非复制粘贴,准确解释)

宁城凝川: 都有,放不放还取决于你的源码。String Pool在堆,又相对独立。若源文件中出现 "hello" 之类的文本字符串,比如 String str = new String("hello"); 先执行new String,即new指令在堆创建String对象。然后执行"hello",即ldc指令从运行时常量池获取索引处的类型和值,此时是字符串类型字面量和hello,所以继续检查String Pool。String Pool是内存区域,还有个stringtable(类似hashtable,key是字符串字面量,value是String Pool中String对象的引用地址)。若stringtable存在key为hello,ldc指令则将value也就是String Pool中String对象的引用地址压入栈顶,理解为参数值传入String(String original)构造方法。若stringtable不存在key为hello,则在String Pool中创建String对象,然后将字符串字面量和String对象的引用地址作为k/v存入stringtable,接着将value也就是...同上。参数值传入构造方法后,可以看一下源码,this.value=original.value,将String Pool中String对象的value直接赋值给new关键字在堆中创建的String对象,两者指向String Pool中同一个byte[]。new创建的String对象采用这种方式减少内存占用,但还是占用内存;如果字符串不涉及逻辑操作,String类的构造方法都不建议调用。字符串字面量和String对象是两个无关的东西,记住这一点即可。若源文件中还出现String str2 = str+"2"; "hello2"并不会出现在String Pool,只会在普通堆,byte[]也是在普通堆。此时若执行str2.intern(),jdk7及之后,stringtable中存储k/v:"hello2"/堆中String对象的引用地址,String Pool中不再创建String对象。这些概念的东西其实都不重要,具体在哪也不重要,虚拟机又不是你造的,能真了解就见鬼了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3