Java内存结构 Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域. 在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配. java堆是垃圾收集器管理的主要区域,因此也被成为“GC堆”(Garbage Collected Heap).从内存回收角度来看java堆可分为:新生代和老生代(当然还有更细致的划分,在下一章会讲到). 从内存分配的角度看,线…
ImportNew注:本文是JVM性能优化 系列-第3篇-<JVM性能优化, Part 3 —— 垃圾回收> 第一篇 <JVM性能优化, Part 1 ―― JVM简介 > 第二篇<JVM性能优化, Part 2 ―― 编译器> Java平台的垃圾回收机制大大提高的开发人员的生产力,但实现糟糕的垃圾回收器却会大大消耗应用程序的资源.本文作为JVM性能优化系列的第3篇,Eva Andeasson将为Java初学者介绍Java平台的内存模型和GC机制.她将解释为什么碎片化(…
1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 行时常量池).直接内存. 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机概念模型中,字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等…
4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNormal { //required private final String foodName;//名称 private final int reilang;//热量 //optional private final int danbz;//蛋白质 private final int dianfen;…
01. JVM是什么    概述:        大白话:             全称Java Virtual Machine(Java虚拟机), 它是一个虚构出来的计算机, 通过实际的计算机来模拟各种计算机的功能.         专业版:            JVM是一个进程, 用来模拟计算单元, 将.class字节码文件转成计算机能够识别的指令.        //这里可以联想以前大家学的"VM ware", 它也是一个虚拟机.        //它们的区别就在于: VM W…
ImportNew注:本文是JVM性能优化 系列-第4篇.前3篇文章请参考文章结尾处的JVM优化系列文章.作为Eva Andreasson的JVM性能优化系列的第4篇,本文将对C4垃圾回收器进行介绍.使用C4垃圾回收器可以有效提升对低延迟有要求的企业级Java应用程序的伸缩性. 到目前为止,本系列的文章将stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java应用程序开发的基础要求,因此这一问题亟待改善.幸运的是,针对此问题,JVM中已经出…
作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson将对不同种类的编译器做介绍,并比较客户端.服务器端和层次编译产生的编译结果在性能上的区别,此外将对通用的JVM优化做介绍,包括死代码剔除.内联以及循环优化. Java编译器存在是Java编程语言能独立于平台的根本原因.软件开发者可以尽全力编写程序,然后由Java编译器将源代码编译为针对于特定平台的高…
JVM性能优化这些列文章共分为5章,是ImportNew上面翻译自Javaworld: 第1章:JVM技术概览 第2章:编译器 第3章:垃圾回收 第4章:并发垃圾回收 第5章:可伸缩性 众所周知,Java应用程序是运行在JVM上的,但是你对JVM有所了解么?作为这个系列文章的第一篇,本文将对经典Java虚拟机的运行机制做简单介绍,内容包括“一次编写,到处运行”的利弊.垃圾回收的基本原理.常用垃圾回收算法的示例和编译器优化等.后续的系列文章将会JVM性能优化的内容进行介绍,包括新一代JVM的设计思…
 jvm性能优化及内存分区 2012-09-17 15:51:37 分类: Java Some of the default values for Sun JVMs are listed below. JDK 1.3.1_06 Initial Size Maximum Size Client JVM 1MB 32MB Server JVM 1MB 64MB JDK 1.4.1_01 Initial Size Maximum Size Client JVM 4MB 64MB Server JVM…
实战性能优化 1 重新认知JVM 之前我们画过一张图,是从Class文件到类装载器,再到运行时数据区的过程,现在咱们把这张图不妨丰富完善一下,展示了JVM的大体物理结构图. 执行引擎:用于执行JVM字节码指令 主要由两种实现方式: (1)将输入的字节码指令在加载时或执行时翻译成另外一种虚拟机指令: (2)将输入的字节码指令在加载时或执行时翻译成宿主主机本地CPU的指令集.这两种方式对应着字节码的解释执行和即时编译. 9.2 堆内存溢出 9.2.1 代码 记得设置参数比如-Xmx20M -Xms2…
JVM性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收机制)代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容 1.增加最大连接数 2.调整工作模式 3.启用gzip压缩 4.调整JVM内存大小 5.作为web服务器时.无Apache整合或者nginx 6.合理选择垃圾回收算法 7.尽量使用较新的JDK版本 生产配置实例 <Connectorport="8080"protocol="org.apache.coyot…
2. 垃圾收集器与内存分配策略 垃圾收集(Garbage Collection, GC)是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利.理解GC,对于理解JVM和Java语言有着非常重要的作用.并且当我们需要排查各种内存溢出.内存泄漏问题时,当垃圾收集称为系统达到更高并发量的瓶颈时,只有深入理解GC和内存分配,才能对这些"自动化"的技术实施必要的监控和调节. GC主要需…
3. 虚拟机执行子系统 3.1 Java跨平台的基础 Java刚诞生的宣传口号:一次编写,到处运行(Write Once, Run Anywhere),其中字节码是构成平台无关的基石,也是语言无关性的基础. Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联,这使得任何语言的都可以使用特定的编译器将其源码编译成Class文件,从而在虚拟机上运行. 3.2 Class类的文件结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说…
5. 早期编译优化 早起编译优化主要指编译期进行的优化. java的编译期可能指的以下三种: 前端编译器:将.java文件变成.class文件,例如Sun的Javac.Eclipse JDT中的增量式编译器(ECJ) JIT编译器(Just In Time Compiler):将字节码变成机器码,例如HotSpot VM的C1.C2编译器 AOT编译器(Ahead Of Time Compiler):直接把*.java文件编译成本地机器码,例如GNU Compiler for the Java(…
6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段. 6.1 JIT编译器 在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为"热点代码"(Hot Spot Code).为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个过程的编译器称为即时编译器(Just In Time Compiler) jav…
文章首发于公众号「陈树义」及个人博客 shuyi.tech,欢迎关注访问. 对于 Java 开发的同学来说,JVM 性能优化可以说是比较难掌握的知识点.这不仅因为 JVM 性能优化需要掌握晦涩难懂的 JVM 知识,还因为 JVM 性能优化很难有使用场景.这导致了许多人对 JVM 性能优化不熟悉,感觉就像是空中楼阁的天物一样不可触及.这几天工作中做了一次 JVM 性能优化,我想这对于 JVM 调优的初学者会有较大帮助. 背景 我们都知道 JVM 分为了新生代和老年代,并且我们在启动应用的时候都会配…
利用jconsul检测线程死锁,    死锁的线程,会有   已锁定    三个字 visualVm                       也在jdk里 VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回收器.执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作.本文主要介绍如何使用 VisualVM 进行性能分析及调优.…
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性.首先我们先列举一些主导因素. 主流的硬件服务器提供了大量的内存 分布式系统有大量内存的需求,而且该需求在持续增长 一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量.这被称之为Java内存墙,如下图所示(图中表述Ja…
文章来源:https://zhuanlan.zhihu.com/p/25539690 Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行.当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成.GC优化很多时候就是减少stop…
Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行.当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成.GC优化很多时候就是减少stop-the-world 的发生. JVM GC回收哪个区域内的垃圾? 需要注意的是,JV…
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性.首先我们先列举一些主导因素. l  主流的硬件服务器提供了大量的内存 l  分布式系统有大量内存的需求,而且该需求在持续增长 l  一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量.这被称之为Java内存墙,如下图…
一.我们为什么要对JVM做优化 在本地开发环境中我们很少会遇到需要对JVM进行优化的需求,但是到了生产环境,我们可能会有下面的需求: 运行的应用"卡住了",日志不输出,程序没有反应 服务器的CPU负载突然升高 在多线程应用下,如何分配线程的数量? 本次使用的JDK版本为1.8 二.JVM的运行参数 在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行,绝大部分的参数保持默认即可. 2.1 三种参数类型 jvm的参数类型分为三类,分别是: 标准参数 -help…
Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1.增加最大连接数 2.调整工作模式 3.启用gzip压缩 4.调整JVM内存大小 5.作为Web服务器时,与Apache整合或Nginx 6.合理选择垃圾回收算法 7.尽量使用较新JDK版本 生产配置实例: <Connectorport="8080"protocol="org…
java性能优化权威指南读后笔记 三重境界 1.花似雾中看:对于遇到的额问题还看不清,不知道真真假假,是是非非. 2.悠然见南山:虽然刚开始对这个领域还不清楚,但随着时间推移,你对它有许多自己的见解,但对重要的知识还缺乏理解. 3.一览众山小:你对这个领域已经很熟悉了,能够游刃有余的解决遇到的问题. 三大步骤 1.性能监控 1.JVM性能监控: 1.监控垃圾收集报告(GC日志) 2.监控JIT编译器 3.监控内加载 2.依据: 1.GC日志 2.堆转储快照 3.线程快照 4.异常堆栈 2.性能分…
7. 深入了解性能优化 7.1 影响系统性能的方方面面 影响系统性能的因素有很多,以下列举了常见的一些系统性能优化的方向: 7.2 常用的性能评价和测试指标 响应时间 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间. 如:数据库查询花费的时间,将字符回显到终端上花费的时间,访问 Web 页面花费的时间: 并发量 指同一时刻,对服务器有实际交互的请求数.和网站在线用户数的关联. 吞吐量 对单位时间内完成的工作量(请求)的量度. 如:每分钟的数据库事务,每秒传送的文件千字节数,每…
标签: tomcat7 jvm 性能 分享到: 出处:http://www.iteye.com 该优化针对Linux X86_X64环境 1. Tomcat优化其实就是对server.xml优化(开户线程池,调整http connector参数) 搜索[<Executor name="tomcatThreadPool"],开启并调整为 <Executor name="tomcatThreadPool" namePrefix="catalina-…
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 一.为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MyS…
最近在做一个项目的性能优化,遇到好多以前没有关注过的性能问题,一头雾水,今天做个笔记,简单记录下JVM相关的参数设置. 一.JVM内存模型 首先介绍下Java程序具体执行的过程: Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀): 由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行: 在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运…
一.核心部分总结: 尽量在合适的场合使用单例[减负提高效率] 尽量避免随意使用静态变量[GC] 尽量重用对象,避免过多过常地创建Java对象[最大限度地重用对象] 尽量使用final修饰符[内联(inline)] 尽量使用局部变量[栈快] 尽量处理好包装类型和基本类型两者的使用场所[堆栈] 慎用synchronized,尽量减小synchronize的方法[锁定了对象] 尽量不要使用finalize方法[GC] 尽量使用基本数据类型代替对象 多线程在未发生线程安全前提下应尽量使用HashMap.…
  android性能优化相关的开发工具有很多很多种,这里对如下六个工具做个简单的使用介绍,主要有Android开发者选项,分析具体耗时的Trace view,布局复杂度工具Hierarchy View,应用启动时间,Memory.CPU.Network分析,静态代码检查工具Lint以及程序稳定性monkey.下面就开始学习下这些工具吧. 一.Android开发者选项   Andorid开发工具众多,首先就是手机自带的开发者选项了,至于手机怎么启动开发者选项,那么请自行百度或者google了,接…