优化Java堆大小的5个技巧

摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化?

本文作者Pierre是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE、中间件和JVM技术。根据他多年的工作实践经验,他发现许多性能问题都是由Java堆容量不足和调优引起的。下面他将和大家分享非常实用的5个Java堆优化技巧。

1.JVM:对难以理解的东西产生恐惧感

千万不要以为,通过配置,调优,就可以排除那些你所不明白的问题。有些人认为Java程序员不需要知道内部JVM内存管理。毫无疑问,这种观点明显是错误的,如果想拓宽知识面和提升排除故障能力,你就必须要了解和学习一下JVM内存管理。

对于Java或者是Java EE新手来说,Java Heap调优和故障排除是一项非常有挑战的工作。下面会提供一些典型的案例场景:

客户端环境面临着有规律的OutOfMemoryError错误并且对业务造成了很大的影响。

你的开发团队要在如此大的压力下去解决这个问题,通常会怎么做?

1用谷歌搜索引擎找到类似的问题并且你会相信(或假设)你也面临同样的问题。

2你会抓住JVM-Xms和存在OutOfMemoryError异常这几个关键字的例子,然后希望通过这样的案例来快速解决客户端问题。

3最后你会在你环境中使用相同的调优方法。两天后,问题仍然发生(甚至更糟或者稍微好点)……

到底是哪里错了呢?

首先,没有摸清问题根源所在?对开发环境没有正确地进行深层面(规格、负载情况等)理解。网络搜索是一个非常优秀的学习方法和知识分享工具,但是你必须结合自己的实际项目,从根本上进行分析解决。

可能缺乏基本的JVM和JVM内存管理技能,阻止你把所有的点给连接起来。

今天讲的第一条技巧是帮助你理解基本的JVM原则及其与众不同的内存空间。这些知识都是相当重要的,它可以帮助你做出有效的调优策略、更加正确合理的预测将来会产生的影响、提前知道未来需要做哪些调优工作。下面来看一下JVM参考指南:

JVM内存分为3个内存空间

?Java Heap:适用于所有的JVM厂商,通常用来拆分YoungGen(幼苗)和OldGen (终身享用)空间。

?PermGen(永久代):适用于Sun HotSpot VM((PermGen空间在Java7或者Java8更新中将会被删除)

?Native Heap(C-Heap):适用于所有的JVM厂商。

建议把下面的文章都能看一遍,最好把Sun的Java内存管理白皮书和OpenJDKS实现下载下来并仔细阅读。

?Sun HotSpot VM

?IBM VM

?Oracle JRockit VM

?Sun(Oracle)–Java memory management white paper

?OpenJDK–Open-source Java implementation

正如你所看到的,JVM内存管理比使用Xmx设置最大值更为复杂。你需要查看每个角度,

java 堆大小的最大值_优化Java堆大小的5个技巧相关推荐

  1. java的for循环嵌套_优化Java的for循环嵌套的高效率方法

    两个list中分别装有相同的对象数据. list1中有3万条对象数据. list2中有2万条对象数据(但是对象中的某个属性变量为空).两个list中的id或者其他变量都一模一样.请用最快的方式找出li ...

  2. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  3. java 取栈顶元素_《Java实战之内存模型》详解篇

    内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...

  4. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  5. java代码读写者问题_一整套Java线上故障排查技巧,爱了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:腾讯推出高性能 RPC 开发框架 个人原创100W+访问量博客:点击前往,查看更多 来源:fredal.xin/ ...

  6. java中井号字符串_深入Java基础(二)——字符串

    这段时间在准备找一份java实习工作,所以来把基础知识整理归纳一下 文章结构: 1.equals和== 2.字符串的基本知识以及字符串的源码解读: 3.字符串的注意点以及使用推荐: 一.equals和 ...

  7. java计分系统编程代码_使用Java代码对实时系统进行编程

    由于许多重要原因,Java语言在实时系统中的使用并不广泛. 这些包括Java语言设计固有的不确定性性能影响,例如动态类加载,以及Java Runtime Environment(JRE)本身,例如垃圾 ...

  8. java打印对象头信息_打印Java对象头

    打印Java对象头 对象头形式 JVM中对象头的方式有以下两种(以32位JVM为例)普通对象|----------------------------------------------------- ...

  9. java string改变的影响_为什么Java的string类要设成immutable(不可变的)

    最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类 ...

最新文章

  1. 基于python的螺纹钢28分钟策略
  2. Android应用---基于NDK的samples例程hello-jni学习NDK开发
  3. Redis:redis入门
  4. 错误: 找不到或无法加载主类 Test4解决方案
  5. oracle表分层,sql – 对非分层数据的Oracle分层查询
  6. 光端机与交换机有什么区别?
  7. H5-geolocation学习
  8. Kotlin静态方法定义和调用
  9. C#的多线程机制探索1
  10. 【OpenCV】读取显示图片及Mat类
  11. 计算机视觉大型攻略 —— 立体视觉(4)立体匹配算法简介与SGM
  12. 四、FFI和第三方模块
  13. 电话聊天狂人 (34 分)
  14. 【数据分析】基于RFM模型的线上零售中的客户细分(二):RFM模型实战
  15. SpringMVC中使用hibernate-validator的坑
  16. 2020微信对话截图一件生成神器
  17. Dynamic Movement Primitives与UR5机械臂仿真
  18. 人工智能生成 logo 神器
  19. ARM微控制器与嵌入式系统
  20. 《Python编程:从入门到实践》读书笔记——第6章:字典

热门文章

  1. 岗位推荐 | 蚂蚁金服招聘机器学习、自然语言处理算法工程师
  2. nefu java作业2020.3.11第二章
  3. Water-Net:水下图像增强基准数据集(UIEB Dataset)2019年TIP顶刊论文
  4. HDU 1556 前缀和 树状数组 线段树
  5. 【如何在IDEA中修改连接git远程库中的密码,史上最详细,建议收藏!】
  6. Java实现单链表的逆序打印
  7. 手写java数据库连接池,自定义实现数据库连接池,兼容springboot
  8. Mycat社区出版: 分布式数据库架构及企业实践——基于Mycat中间件
  9. weblogic部署连接池
  10. 操作系统【磁盘调度算法 例题】