java性能调优的基本知识

合集下载

Java虚拟机垃圾回收算法分析与性能调优

Java虚拟机垃圾回收算法分析与性能调优

篡霎Ⅵ渊黛疆J ava虚拟机垃圾回收算法分析与性能调优宿敬肖杨志云张燕(石家庄法商职业学院信息科学系河北石家庄050091)【摘要】阐述Java垃圾回收的作用。

介绍垃圾同收算法的优缺点,基于垃圾回收提出调优方法。

最后给出编码建议。

【关键词]Java虚拟机垃圾回收性能调优中图分类号:TP309.05文献标识码:^文章编号:1671—7597(2008)0910044—0l垃圾回收(G ar bage c011e ct i on,G c)是Java程序设计中内存管理的核心概念,J ava虚拟机(JⅧ)的内存管理机制被称为垃圾回收机制,用以跟踪正在使用的对象和发现并回收不再使用的对象。

该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。

垃圾回收机制的。

I=作原理是:垃圾回收器通过监控每一个对象的运行状态(包括申请、引用、被引用、赋值等),准确及时地释放对象,释放对象的根本原则是该对象不再被引用。

Java采用有向图的方式进行内存管理,垃圾I口】收器从有向图的根接点(Ja va程序中整个生存周期始终存在的那些类)开始,遍历被引用的所有接点,判断哪些接点符合垃圾收集的条件(即根接点不可达),然后把符合条件的对象删除,释放内存。

垃圾回收算法的选择和垃圾回收系统参数的合理调节直接影响着系统性能,因此需要开发人员做比较深入的了解。

一、垃圾回收算法分析Ja va虚拟机可以使用多种垃圾回收算法。

任何一种垃圾回收算法都具备如下两种功能:发现无用信息对象;回收被无用对象占用的内存空间,使得该宅间可被程序再次使用。

(一)垃圾回收的基本算法引用计数法、标记清除法和节点复制法是3种基本的垃圾收集算法。

引用计数是一种简单但速度很慢的垃圾同收技术。

每一个对象都含有一个引用计数器。

当有引用连接到对象时。

引用计数加l,当原有的引用离开作用域或置nul l时,引用计数减1,当某个对象的引用计数减为O时,就可以认为该对象为垃圾对象,可以予以回收。

基于JaVa EE的性能调优方法研究

基于JaVa EE的性能调优方法研究

垫墨 - 与 用 技 应
20 0 5年 7月 1日开始 正式 注人 ,试 验井 周 围 8口 监测 油井 有 5口井动 态 上见 到 了明显 反 应 ,主要
特 征研 究 、 目的菌 与原 生 菌之 间的竞 争 能力 研 究 , 目的菌 在储 层 微观 孔 道 内 的扩散 与 生存 、繁殖 能 力 的研 究等 ; ) ( 以储 层地 质 、 田开 发动 态 特征 为 4 油 基础 , 优选 适合 于在 目标 油藏 生存 繁 殖 、 够解 决 能 油 田开 发 主要 矛盾 的微 生物 菌种 ,是此 项技 术 成 败 的 关键 ; ) 据 目的菌 种 的 特 征 , 立 、 化 相 (根 5 建 优

线 程 池 上 限 的最 佳 方 式就 是 通
不 能提 供足 够 的外部 资源 连
难 的任 务

般 的方 案是 综合
ห้องสมุดไป่ตู้
过 监 控 应 用 的吞 吐 量 来 得 到 针



那 么 当前 的线 程 就 必 须 等

考 虑 当前 应 用 支 持 的用 户 数
量 计 算 出现 实 的 思 考 时 间 ( 即


x
长速度

定要保证 最小数量
2 5 0 个 线 程 会 是 较 为合 适 的

线程 池 调 优过 程 就 是 通 过

是 当前 应 用 平 常水 平 需 要 的连
最初 选 择
但 是这 种计 算方 式

客 户请 求 间 隔

接数
大值

如果连 接 不 够用 并且 连 连 接 数 量 会 增长 以支持 但是连 (下 转 第

java模拟面试题目(3篇)

java模拟面试题目(3篇)

第1篇一、Java基础知识1. 请简述Java语言的特点。

2. 什么是Java虚拟机(JVM)?它有什么作用?3. 什么是Java的内存模型?请解释Java内存模型中的几个关键概念:堆、栈、方法区、程序计数器、本地方法栈。

4. 什么是Java中的反射机制?请举例说明反射在Java中的应用。

5. 什么是Java中的泛型?请解释泛型的原理和作用。

6. 请简述Java中的四种访问控制符:public、protected、default、private。

7. 什么是Java中的继承和多态?请举例说明继承和多态在实际开发中的应用。

8. 什么是Java中的封装?请举例说明封装在实际开发中的应用。

9. 什么是Java中的接口和抽象类?它们之间有什么区别?10. 什么是Java中的异常处理?请解释try-catch-finally语句的执行顺序。

二、Java集合框架1. 请列举Java集合框架中的常用集合类及其特点。

2. 请简述ArrayList、LinkedList、HashMap、HashSet的区别。

3. 什么是Java中的泛型集合?请举例说明泛型集合的应用。

4. 什么是Java中的迭代器(Iterator)和枚举器(Enum)?请比较它们的区别。

5. 什么是Java中的List、Set、Map的遍历方法?6. 请解释Java中的ArrayList和LinkedList的内部实现原理。

7. 什么是Java中的HashMap的扩容机制?8. 什么是Java中的HashSet的内部实现原理?9. 请解释Java中的线程安全集合类,如CopyOnWriteArrayList、ConcurrentHashMap。

三、Java多线程与并发1. 什么是Java中的线程?请解释线程的创建、调度和同步。

2. 请简述Java中的线程状态,如新建、就绪、运行、阻塞、等待、超时等待、终止。

3. 什么是Java中的同步机制?请解释synchronized关键字的作用。

JVM_性能调优_参数列表

JVM_性能调优_参数列表

79
80
81 XX:ErrorFile=./hs_err_pid<pid
>.log
82 -XX:+PrintCompilation
83 -XX:+PrintGC
84 -XX:+PrintGCDetails
85 -XX:+PrintGCTimeStamps
86
XX:+PrintTenuringDistribution
65 XX:CMSIncrementalDutyCycleMin=< N> 66 XX:CMSIncrementalSafetyFactor=<N > 67 -XX:CMSIncrementalOffset=<N>
68 -XX:CMSExpAvgFactor=<N> 69 -XX:ConcGCThreads=n 70 -XX:MaxGCPauseMillis=<N> 71 -XX:GCTimeRatio=<N>
87 -XX:+TraceClassLoading
XX:+TraceClassLoadingPreorder 89 -XX:+TraceClassUnloading
88
90 -XX:+TraceClassResolution
91 -XX:+TraceClassUnloading
92 -XX:+TraceLoaderConstraints
JDK
设置JVM启动时初始内存堆的大小 设置JVM启动后动态申请堆内存的最大堆空间 为新生代分配的内存大小。 设置JVM线程栈的空间最大值。 每个线程栈大小(K),等于0时表示使用缺省值

《Java基础课件(PPT)》

《Java基础课件(PPT)》

注解和反射的概念和使用
注解是Java的强大特性之一,它可以为代码提供额外的信息和功能。反射是一种机制,允许我们在运行时检查 和操作类的属性和方法。了解注解和反射可以提高我们的编程效率和代码质量。
Java的性能调优和优化技巧
性能是软件开发过程中的一个重要问题。Java提供了各种调优和优化技巧,使 我们能够提高应用程序的性能和响应速度。
面向对象编程概念和Java中的 封装、继承和多态
面向对象编程是一种强大且灵活的编程范式。Java提供了封装、继承和多态等 面向对象的特性,让程序员可以更好地组织和管理代码。
Java中的异常处理和文件IO操 作
异常处理是Java中重要的编程概念,它可以帮助我们识别和处理程序中的错误 情况。通过学习文件IO操作,我们可以读写和操作文件,实现数据的持久化 和交换。
Java的安全机制和加密算法
安全是软件开发的重要方面。Java提供了各种安全机制和加密算法,使我们可以保护数据的机密性和完整性, 确保应用程序的安全。
Java的集合和泛型
集合是Java中常用的数据结构,用于存储和操作多个对象。Java的集合框架提供了各种集合类和接口,使我们 能够轻松地操作数据。泛型是Java的一项强大的特性,它可以增加代码的安全性和可读性。
理解Java语言的语法和结构
Java语言具有清晰的语法和结构,使开发人员可以轻松编写可读性强的代码。 了解Java的语法和结构对于正确编写和调试程序至关重要。
Java数据类型、运算符、流程 控制和数组
掌握Java的数据类型可以帮助你有效地处理各种数据。了解运算符和流程控制 语句可以使你的程序实现各种功能。而数组则是一种重要的数据结构,在Java 中经常用于存储和操作多个相同类型的元素。

java 技术标准

java 技术标准

java 技术标准Java技术标准是指在Java开发过程中遵循的一系列规定和约定,用于确保Java应用程序的可靠性、安全性、可维护性以及可移植性。

Java技术标准的制定旨在提高Java开发的效率和质量,使Java应用程序具备良好的可扩展性和互操作性。

以下是Java技术标准的一些具体内容:1. Java编码规范:包括对变量、方法、类、包等命名规则的约定,以及对代码格式、注释、排版等书写风格的统一要求,以提高代码的可读性和可维护性。

2. 异常处理:Java技术标准规定了一套异常处理的约定,包括异常的声明、抛出、捕获和处理。

通过合理地处理异常,可以提高程序的稳定性和健壮性。

3. 线程安全:Java技术标准要求Java程序员在编写多线程程序时必须考虑线程安全问题,并提供了同步机制、线程锁等工具来保证线程安全。

4. 数据持久化:Java技术标准规定了数据持久化的规范,包括对数据库连接、SQL语句、事务处理等内容的约定,以保证数据的安全和一致性。

5. 安全性:Java技术标准要求Java应用程序必须具备一定的安全性,包括对密码学、加密算法、安全协议等方面的要求。

6. 跨平台性:Java技术标准要求Java应用程序必须具备良好的跨平台性,能够在不同的操作系统、硬件平台上运行,并保持一致的行为和性能。

7. 性能优化:Java技术标准还涉及性能优化方面的规范,包括内存管理、垃圾回收、性能调优等方面的约定和建议。

以上内容只是Java技术标准的一部分,实际上Java技术标准涵盖了Java 开发过程中的各个方面,还包括许多其他的规范和约定。

遵循这些标准可以提高Java应用程序的质量和可靠性,并使Java应用程序具备良好的可维护性和可移植性。

java程序员开发降本增效措施

java程序员开发降本增效措施

java程序员开发降本增效措施Java程序员开发降本增效措施作为Java程序员,开发降本增效是我们不断追求的目标。

随着技术的快速发展与竞争的日益激烈,我们需要寻找一些有效的措施来提高开发效率,减少开发成本,以便在市场中立于不败之地。

在本文中,将介绍一些关于降本增效的实践措施。

一、优化开发流程优化开发流程是提高开发效率的关键步骤之一。

对于Java程序员来说,以下是一些可以优化的开发流程:1.需求分析:在开始开发之前,充分理解客户需求。

与客户进行沟通,了解他们的期望,以便明确项目目标和要求。

2.项目规划:对项目进行详细的规划。

确定优先级和时间表,将项目分解成可管理的小任务,并确保项目进展按计划进行。

3.代码管理:使用版本控制工具(如Git)进行代码管理。

每个开发人员都应采用分支的方式进行开发,以便能够并行开发和合并代码。

4.自动化构建:利用构建工具(如Maven或Gradle)来管理项目的依赖和构建过程。

通过自动化构建,可以减少人工操作,提高构建速度和准确性。

二、提高编码效率编码是Java程序员最基本的工作之一。

以下是一些提高编码效率的实践措施:1.选择优秀的开发工具:选择合适的集成开发环境(IDE)来提高编码效率。

常用的IDE有Eclipse、IntelliJ IDEA等,它们提供了许多便捷的功能,比如自动补全、代码导航、重构等,可以帮助开发人员更快地编写高质量的代码。

2.遵循最佳实践:遵循Java编程的最佳实践,使用有效的命名规范和注释,编写可读性强的代码。

良好的编码规范可以提高代码的可维护性和可读性,并减少后续开发和调试工作。

3.代码复用:合理利用现有的代码库,积累和管理常用的代码模块。

通过代码复用,可以避免重复编写相似的功能代码,提高开发效率。

4.持续学习:不断学习新的技术和框架,了解行业最佳实践和趋势。

关注并参与社区,与其他开发人员交流经验和技巧,以提高自己的编码水平。

三、性能优化与测试性能优化和测试是保障项目质量和用户体验的重要环节。

jvm性能调优工具之jmap命令详解

jvm性能调优工具之jmap命令详解

jvm 性能调优⼯具之jmap 命令详解jmap 名称:Java Memory Map (内存映射)官⽅⽂档:https:///javase/1.5.0/docs/tooldocs/share/jmap.html功能描述:内容太多,直接看前辈们的总结:java 命令--jmap 命令使⽤(这篇⽂章写得⾮常好)Java 虚拟机的内存组成以及堆内存介绍Java GC ⼯作原理JVM 内存区域划分Eden Space 、Survivor Space 、Tenured Gen ,Perm Gen 解释JDK,JRE,JVM 区别与联系【JVM 】12_空间分配担保(没看懂?)下⾯是我的⼀个⼩⼩实践:1.使⽤ jmap -dump:format=b,file=filename pid 命令将堆快照⽂件下载到本地1234567[root@hadoop ~]# jmap -dump:format=b,file=/root/heap.hprof 3346 #导出堆快照⽂件Dumping heap to /root/heap.hprof ...Heap dump file created[root@hadoop ~]# ll #查看total 8572-rw------- 1 root root 4365247 Apr 9 08:15 heap.hprof[root@hadoop ~]# sz heap.hprof #将⽂件下载到本地2.使⽤JVM ⾃带的JVisualVM ⼯具查看堆快照⽂件在%JAVA_HOME%/bin ⽬录下双击jvisualvm.exe 打开-->⽂件-->装⼊-->选择Dump ⽂件类型-->找到堆快照⽂件-->打开在类栏中找到你要查看的类名双击进⼊实例数栏-->查看统计出的实例化的对象数⽬,分析对象的引⽤找到是谁在实例化此对象,从⽽找到产⽣⼤对象的原因。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java堆是指在程序运行时分配给对象生存的空间。

通过-mx/-Xmx和-ms/-Xms来设置起始堆的大小和最大堆的大小。

根据自己JDK的版本和厂家决定使用-mx和-ms或-Xmx和-Xms。

Java堆大小决定了垃圾回收的频度和速度,Java堆越大,垃圾回收的频度越低,速度越慢。

同理,Java堆越小,垃圾回收的频度越高,速度越快。

要想设置比较理想的参数,还是需要了解一些基础知识的。

Java堆的最大值不能太大,这样会造成系统内存被频繁的交换和分页。

所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。

而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。

以下是一些经常使用的参数设置:1) 设置-Xms等于-XmX的值;2) 估计内存中存活对象所占的空间的大小,设置-Xms等于此值,-Xmx四倍于此值;3) 设置-Xms等于-Xmx的1/2大小;4) 设置-Xms介于-Xmx的1/10到1/4之间;5) 使用默认的设置。

大家需要根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。

除了-Xms和-Xmx两个最重要的参数外,还有很多可能会用到的参数,这些参数通常强烈的依赖于垃圾收集的算法,所以可能因为JDK的版本和厂家而有所不同。

但这些参数一般在Web 开发中用的比较少,我就不做详细介绍了。

在实际的应用中注意设置-Xms和-Xmx使其尽可能的优化应用程序就行了。

对于性能要求很高的程序,就需要自己再多研究研究Java虚拟机和垃圾收集算法的机制了。

可以看看曹晓钢翻译的《深入Java虚拟机》一书。

Java程序性能调优的基本知识和JDK调优一基本知识1.1 性能是什么在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过Java的人都能列出几点,甚至可以夸夸其谈。

在《Java TM Platform Performance》一书中,定义了如下五个方面来作为评判性能的标准:1) 运算的性能——哪一个算法的执行性能最好?2) 内存的分配——程序运行时需要耗费多少内存?3) 启动的时间——程序启动需要多长时间?这在Web项目中的影响不大,但要注意部分程序需要部署或运行在客户端时的情形(比如applet程序)。

4) 程序的可伸缩性——在压力负载的情况下,程序的性能如何?5) 性能的感知——用户在什么情况下会觉得程序的性能不好?以上五个方面,在具体的使用场景可以有选择的去评判。

至于这五方面的性能调优,在后续的章节中将会陆续的给以相应的性能调优策略。

1.2 调优的规则我们只需要关心对我们程序有影响,可以察觉到的性能问题,而不是每一个类中的每一个方法我们都需要想方设法的提高性能。

如果程序的性能没有达到我们所期望的要求,我们才需要考虑如何优化性能。

同样的,晦涩的代码虽然提高了程序的性能,但同时可能带给我们的是维护的噩梦。

我们需要折中的考虑以上两种情况,使得程序的代码是优美的,并且运行的足够快,达到客户所期望的性能要求。

优化代码甚至会导致不良的结果,Donald Knuth(一位比较牛比较有影响的人物,具体是谁,我也忘了,谁知道,可以告诉我一下,谢谢!)曾说过,“Premature optimization is the root of all evil”。

在开始性能调优前,需要先指出不优化代码的一些理由。

1) 如果优化的代码已经正常工作,优化后可能会引入新的bug;2) 优化代码趋向于使代码更难理解和维护;3) 在一个平台上优化的代码,在另一个平台上可能更糟;4) 花费很多时间在代码的优化上,提高了很少的性能,却导致了晦涩的代码。

确实,在优化前,我们必须认真的考虑是否值得去优化。

1.3 调优的步骤一般我们提高应用程序的性能划分为以下几个步骤:1) 明确应用程序的性能指标,怎样才符合期望的性能需求;2) 在目标平台进行测试;3) 如果性能已经达到性能指标,Stop;4) 查找性能瓶颈;5) 修改性能瓶颈;6) 返回到第2步。

二 JDK调优2.1 选择合适的JDK版本不同版本的JDK,甚至不同厂家的JDK可能都存在着很大的差异,对于性能优化的程度不同。

一般来说,尽可能选择最新发布的稳定的JDK版本。

最新的稳定的JDK版本相对以前的JDK版本都会做一些bug的修改和性能的优化工作。

2.2 垃圾收集Java堆的优化垃圾收集就是自动释放不再被程序所使用的对象的过程。

当一个对象不再被程序所引用时,它所引用的堆空间可以被回收,以便被后续的新对象所使用。

垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。

如果对象不再被使用,但还有被程序所引用,这时是不能被垃圾收集器所回收的,此时就是所谓的“内存泄漏”。

监控应用程序是否发生了内存泄漏,有一个非常优秀的监控工具推荐给大家——Quest公司的JProbe工具,使用它来观察程序运行期的内存变化,并可产生内存快照,从而分析并定位内存泄漏的确切位置,可以精确定位到源码内。

这个工具的使用我在后续的章节中还会做具体介绍。

Java堆是指在程序运行时分配给对象生存的空间。

通过-mx/-Xmx和-ms/-Xms来设置起始堆的大小和最大堆的大小。

根据自己JDK的版本和厂家决定使用-mx和-ms或-Xmx和-Xms。

Java堆大小决定了垃圾回收的频度和速度,Java堆越大,垃圾回收的频度越低,速度越慢。

同理,Java堆越小,垃圾回收的频度越高,速度越快。

要想设置比较理想的参数,还是需要了解一些基础知识的。

Java堆的最大值不能太大,这样会造成系统内存被频繁的交换和分页。

所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。

而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。

以下是一些经常使用的参数设置:1) 设置-Xms等于-XmX的值;2) 估计内存中存活对象所占的空间的大小,设置-Xms等于此值,-Xmx四倍于此值;3) 设置-Xms等于-Xmx的1/2大小;4) 设置-Xms介于-Xmx的1/10到1/4之间;5) 使用默认的设置。

大家需要根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。

除了-Xms和-Xmx 两个最重要的参数外,还有很多可能会用到的参数,这些参数通常强烈的依赖于垃圾收集的算法,所以可能因为JDK的版本和厂家而有所不同。

但这些参数一般在Web开发中用的比较少,我就不做详细介绍了。

在实际的应用中注意设置-Xms和-Xmx使其尽可能的优化应用程序就行了。

对于性能要求很高的程序,就需要自己再多研究研究Java虚拟机和垃圾收集算法的机制了。

可以看看曹晓钢翻译的《深入Java虚拟机》一书。

Web 应用程序调优指南时间:2009-09-09 22:45:36来源:网络作者:未知点击:120次一.成功的应用都是相似的,失败的应用各有各的失败一.成功的应用都是相似的,失败的应用各有各的失败对于Web应用来说,影响性能的集中体现在网络/CPU/内存/IO/数据库/缓存这6个环节的处理上。

一个稳定应用的特征应该包括:1. 网络流量平稳,连接数保持稳定2. 低CPU负载3. 内存曲线平稳4. IO高响应5. 数据库的低负载,高响应简单的来说,对于每个不稳定的应用来说,都会有一个瓶颈,通过以上的工具分析,加上自己的判断,找到那个瓶颈,解决它!我们可以通过以下监控工具可监控到应用的各项指标1. 网络监控工具Cacti ,可以监控到整个服务器的流量/硬盘/CPU负载等情况2. JVM 监控JConsole (JDK 1.5 以上版本自带), %JA V A_HOME%\bin\jconsoleJava 启动加上一下参数:-Dcom.sun.management.jmxremote.port=5004 (监控端口)-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false3. Visual VM (JDK 1.6_07 以上版本自带) %JA V A_HOME%\bin\jvisualvm配置方法同JConsole , Visual VM 比JConsole 多了一个实用功能Thead Dump.4. Kill -3 来获取Thead DumpTheadDump可以很清晰的告诉你JVM当前正在做什么,内存里有哪些进程,是否有死锁。

重点观察RUNNABLE 和LOCK 是否有死锁。

5. 数据库查看MySql 的show processlist命令二.调优手段和策略1. 网络层优化不同类型的应用所能承受的网络负载各不相同,对于长连接应用来说,比如下载应用,所能承受的连接数就相对低,对于短链接应用,比如计数应用,所能承受的连接数就相对高,对于一般有数据库的应用来说,每秒的连接数保持在700以下都是没问题的。

这里调优的方面包括:1)Linux可以优化网络的TCP参数,提高网络的响应,2)增加服务器实现负载均衡,目的降低单台服务器流量3)优化程序,尽可能的减少处理的时间,如果一定有长时间处理的场景,可以采用异步方式处理。

先返回一个请求ID,然后客户端再通过这个ID来获得结果。

2. CPU优化就目前的硬件环境来看,CPU都不会是一个瓶颈。

如果CPU出现负载高,基本上都是程序处理不当引起,比如有深度递归或者循环或者频繁写磁盘,一旦出现高负载,会引起一系列的连锁反应,响应降低,连接数增加。

这个环节主要是优化程序:1)减少循环和递归2)减少synchronized 的用法。

对于多服务器场景,要实现锁机制,用synchronized 不一定适合。

Synchronized 使用不当,极容易造成死锁。

3)减少死锁发生的可能性。

JConsole提供了一个检测死锁的方法,TheadDump 也可以分析死锁。

3. 内存优化对于Java应用来说,内存调优是关键。

先来认识一下Java内存的构成和垃圾回收的机制:堆是应用程序使用的主要部分,一旦堆满,应用程序就会抛出Out Of Memory错误。

具体关于堆的构成以及垃圾回收算法,可以参考文档:/logs/4712392.html这个环节的优化:1) 增加JVM内存,使得可使用的堆内存尽可能多,延长垃圾回收的时间。

需要注意的是,一般来说,回收1G内存所需要的时间是7秒左右,如果这个时间访问量比较高,极容易导致应用停止响应,所以并非是越大内存越好。

通过增加XX:+PrintGCDetails 参数可以观察到垃圾回收的频率和时间2) 调整垃圾回收策略,加快JVM的回收,因为Web应用响应高,很多都是无用内存,加快回收可以保证有效堆会更多,这种方式会消耗更多的CPU。

相关文档
最新文档