JVM调优系列:(一)什么是JVM

SUN的JDK从1.3.1开始使用HotSpot虚拟机技术,主要使用C++实现,JNI接口部分用C实现.

JAVA原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢.而HotSpot编译器将常用的部分代码编译为本地(native)代码,这样显著高了性能.

HotSpot包括一个解释器和两个编译器,解释与编译混合执行模式,默认启动解释执行。

编译器:java源代码被编译器编译成class文件(字节码),java字节码在运行时可以被动态编译(JIT)成本地代码

解释器: 解释器用来解释class文件(字节码).

server启动慢,占用内存多,执行效率高,适用于服务器端应用;

client启动快,占用内存小,执行效率没有server快,默认情况下不进行动态编译,适用于桌面应用程序。

java-version

Java HotSpot(TM) Client VM (build 14.3-b01,mixed mode, sharing)

mixed mode 解释与编译 混合的执行模式 默认使用这种模式

 java -Xint -version

Java HotSpot(TM) Client VM (build 14.3-b01,interpreted mode, sharing)

interpreted 纯解释模式禁用JIT编译

java-Xcomp -version

Java HotSpot(TM) Client VM (build 14.3-b01,compiled mode, sharing)

compiled 纯编译模式(如果方法无法编译,则回退到解释模式执行无法编译的方法)

JAVA应用由应用线程和JVM系统线程组成:

?VMThread

? VMPeriodic Task Thread

?Finalizer(java)

?Reference Handler(java)

?CompilerThread

? SignalDispatcher

? Attach  Listener

? LowMemory Detector

Java代码编译是由Java源码编译器来完成,流程图如下所示:

生成的class文件由以下部分组成, CLASS文件信息可以通过JAVAP查看:

?结构信息。包括class文件格式版本号及各部分的数量与大小的信息

?元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池

?方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、操作数栈与局部变量区大小、操作数栈的类型记录(StackMapTable)、调试符号信息(LineNumberTable)

Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:

-XX:+PrintCompilation或-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly YourMainClass通过反汇编插件打印JIT编译生成的代码,jdk1.6U20开始.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 09:40:33

JVM调优系列:(一)什么是JVM的相关文章

[转] JVM 调优系列 & 高并发Java系列

1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html 2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com/18740.html 3.JVM调优总结(3):垃圾回收面临的问题:http://www.importnew.com/18747.html 4.JVM调优总结(4):分代垃圾回收:http://www.importnew.com/19255.html 5.JVM调优总结(5):典型配置:http:

JVM调优系列:(五)JVM常用调试参数和工具

JVM常用调试用参数: –verbose:gc在虚拟机发生内存回收时在输出设备显示信息 -Xloggc:filename把GC相关日志信息记录到文件以便分析 -XX:-HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息 -XX:OnError="<cmdargs>;<cmd args>" 出现致命ERROR之后运行自定义命令 -XX:-PrintClassHistogram遇到Ctrl-Break后打印类实例的柱状信息,与

JVM调优系列:(四)GC垃圾回收

跟踪收集算法: 复制(copying): 将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A.因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,不需要标记骤,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存. 标记清除(mark-sweep): 收集器先从根开始访问所有对象,标记活跃对象.然后再遍历一次整个内存区域,把所有没有标记活跃的对象进行回收处理

JVM调优系列:(二)JVM运行时数据区域

1) Method Area 2) Heap 3) Java Stacks 4) PC Registers 5) Native Method Stacks JAVA的JVM的内存模型大致可分为3个区: 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 线程在执行一个Java方法时候,它的PC寄存器总是指向下一条需要执行的指令, 而它

JVM调优系列:(三)类加载机制

JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述: 每个ClassLoader加载Class的过程是: 1.检测此Class是否载入过(即在cache中是否有此Class),如果有到8,如果没有到2 2.如果parent classloader不存在(没有parent,那parent一定是bootstrap),到4 3.请求parent classloader载入,如果成功到8,不成功到5 4.请求jvm从bootstrap classloade

JVM调优经验分享

前言 一.JVM调优知识背景简介 二.JVM调优参数简介 三.JVM调优目标 四.JVM调优经验 结束语 <br/> 本次分享探讨的JVM调优是指server端运行的JVM调优,适应版本为[1.6– 1.7], 不涉及最新的1.8版本. 假设线程池.连接池.程序代码等都已经做过优化,效果(系统吞吐量.响应性能)仍然不理想,我们就可以考虑JVM调优了. <br/> 一. JVM调优知识背景简介 1.堆与栈的概念 堆和栈是程序运行的关键:栈是运行时的单位,而堆是存储的单位. 栈解决程序

jvm原理及性能调优系列(jvm调优)

个人认为jvm调优主要通过以下方法解决 1.设置合适的最大堆内存(新生代和老生代的最大和值)和最小堆内存(jvm启动时占用的操作系统内存大小),及设置好堆的比例分配. 2.设置合适的新生代 因为对其对系统性能和GC回收有一定的影响. 3.设置合适的持久代 因为其直接决定系统可以支持多少个类定义和多少个常亮. 4.设置合适的线程栈 否则系统可能因为线程所需资源和空间不够而异常退出.

JVM调优知识

一.Java应用服务器 Tomcat.Nginx.Resin.等多种应用服务器,虽然JVM做为容器,提供的是一个Java Web的运行时环境,以支持Servlet/JSP等等这些内容的运行但是我们都很清楚,其本质上是还是一个Java应用程序.现在有哪些java应用服务器呢?商业的有BEA Weblogic Server.IBM Websphere Application Server.Oracle Application Server.Sybase EAServer.免费开源的java应用服务器

JVM调优[转]

JVM调优总结-序 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看,又添加了一些东西.突然发现,基础真的很重要.学习的过程是一个由表及里,再由里及表的过程.呵呵,所谓的"温故而知新".而真正能走完这个轮回的人,也就能称为大牛或专家了.这个过程可能来来回回,这就是所谓"螺旋上升",而每一次轮回都有新的发现. 这回添加的东西主要集中在基础的一些问题上,还有一些这两年思考的问题.这些问题可能平时我们不会刻意去想,但是真正看清楚了,却发现还是大有裨益的:)希望对大