zz Java新手的通病[5]:不了解JVM
2012-04-18 20:42
211 查看
http://blog.csdn.net/program_think/archive/2009/05/22/4209425.aspx
上次的帖子讨论了Java异常机制的几种误用,今天咱们来说说JVM(以及Java编译器)相关的话题。为啥要聊JVM捏?因为有很多Java程序员,由于对JVM缺乏了解,在碰到某些技术问题时无从下手;另外,由于缺乏对JVM的了解,可能导致写出来的代码性能巨差或者有严重的Bug。所以俺在之前的帖子“学习技术的三部曲:WHAT、HOW、WHY”中,强调了掌握内部机制的重要性。对于一个Java程序员来说,你不一定要非常清楚JVM的细节,但是对于一些关键的运作机制,还是要掌握大致的概念。
按照本系列的惯例,俺会问几个和JVM相关的问题,你如果对这些问题不是很明白,那得考虑花点时间去了解一下了。另外,鉴于有网友批评“本系列”帖子:光诊断毛病,不开出药方。(说得很形象,也很中肯)俺会针对下面提出的问题,写一些帖子来解答。
★关于基本类型和引用类型
很多新手不理解Java的基本类型和引用类型在本质上有什么区别。请看如下的问题:
◇这两种类型在内存存储上有什么区别?
◇这两种类型在性能上有什么区别?
◇这两种类型对于GC有什么区别?
关于前两个问题,请看之前的帖子“Java性能优化[1]:基本类型 vs 引用类型”。
★关于垃圾回收(Garbage Collection)
很多新手不理解GC的实现机制。请看如下的问题:
◇GC是如何判断哪些对象已经失效?
◇GC对性能会有哪些影响?
◇如何通过JVM的参数调优GC的性能?
关于GC的问题,可以参见之前的帖子“Java性能优化[3]:关于垃圾回收(GC)”。
★关于字符串
对于Java提供的String和StringBuilder,想必很多人都知道:String用于常量字符串,StringBuilder用于可变字符串。那Java当初为什么要这样设计捏?为啥不用一个类来统一搞定捏?
★关于范型(Generic Programming)
从JDK 1.5开始,Java引入了一个重量级的语法:范型。不过捏,很多新手仅仅知道范型的皮毛,而对于很多本质的东东,不甚了解。
◇GP是在编译时实现的还是在运行时实现的?为什么要这么实现?
◇GP的类型擦除机制是咋回事?有啥优点/缺点?
◇使用范型容器(相对于传统容器)在性能上有啥影响?为什么?
★关于多线程
另外,多线程也是大部分Java新手的短板。所以俺最后再来提几个关于多线程的问题。
◇synchronized关键字是怎么起作用滴?
◇synchronized的颗粒度(或者说作用域)如何?是针对某个类还是针对某个类对象实例?
◇synchronized对性能有没有影响?为什么?
◇volatile关键字又是派啥用滴?啥时候需要用这个关键字捏?
上次的帖子讨论了Java异常机制的几种误用,今天咱们来说说JVM(以及Java编译器)相关的话题。为啥要聊JVM捏?因为有很多Java程序员,由于对JVM缺乏了解,在碰到某些技术问题时无从下手;另外,由于缺乏对JVM的了解,可能导致写出来的代码性能巨差或者有严重的Bug。所以俺在之前的帖子“学习技术的三部曲:WHAT、HOW、WHY”中,强调了掌握内部机制的重要性。对于一个Java程序员来说,你不一定要非常清楚JVM的细节,但是对于一些关键的运作机制,还是要掌握大致的概念。
按照本系列的惯例,俺会问几个和JVM相关的问题,你如果对这些问题不是很明白,那得考虑花点时间去了解一下了。另外,鉴于有网友批评“本系列”帖子:光诊断毛病,不开出药方。(说得很形象,也很中肯)俺会针对下面提出的问题,写一些帖子来解答。
★关于基本类型和引用类型
很多新手不理解Java的基本类型和引用类型在本质上有什么区别。请看如下的问题:
◇这两种类型在内存存储上有什么区别?
◇这两种类型在性能上有什么区别?
◇这两种类型对于GC有什么区别?
关于前两个问题,请看之前的帖子“Java性能优化[1]:基本类型 vs 引用类型”。
★关于垃圾回收(Garbage Collection)
很多新手不理解GC的实现机制。请看如下的问题:
◇GC是如何判断哪些对象已经失效?
◇GC对性能会有哪些影响?
◇如何通过JVM的参数调优GC的性能?
关于GC的问题,可以参见之前的帖子“Java性能优化[3]:关于垃圾回收(GC)”。
★关于字符串
对于Java提供的String和StringBuilder,想必很多人都知道:String用于常量字符串,StringBuilder用于可变字符串。那Java当初为什么要这样设计捏?为啥不用一个类来统一搞定捏?
★关于范型(Generic Programming)
从JDK 1.5开始,Java引入了一个重量级的语法:范型。不过捏,很多新手仅仅知道范型的皮毛,而对于很多本质的东东,不甚了解。
◇GP是在编译时实现的还是在运行时实现的?为什么要这么实现?
◇GP的类型擦除机制是咋回事?有啥优点/缺点?
◇使用范型容器(相对于传统容器)在性能上有啥影响?为什么?
★关于多线程
另外,多线程也是大部分Java新手的短板。所以俺最后再来提几个关于多线程的问题。
◇synchronized关键字是怎么起作用滴?
◇synchronized的颗粒度(或者说作用域)如何?是针对某个类还是针对某个类对象实例?
◇synchronized对性能有没有影响?为什么?
◇volatile关键字又是派啥用滴?啥时候需要用这个关键字捏?
相关文章推荐
- JAVA基础——深入了解JVM。
- Java输出JVM和操作系统的相关属性 zz
- Java系列:JVM中的OopMap(zz)
- 从0到1了解JVM基本原理(一):Java内存区域
- java未来发展方向!新手入门了解
- 看图了解Java中JDK与JRE、JVM的各自的作用及区别
- Java语言的5个特点,帮助新手了解Java
- java未来发展方向!新手入门了解
- 新手学习java一分钟了解Java核心技术
- 了解JVM之JAVA内存区域————运行时数据区域
- Java新手的通病[4]:异常处理使用不当
- Java 新手的通病
- Java新手的通病
- java基础之jvm、jre、jdk、j2se、j2ee、j2me了解
- java未来发展方向!新手入门了解
- [Java基础]Java新手通病的知识总结
- 你真的了解面试问题的意义吗?-java面试基础篇(1)-jvm
- Java系列:JVM指令详解(上)(zz)
- zz Java新手入门必看的30个问题
- JAVA新手入门--对数据类型/标识符/包等概念的初步认识与了解