初级程序员怎么学JVM?
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初级程序员怎么学JVM?相关的知识,希望对你有一定的参考价值。
初级程序员怎么学
对刚入行的新手程序员,工作一般是修复简单 bug、开发简单功能。如何编码少出 bug,是这个阶段的核心问题。
对于这个核心问题,JVM 原理必须深入掌握两个知识点。
1. 类的初始化
类的初始化,要了解的非常深入才可以。否则,一不留神就会往项目里引入一些有关初始化的 bug。
比如看看下面这段代码:
public class ParentClass {
private int parentX;
public ParentClass() {
setX(100);
}
public void setX(int x) {
parentX = x;
}
}
public class ChildClass extends ParentClass{
private int childX = 1;
public ChildClass() {}
@Override
public void setX(int x) {
super.setX(x);
childX = x;
System.out.println("ChildX 被赋值为 " + x);
}
public void printX() {
System.out.println("ChildX = " + childX);
}
}
public class TryInitMain {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.printX();
}
}
有兴趣可以运行看看结果,一旦把这种代码放到了生产环境里,排查非常困难。
2. Java 内存结构和对象分配
第二个知识点,就是 Java 内存结构和对象分配的基础知识,尤其是 JVM 内存中堆的布局和对象分配的关系。
比如,堆内存的布局
当然,Java7 后,新布局变了
知道布局了,就得知道java对象分配的基本原则:
- 对象优先在Eden区分配
- 对象太大直接会分配到老年代
只有知道这些知识,才不会经常写下底下这种 bug:
// 将全部行数读取的内存中
List<String> lines = FileUtils.readLines(new File("temp/test.txt"), Charset.defaultCharset());
for (String line : lines) {
// pass
}
上面这段代码,一旦读取到了大文件,很可能把生产环境搞崩。
所以,把上述两个知识点深入理解了,对新手提升自己的代码质量非常非常有用。只有代码质量上去了,你才能得到更好的发展。
对于这两个知识点,我认为通过网络的文章去学习最好。如果直接看书,有两个最大的缺点:
- 知识积累不足导致学不懂
- 书中冗余知识点太多,互相交杂,精力耗费过大,性价比不高
故这里学习推荐根据知识点去搜文章读,而不是找原理性的书籍看。
以上是关于初级程序员怎么学JVM?的主要内容,如果未能解决你的问题,请参考以下文章
[AndroidStudio]_[初级]_[配置自动完成的代码片段]
[AndroidStudio]_[初级]_[配置自动完成的代码片段]