Java jvm内存调优(来自小强公开课)

简介:

Java jvm内存调优

 

 

Jdkjava开发工具包

Jrejava运行环境,运行你编写的java程序

Jvmjava虚拟机,.class文件在虚拟机上运行

 

如何选择合适的java虚拟机

》》》选择稳定的jdk(慎用新出的,新特性的)

》》》根据平台和应用,选择合适厂商的jdkHP-UX只能选择HP JDK,AIX只能选择IBM JDK;windows linux可以选择SUN JDK;solaris平台最好使用SUN JDK;开源JDK,目前生产环境中用的极少

》》》32bit or 64bit

》》》内存需求较小,CPU密集型应用选32bit

》》》大内存应用则选64bit(突破4G内存限制、吞吐量稍高)

 

Java内存

》》》Java内存 堆内存+非堆内存

》》》堆内存 = 年轻代+年老代 -Xms(最小)-Xmx(最大)

》》》非堆内存 = 永久代+其他 -XX:Pemsize -XX:MaxPermSise

》》》最新的java8中的jvm已经去掉了永久代,以Metaspace元空间代替

 

内存典型问题

》》》OOM VS ML

》》》OOM内存溢出,是程序在申请内存时,没有足够的内存供其使用

》》》ML内存泄露,是指程序在申请内存后,无法释放已申请的内存空间,导致这块内存一直占用

》》》最终表现基本是一样的,通常内存泄露ML最终会导致OOM错误。实际应用中不要太过纠结或划清界限,每种现象都是关联的。

 

内存问题常发生在什么区域

》》》heap堆内存和pemanent

》》》JVM进程内存和java使用的第三方本地代码

 

比如:

》》》java堆内存不足,无法再分配新对象或内存块

》》》java堆内存充足,但是S0,S1eden,Old区分配不合理

 

如何预防内存方面的问题

系统方面:

》》》足够的物理内存

》》》最佳的堆设置

》》》稳定的OSjdk

》》》适当的垃圾回收算法策略

 

代码方面:

》》》不要放置大量对象到session

》》》用完的资源一定要释放,例如IOfilejdbc

》》》不要违反j2ee规范

》》》合理的从数据库取得适量的数据(能从缓存拿就从缓存拿)

》》》好的代码习惯


本文转自 32氪 51CTO博客,原文链接:http://blog.51cto.com/10672221/2051997

相关文章
|
1天前
|
消息中间件 算法 Java
JVM实战—5.G1垃圾回收器的原理和调优
本文详细解析了G1垃圾回收器的工作原理及其优化方法。首先介绍了G1通过将堆内存划分为多个Region实现分代回收,有效减少停顿时间,并可通过参数设置控制GC停顿时长。接着分析了G1相较于传统GC的优势,如停顿时间可控、大对象不进入老年代等。还探讨了如何合理设置G1参数以优化性能,包括调整新生代与老年代比例、控制GC频率及避免Full GC。最后结合实际案例说明了G1在大内存场景和对延迟敏感业务中的应用价值,同时解答了关于内存碎片、Region划分对性能影响等问题。
|
1天前
|
缓存 算法 Java
JVM实战—4.JVM垃圾回收器的原理和调优
本文详细探讨了JVM垃圾回收机制,包括新生代ParNew和老年代CMS垃圾回收器的工作原理与优化方法。内容涵盖ParNew的多线程特性、默认线程数设置及适用场景,CMS的四个阶段(初始标记、并发标记、重新标记、并发清理)及其性能分析,以及如何通过合理分配内存区域、调整参数(如-XX:SurvivorRatio、-XX:MaxTenuringThreshold等)来优化垃圾回收。此外,还结合电商大促案例,分析了系统高峰期的内存使用模型,并总结了YGC和FGC的触发条件与优化策略。最后,针对常见问题进行了汇总解答,强调了基于系统运行模型进行JVM参数调优的重要性。
JVM实战—4.JVM垃圾回收器的原理和调优
|
3天前
|
消息中间件 Java 应用服务中间件
JVM实战—2.JVM内存设置与对象分配流转
本文详细介绍了JVM内存管理的相关知识,包括:JVM内存划分原理、对象分配与流转、线上系统JVM内存设置、JVM参数优化、问题汇总。
JVM实战—2.JVM内存设置与对象分配流转
|
3天前
|
消息中间件 Java 应用服务中间件
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
|
5天前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
5天前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
JVM简介—1.Java内存区域
|
17天前
|
存储 IDE Java
java设置栈内存大小
在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
29 4
|
23天前
|
Java Shell 数据库
【YashanDB 知识库】kettle 同步大表提示 java 内存溢出
【问题分类】数据导入导出 【关键字】数据同步,kettle,数据迁移,java 内存溢出 【问题描述】kettle 同步大表提示 ERROR:could not create the java virtual machine! 【问题原因分析】java 内存溢出 【解决/规避方法】 ①增加 JVM 的堆内存大小。编辑 Spoon.bat,增加堆大小到 2GB,如: if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=256m" "-
|
23天前
|
存储 算法 Java
JVM: 内存、类与垃圾
分代收集算法将内存分为新生代和老年代,分别使用不同的垃圾回收算法。新生代对象使用复制算法,老年代对象使用标记-清除或标记-整理算法。
25 6
|
2月前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题