}
有兴趣可以运行看看结果,一旦把这种代码放到了生产环境里,排查非常困难。
2. Java 内存结构和对象分配**
第二个知识点,就是 Java 内存结构和对象分配的基础知识,尤其是 JVM 内存中堆的布局和对象分配的关系。
比如,堆内存的布局
[![](https://img-blog.csdnimg.cn/img_convert/fb020522364c88c4b4a59f38f0867
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
aa8.png)](https://s2.51cto.com/oss/202107/09/82330deac0f7d93132359479a3a4c2c4.png?x-oss-process=image/format,jpg,image/resize,w_600)
当然,Java7 后,新布局变了
知道布局了,就得知道java对象分配的基本原则:
-
对象优先在Eden区分配
-
对象太大直接会分配到老年代
只有知道这些知识,才不会经常写下底下这种 bug:
// 将全部行数读取的内存中
List lines = FileUtils.readLines(new File(“temp/test.txt”), Charset.defaultCharset());
for (String line : lines) {
// pass
}
上面这段代码,一旦读取到了大文件,很可能把生产环境搞崩。
所以,把上述两个知识点深入理解了,对新手提