问题描述

java程序部署在服务器(CentOS 64位)运行的时候,经常遭遇OOM,被服务器kill掉java主进程。为谨慎起见,未采用霸道的关闭OOM的方法(Linux内核OOM机制的详细分析),决定先优化JVM,减少内存使用。

解决方法

参照JVM优化之压缩普通对象指针中的描述,在64位机器上,由于64位JVM消耗的内存会比32位的大1.5倍,因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。好在从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。

参照Enable -XX:+UseCompressedOops By Default中的描述,测试在64位服务器上设置-Xmx32g时,-XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers会失效,所以最大的JVM堆空间设置为31g,相关测试如下:

测试1:-Xmx32g    -XX:+UseCompressedOops     设置未生效

-Xmx31g    -XX:+UseCompressedOops     设置生效

[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx32g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Oops
Java HotSpot(TM) 64-Bit Server VM warning: Max heap size too large for Compressed Oopsbool UseCompressedOops                        := false                               {lp64_product}
错误: 找不到或无法加载主类 Oops
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx31g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Oopsbool UseCompressedOops                        := true                                {lp64_product}
错误: 找不到或无法加载主类 Oops

测试1:-Xmx32g     -XX:+UseCompressedClassPointers   设置未生效

-Xmx31g    -XX:+UseCompressedClassPointers     设置生效

[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx32g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Pointers
Java HotSpot(TM) 64-Bit Server VM warning: Max heap size too large for Compressed Oopsbool UseCompressedClassPointers               := false                               {lp64_product}
错误: 找不到或无法加载主类 Oops
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx31g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Pointersbool UseCompressedClassPointers               := true                                {lp64_product}
错误: 找不到或无法加载主类 Oops

JVM优化之压缩普通对象指针(CompressedOops)与压缩类指针(CompressedClassPointers)相关推荐

  1. java 指针 地址压缩_JVM优化之压缩普通对象指针(CompressedOops)

    通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...

  2. java 压缩oop_JVM优化之压缩普通对象指针(CompressedOops)

    通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...

  3. 菜鸟教程JVM优化,看一篇就够了!

    yong gc 的触发时机 当要分配新对象,但新生代edent区不足 将edent区和suvivor区的存活对象拷贝到另外一个survivor区 1)内存充足则,没事 2)如果内存不足,则存活对象直接 ...

  4. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  5. 将派生类指针赋值给基类的指针

    除了可以将派生类对象赋值给基类对象(对象变量之间的赋值),还可以将派生类指针赋值给基类指针(对象指针之间的赋值).我们先来看一个多继承的例子,继承关系为: #include <iostream& ...

  6. 静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

    1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #i ...

  7. 基类指针和子类指针相互赋值

    首先,给出基类animal和子类fish [cpp] view plaincopy print? //================================================= ...

  8. JVM优化系列-String对象在虚拟机中的实现

    导语   String字符串在是各种编程语言中都是重头戏.各种语言中对字符串的操作都是进行有特殊化的处理,例如在C语言中根本没有字符串这个概念,在C语言中的字符串是用字符数组来表示的.在Java中,S ...

  9. (五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析

    引言 在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内.而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程.J ...

  10. 多核服务器的JVM优化选项(转载)

    原文链接 现在多核CPU是主流.利用多核技术,可以有效发挥硬件的能力,提升吞吐量,对于Java程序,可以实现并发垃圾收集.但是Java利用多核技术也带来了一些问题,主要是多线程共享内存引起了.目前内存 ...

最新文章

  1. 【php增删改查实例】第十七节 - 用户登录(1)
  2. NDKJNI Android 相关资料整理(四)
  3. 为了杀蚊子,这位博士用树莓派DIY了一把激光枪,网友:伤到人怎么办?
  4. Protocol Buffer基本语法
  5. delphi7注册码
  6. 【腾讯面试题】MySQL常用数据库引擎
  7. 千万千万不要运行的 Linux 命令
  8. 视图加载时自动执行铵钮事件
  9. iOS开发之企业级账号的使用注意的坑
  10. C-snowflake uuid 生成器
  11. 第二章计算机应用基础试题答案,职中计算机应用基础第二章测试题及答案.doc...
  12. 基于FFmpeg的编解码器设计实现方案
  13. 自动驾驶中车辆的如何使用点云定位?
  14. 在没有原始数据的情况下, 我把列线图转换成了网页计算器
  15. 永中office linux卸载,安装永中Office for linux
  16. 热力学分布用matlab,matlab在热物理学中的应用.doc
  17. PHP MySQL 连接数据库
  18. 学习Emacs系列教程
  19. 2022年12月编程语言排行榜公布!
  20. wdcp mysql configure error_install Error: mysql configure err

热门文章

  1. import * as x from 'xx' 和 import x from 'xx'
  2. HP喷墨打印机墨盒清零
  3. OS X桌面自动化神器:Hammerspoon for Mac
  4. amd cpu安装osx 10.9.2(同样适应intel构架)
  5. 如何用od去手动脱壳
  6. VMware安装流畅系统Chrome OS以及国产系统FedyOS(基于Chrome OS的二次开发)
  7. java 无锁并发_高并发情况下怎样尽量实现无锁编程
  8. java ftl_.ftl文件 是什么文件 freemaker
  9. 计算机技术与软件考试高级难么,计算机技术与软件专业技术资格考试高级哪个好考...
  10. api调用实例python_基于Python的词典api调用代码实例