`
saybody
  • 浏览: 908373 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java新手的通病[5]:不了解JVM

阅读更多

  上次的帖子 讨论了Java异常机制的几种误用,今天咱们来说说JVM(以及Java编译器)相关的话题。为啥要聊JVM捏?因为有很多Java程序员,由于对 JVM缺乏了解,在碰到某些技术问题时无从下手;另外,由于缺乏对JVM的了解,可能导致写出来的代码性能巨差或者有严重的Bug。所以俺在之前的帖子“学习技术的三部曲:WHAT、HOW、WHY ”中,强调了掌握内部机制的重要性。对于一个Java程序员来说,你不一定要非常清楚JVM的细节,但是对于一些关键的运作机制,还是要掌握大致的概念。<!-- program-think-->

  按照本系列的惯例,俺会问几个和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关键字又是派啥用滴?啥时候需要用这个关键字捏?


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想 和本文原始地址:

http://program-think.blogspot.com/2009/05/defect-of-java-beginner-5-jvm.html

分享到:
评论

相关推荐

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例.zip

    Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...

    Java Image Processing Recipes: With OpenCV and JVM

    Java Image Processing Recipes: With OpenCV and JVM English | ISBN: 1484234642 | 2018 | 379 pages | PDF

    解决jvmjava.net.BindException: Address already in use: JVM_Bind异常

    【Java中的`java.net.BindException: Address already in use: JVM_Bind`异常】 在Java编程中,当你尝试启动一个服务器端应用,如Tomcat,或者任何需要监听特定端口的服务时,可能会遇到`java.net.BindException: ...

    第4节: 揭秘JVM字符串常量池和Java堆-01

    第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: ...

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    java.net.BindException: Address already in use: JVM_Bind :8088(端口冲突)

    在myeclipse中将html文件改成jsp文件时myeclipse卡住;将之前的任务关掉;再打开时多次部署项目的时候报错

    20丨磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型.html

    20丨磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型.html

    新手必须学习资料:JVM详解

    * 高度可移植性:Java 程序可以在任何支持 Java 的操作系统上运行,而不需要再次编译。 * 高度安全性:Java 有一个安全沙箱,防止恶意代码的运行。 * 高度动态性:Java 具有高度的动态性,能够在运行时动态加载类库...

    metrics-jvm-3.1.5-API文档-中文版.zip

    标签:jvm、metrics、dropwizard、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    第3节: 揭秘JVM运行时数据区-02

    第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行...

    Optimizing Java: Practical Techniques for Improving JVM Application Performance

    Dive into JVM garbage collection logging, monitoring, tuning, and tools Explore JIT compilation and Java language performance techniques Learn performance aspects of the Java Collections API and get ...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    ### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....

    metrics-jvm-3.1.5-API文档-中英对照版.zip

    标签:jvm、metrics、dropwizard、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    1. 使用 Java 提供的垃圾回收机制:Java 提供了多种垃圾回收机制,例如 generational garbage collection、parallel garbage collection 等。 2. 使用外部工具:例如使用 Eclipse 的 Memory Analyzer Tool (MAT) ...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    ### Java虚拟机(JVM)内存设置与调优详解 #### 引言 在现代软件开发中,Java虚拟机(JVM)作为执行Java字节码的核心组件,其性能直接影响到Java应用的运行效率与稳定性。特别是在大数据处理场景下,合理设置JVM内存...

    Java性能优化指南:JVM调优技巧与实践

    Java虚拟机(JVM)的性能调优是确保Java应用程序高效运行的关键。通过合理配置JVM参数和采用一些调优技巧,开发者可以显著提高应用程序的性能。本文将探讨一些常用的JVM性能调优技巧,并提供代码示例来展示这些技巧...

    JAVA文件编译执行与虚拟机(JVM)介绍

    1. **JAVA文件的编译与执行**:JAVA程序首先通过编译器转换为中间代码(字节码),然后由JVM解释执行。 2. **JVM的角色与功能**:JVM作为JAVA程序运行时环境的核心组件,提供了平台无关性、安全性和动态链接等特性。...

    java 查看JVM中所有的线程的活动状况

    在Java编程环境中,了解JVM(Java虚拟机)中所有线程的活动状态对于调试多线程程序至关重要。本文将详细讲解如何查看JVM中的线程活动情况,并提供相关示例代码。 首先,Java提供了`java.lang.management....

    006RJPOS:增加实现JVM的6条指令,修复若干BUG

    在IT行业中,JVM(Java Virtual Machine)是Java语言的核心组成部分,它负责执行Java程序。"006RJPOS:增加实现JVM的6条指令,修复若干BUG"这个标题表明这是一个关于JVM的更新或者优化项目,其中开发者新增了6条JVM...

    大数据必学Java基础(九):JDK,JRE,JVM的区别

    3. JVM(Java Virtual Machine):Java虚拟机,是Java程序的执行引擎。它负责解析和执行.class字节码文件,实现了Java的跨平台特性。JVM是JRE的核心部分,负责加载类、执行字节码并管理内存。 二、JDK和JRE JDK是...

Global site tag (gtag.js) - Google Analytics