`
mengqingyu
  • 浏览: 333760 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JVM原理分析及性能调优

阅读更多
一.Javac
1.Javac编译器的作用
将符合Java语言规范的源代码转化成符合Java虚拟机规范的Java字节码。

2.编译器主要的几个处理阶段
词法分析、语法分析、语义分析和代码生成,基于访问者模式来遍历语法树的过程。

二.ClassLoader
将Class加载到JVM中,审查每个类应该由谁加载,将Class字节码重新解析成JVM统一要求的对象格式。

1.ClassLoader等级加载机制
(1)Bootstrap ClassLoader,主要加载JVM自身工作需要的类,这个ClassLoader完全是JVM自己控制的,没有更高一级的父加载器,也没有子加载器。
(2)ExtClassLoader,它服务的特定目标在System.getProperty("java.ext.dirs")目录下。
(3)AppClassLoader,它的父类是ExtClassLoader。所有在System.getProperty("java.class.path")目录下的类都可以被这个类加载器加载。
扩展类加载器,通常是继承URLClassLoader类或是其他子类,它的父加载器都是AppClassLoader,因为不管调用哪个父类构造器,创建的对象都必须最终调用getSystemClassLoader()作为父加载器获得AppClassLoader。

2.加载class文件
(1)找到.class文件并把这个文件包含的字节码加载到内存中,通过ClassLoader类findClass()方法来实现。
(2)又可分为三个步骤,分别是字节码验证、Class类数据结构分析及相应的内存分配和最后的符号表的链接。
(3)类中静态属性和初始化赋值,以及静态块的执行等。

3.显示加载一个类的方式
(1)通过类Class中的forName()方法。
(2)通过类ClassLoader中的loadClass()方法。
(3)通过类ClassLoader中的findSystemClass()。

4.什么情况下实现自己的ClassLoader
(1)在自定义路径下查找自定义的class类文件。
(2)保证通过网络传输的类的安全性,可以将类经过加密后再传输,在加载到JVM之前需要对类的字节码再解密。
(3)如果我们可以检查已经加载的class文件是否被修改,如果修改了,可以重新加载这个类,从而实现类的热部署。

三.JVM
1.体系结构
(1)类加载器,在JVM启动时或者在类运行时将需要的class加载到JVM中。
(2)执行引擎,任务是负责执行class文件中包含的字节码指令,相当于实际机器上的CPU。
(3)内存区,将内存划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或者PC指针的记录器等。
(4)本地方法调用,调用C或C++实现的本地方法代码返回结果。

2.类加载器
每一个被JVM装载的类型都有一个对应的java.lang.Class类的实例来表示该类型。

3.执行引擎
执行引擎是JVM的核心部分,执行引擎的作用就是解析JVM字节码指令,得到执行结果。执行引擎具体采取什么方式由JVM的实现厂家自己去实现。
(1)直接解释执行。
(2)采用JIT技术,将字节码转成本地代码去执行。如JVM在执行程序时会记录某个方法的执行次数,如果次数到一个阀值就会编译这个方法为本地代码。
(3)基于栈的架构,实现JVM跨平台,更好地优化代码和指令的紧凑性。如SUN的hotspot是基于栈的执行引擎。
(4)基于寄存器的架构,性能较好,但无法跨平台,因为在没有或者很少的寄存器的机器上也要同样能正确地执行Java代码。如Google的Android平台上的Dalvik VM就是基于特定芯片(ARM)设计的基于寄存器的架构。

4.内存管理
(1)PC寄存器,用于保存当前正常执行的程序的内存地址。
(2)本地方法栈,为JVM运行Native方法准备的空间,很多Native方法都是用C语言实现的,所有它通常又叫C栈。
(3)Java栈,当创建一个线程时,JVM就会为这个线程创建一个对应的Java栈,这个Java栈中又会含有多个栈帧,一个栈帧对应一个方法和方法内的变量,返回值等信息。
(4)Java堆,存储Java对象的地方,它是JVM管理Java对象的核心存储区域,被所有Java线程所共享。
(5)方法区,用于存储类结构信息,包括:常量池、域、方法数据、方法体、构造函数、实例初始化、接口初始化都存储在这个区域。属于Java堆中的永久区。
(6)常量池,包括:编译期的数字常量、方法或者域的引用。属于方法区的一部分。

5.内存分配策略
(1)静态内存分配
(2)栈内存分配
(3)堆内存分配

6.内存回收策略
(1)静态内存分配和回收,Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。如局部变量包括数据原生类型(long等占用8个字节)和对象的引用(Object对象类型引用会占用4个字节空间)。
(2)动态内存分配和回收,Java中对象的内存空间是动态分配的,所谓的动态分配就是在程序执行时才知道要分配的存储空间大小。
(3)基于分代的垃圾收集方式,把对象按照寿命长短来分组,分为年轻代和年老代,新创建的对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象划分到年老代。年老代的收集频度不像年轻代那么频繁。

四、JVM调优
1.设置虚拟内存(堆大小,及年轻代年老代比例)
2.选择垃圾收集器(根据实际情况,jdk5以后根据配置自动选择)
2.逻辑集群解决内存问题(根据实际情况)解决过大堆内存full gc的卡顿
3.开启server模式(默认client,jdk5以后根据配置自动选择)
分享到:
评论

相关推荐

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    总的来说,JVM原理、JVM调优、JVM内存模型和JAVA并发是Java程序员和系统管理员需要深入了解的知识点,因为它们直接影响到Java程序的性能和稳定性。了解这些知识点有助于开发者编写性能更优的代码,并在生产环境中对...

    深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理).zip

    《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...

    JAVA应用JVM原理及参数调优深入讲解视频.rar

    通过以上对JVM原理和参数调优的深入学习,开发者可以更好地理解Java应用程序的运行机制,优化系统性能,解决可能出现的内存溢出、性能瓶颈等问题。本课程详细讲解了这些内容,无论你是初学者还是经验丰富的开发者,...

    个人总结之—JVM性能调优实战

    - **JVM结构与工作原理**:了解JVM的基本组成及其工作流程对于进行有效的性能调优至关重要。 - **内存区域划分**:JVM的内存被划分为不同的区域,如堆区、方法区、栈区等,每个区域都有其特定的功能和管理机制。 -...

    JVM、GC详解及调优_jvm_JVM、GC详解及调优_

    本文将根据提供的信息,深入阐述JVM的工作原理,GC的机制以及如何进行JVM的性能调优。 首先,JVM是Java语言的核心组成部分,它为Java程序提供了运行时环境。JVM的主要任务是执行字节码,确保跨平台的兼容性。JVM的...

    JVM体系结构与GC调优

    理解JVM的体系结构和GC机制,并进行相应的调优,是提高Java应用性能的关键。通过合理配置JVM参数,可以有效地减少垃圾收集的开销,提升系统响应速度和稳定性。同时,不断学习和实践,结合监控工具,能够更好地应对...

    06.JVM原理讲解和调优.pdf

    JVM 原理讲解和调优 JVM(Java Virtual Machine,Java 虚拟机)是 Java 语言的核心组件,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 的主要功能是将 Java 字节码转换为...

    jvm和gc详解及调优

    《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业书籍,对于Java开发者来说,是进阶提升的必备资料。书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能...

    阿里巴巴Java性能调优实战(2021华山版).docx

    6. Java性能调优:Java性能调优包括Java编程性能调优、多线程性能调优、JVM性能监测及调优、设计模式调优和数据库性能调优等。 7. Java编程性能调优:Java编程性能调优包括基础数据类型、容器调优和网络通信调优等。...

    JVM垃圾回收机制与GC性能调优

    本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用程序的主要内存区域,用于存储所有类实例和数组。它分为三个主要区域:新域(Young Generation)、旧域(Old Generation)和...

    JVM实战-JVM调优案例分析与MyEclipse性能调优实战

    ### JVM实战-JVM调优案例分析与MyEclipse性能调优实战 #### 实验背景与目标 在现代软件开发过程中,提升开发效率是至关重要的环节之一。MyEclipse和Eclipse作为主流的集成开发环境(IDE),被广泛应用于Java项目的...

    JVM原理讲解和调优,详细讲解JVM底层

    JVM的性能调优往往依赖于理解和调整这些内存区域的分配大小、垃圾回收策略等参数。通过设置JVM启动参数,如-Xmx、-Xms、-XX:SurvivorRatio等,开发者可以控制堆的大小和新生代与旧生代的比例,以及永久代的大小等,...

    JVM 监控 调优 工具

    在Java应用程序的开发和运行过程中,了解JVM的工作原理,监控其状态,以及进行性能调优是至关重要的。本文将深入探讨JVM内存结构、监控工具及其在调优和GC优化中的应用。 **JVM内存机构** JVM内存主要分为以下几个...

    JVM性能调优-JVM内存整理及GC回收.docx

    JVM性能调优-JVM内存整理及GC回收 JVM(Java Virtual Machine)性能调优是 Java 开发者需要掌握的重要技能之一。 JVM 的性能调优主要涉及到 JVM 内存整理、垃圾回收(GC)机制等方面。 Java 中的值传递和引用传递...

    JVM GC原理, heapsize调优

    了解垃圾回收机制、合理设置堆内存大小、选择合适的垃圾回收算法,以及诊断和解决GC性能问题,都是进行性能调优时需要重点考虑的方面。通过实践中不断尝试和调整,开发者可以为自己的应用找到最佳的GC配置,以达到...

    JVM性能调优经典教程

    JVM性能调优是一项关键技术,旨在优化JVM的内存管理、垃圾收集、类加载等方面,以提升程序运行速度、减少内存占用并避免系统崩溃。本教程"JVM性能调优经典教程"由马士兵老师倾力讲解,旨在帮助Java开发者进阶,掌握...

    阿里+Java+开发手册、阿里巴巴Java性能调优实战

    在当今信息技术快速发展的时代背景下,Java作为一门广泛使用的编程语言,其开发规范和性能调优成为了提升开发效率和保证系统稳定性的关键。阿里巴巴作为全球领先的科技企业,在Java开发和性能调优方面积累了丰富的...

    JVM性能调优-JVM内存整理及GC回收

    这份文档详细阐述了JVM性能调优的关键概念,包括JVM内存模型、垃圾回收(Garbage Collection, GC)的原理以及各种垃圾回收算法,这些都是JAVA程序员在日常工作中需要理解和掌握的核心技术。 首先,JVM内存模型是...

    (主讲视频)JVM原理、内存模型、性能调优

    ### JVM原理、内存模型、性能调优 #### 一、JVM原理概述 Java虚拟机(JVM)是一种用于执行Java字节码的虚拟机。它为Java程序提供了一个独立于平台的运行环境,并且能够自动处理内存管理和垃圾回收等工作。JVM的核心...

    JVM调优实践 ⼀、JVM调优准备⼯作 实验报告 pdf

    在JVM调优实践中,了解各个运行时数据区的工作原理至关重要。以下是对这些区域的详细解析: 1. **虚拟机栈**:每个线程都有一个独立的虚拟机栈,用于存储方法调用时的栈帧。栈帧中包含局部变量表(存储方法中的变量...

Global site tag (gtag.js) - Google Analytics