5.2一些案例:

1.高性能硬件部署策略:

(1)背景:某公司升级了硬件(CPU升级为4核,内存增加为16G),发现不定期出现网页失去响应。

(2)原因:①内存增加之后,项目中有在内存中处理文件的大对象,从而进入的老年代而没有进行及时回收,然后每次Full GC都要回收比较大量的对象;②Full GC的“Stop-The-World”;

(3)处理方法:

  ①使用64位jdk,减少Full GC的次数,可以定时在深夜进行Full GC或者重启服务器,缺点:内存回收时间停顿很长,64位JDK比32位的性能低,转储堆内存快照过大不利于分析,更占内存(指针膨胀、对齐补充);

  ②使用32位jdk,在服务器上搭建多个Web集群,使用反向代理进行负载均衡,缺点:对全局资源的争抢(比如磁盘,容易IO异常),内存受32位影响一个虚拟机最多只能分配2GB,每个虚拟机的缓存对内存的浪费(可以集中式缓存);

2.堆外内存导致的内存溢出:

(1)Direct Memory:直接内存区的溢出,比如NIO要使用这个区域的内存;

(2)栈:栈的内存不足会导致无法分配线程;

(3)Socket缓存:每个Socket连接都会占内存,连接太多就会出现内存不足;

(4)JNI(Java Native Inteface):本地方法占用的堆外内存;

(5)虚拟机本身和GC:虚拟机本身也占用内存;

3.外部命令占用资源过多;

4.JVM进程崩溃:

  (1)过多请求异步调用接口,请求积累过多而导致了虚拟机无法承受而崩溃;

  (2)使用生产者/消费者的消息队列模式解决;

5.不恰当数据结构导致的内存占用过大:

  数据本身所占大小与总大小比值太低,存储效率低,也就导致了GC的效率低

深入理解JVM(五)JVM优化策略的更多相关文章

  1. 一步步优化JVM五:优化延迟或者响应时间(1)

    http://blog.csdn.net/zhoutao198712/article/details/7791969      本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完 ...

  2. 一步步优化JVM五:优化延迟或者响应时间

    本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完善Java堆大小的配置,评估垃圾回收占用的时间和频率,也许还要尝试切换到不同的垃圾回收器,以及由于使用了不同的垃圾回收器,需要重 ...

  3. 47、Spark SQL核心源码深度剖析(DataFrame lazy特性、Optimizer优化策略等)

    一.源码分析 1. ###入口org.apache.spark.sql/SQLContext.scala sql()方法: /** * 使用Spark执行一条SQL查询语句,将结果作为DataFram ...

  4. JVM(1)---虚拟机在运行期的优化策略

    1.解释器与JIT编译器 首先我们先来了解一下运行在虚拟机之上的解释器与JIT编译器.当我们的虚拟机在运行一个java程序的时候,它可以采用两种方式来运行这个java程序: 采用解释器的形式,也就是说 ...

  5. 深入理解java虚拟机JVM(上)

    深入理解java虚拟机JVM(上) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  6. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  7. JVM(五):探究类加载过程-上

    JVM(五):探究类加载过程-上 本文我们来研究一个Java字节码文件(Class文件)是如何加载入内存中的,在這個过程中涉及类加载过程中的加载,验证,准备,解析(连接),初始化,使用,销毁过程,并探 ...

  8. 大厂面试经:说一下你们线上JVM是如何优化的?

    JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭.飞机的场景(面试)不懂JVM的你,会被 ...

  9. 深入理解java虚拟机JVM(下)

    深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

随机推荐

  1. 【python】参数中的*args和**kwargs

    转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...

  2. centos7 下安装Docker CE

    前提条件 操作系统要求 要保证centos-extrasrepository开启(enabled).默认处于开启状态. 推荐使用overlay2存储驱动 卸载老版本 $ sudo yum remove ...

  3. go语言学习--go中的map切片

    //定义一个结构 type Car struct { Brand string Age int } func Pluck() map[int][]Car { carMap := make(map[in ...

  4. cookie and sesssion

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  5. java web 三大核心组件Filter

    Filter 过滤: 定义: 过滤器是客户端与服务端之间的一道网,可以对请求的数据进行拦截和修改,同时也可以对,响应数据进行拦截和修改

  6. Django_admin组件

    1.Django_admin组件的意义 作者:Eric 微信:loveoracle11g 新建Django项目bms图书管理系统 App为book book/models.py添加表关系 from d ...

  7. 【Selenium】各种方式在选择的时候应该怎么选择

    最后再总结一下,各种方式在选择的时候应该怎么选择: 1. 当页面元素有id属性时,最好尽量用id来定位.但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法. ...

  8. Python cx_Oracle 安装小记

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python cx_Oracle 安装小记 SQLAlchemy 是 Pytho ...

  9. linux文件属性的10个字符各代表什么意思

    10个字符表示文件类别和权限,具体如下: 例: 第一个字符表示文件类别,代表的含义如下:-:普通文件d:目录文件b:块设备文件c:字符设备文件l:符号链接文件 后面9个字符代表3组访问权限:第1组的3 ...

  10. ZigBee相关网站链接

    1.Arduino开源智能家居<认识Zigbee>zigbee功能和自组网介绍-Arduino中文社区 2.小米智能家庭套装为什么选择 ZigBee 协议?|极客公园 3.晓网智能家居Zi ...