常量池里存的是引用

1597 2020-12-22 18:55

显然美团的没有干过阿里的老人。jvm一道面试题

String s = new String("xyz");  
创建了几个String Object?
R大说过,问这个问题的面试官,基本上就不懂java。没有这么问的。什么是创建?
里面的坑多如牛毛。会答的一般会说是两个实例。一个在堆,另一个在非堆。1.8以后又挪到堆里去了。
然后坑人的验证教条的人,由拿着R大的文章反问。运行时常量池里存的是对象还是引用?不懂的你去看1.8官方文档呀。其实从1.6开始文档就没啥变化。变化的是常量池移出永久代了。而这也只是一家公司的方法区实现而已。
R大最重要的一句话是“StringTable是个哈希表”,里面存放的只能是引用。不信的可以用jdk1.7验证用一个字符串intern一个视频文件。不会报java.lang.OutOfMemoryError permgen space错误。所以对象存在堆上。常量池里仅有引用。你可以说方法区里也有对象,但是不在常量池里。

全部评论

·