mysql 第三十一篇文章~jvm的知识与优化

一 简介: 今天咱们聊聊 jvm内存调优
二 基础理论:
   1 jvm 堆(heap)基本概念:
       1 对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
       2 Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。如果从内存回收的角度看,由于现在收集器基本都是采用的分代收集算法,
   2 组成成员

1 新生代

2 老年代
  3 相关参数

-Xmx(JVM分配堆最大内存) -Xms(JVM初始分配的堆内存)

4  配置错误案例

将会抛出OutOfMemoryError异常。
 1 jvm 非堆(no-heap)基本概念
    方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
 2 组成成员

1 永久代
3 相关参数

PermSize(JVM初始化分配的非堆大小) MaxPermSize(JVM最大分片的非堆大小)
1 jvm 直接内存映射基本概念
此概念是关于java nio引入的(内存映射文件),直接以native的方式分配内存,不受jvm管理。这种方式是为了提高网络和文件IO的效率,避免多余的内存拷贝而出现的。
2 相关参数

MaxDirectMemorySize(默认64m)

三 相关讲解
  1 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。
   可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,
    所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中
  2 堆内存分配
   JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
   空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。
   说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误
  3 非堆内存分配
  JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryErro
 4 直接映射分配 
  DirectMemory 的默认大小是64m,并不接受jvm内存管理,最好设置最大内存值

五 mycat相关建议

建议堆内存适度大小,直接映射内存尽可能大,两种一起占据操作系统的1/2-2/3的内存。

下面以服务器16G内存为例,Mycat堆内存4G,非堆内存64m 直接内存映射6G,JVM参数如
-  server -Xms4G –Xmx4G XX:MaxPermSize=64M -XX:MaxDirectMemorySize=6G

这就是我对java jvm调节的感想,不会开发确实困难,仅供参考

六 jvm常用命令

1 jmap -heap pid 查看gc使用情况 (JDK1.7)

时间: 2024-11-05 19:44:01

mysql 第三十一篇文章~jvm的知识与优化的相关文章

mysql 第十五篇文章~mycat常用管理命令

一 简介:今天咱们来聊聊mycat的管理功能二 前沿:mycat的常用管理命令需要掌握三 常用命令:   1 登录命令: mysql -uuser -ppassword -P 9066 -h 127.0.0.1 mycat管理用户的配置在server.xml中   2 Show @@backend ;查看后端host列表   3 show @@heartbeat;       | NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIM

mysql 第四十篇文章~canal+otter的初次尝试

一 简介: 今天咱们来聊聊 canal和otter的组合搭配吧二 概念统计    1. 基于Canal开源产品,获取数据库增量日志数据. 2. 典型管理系统架构,manager(web管理)+node(工作节点) a. manager运行时推送同步配置到node节点 b. node节点将同步状态反馈到manager上 3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作. 三 机器组成: 1 manager节点(最好自带数据库)  2 node节点   3 ZK集群

我的第三十一篇博客---mongo

mongo 进入Mongoshow dbs 展示出mongo里数据库有哪些db 显示当前数据库use admin 切换到admin这个数据库show collections 展示里面的集合 db.info.insert({'name':'zhangsan','age':20}) 向当前数据库info列里插入这项数据db.info.find() 查询info里的数据db.dropDatabase() 删除当前的数据库 mongodb集合的命令不手动创建集合:向不存在的集合中第一次加入数据时,集合会

第三十一篇:!pci of WinDbg

刚刚在看WinDbg在硬件调试方面有哪些扩展命令的时候,让我回想起一个工作中的实际事务. 在xHCI USB3.0/3.1 IP项目开发过程中,需要得到类似实际产品的PCIe配置空间信息,以作对比参考. 当时的做法是,将类似产品的xHCI host controller通过PCIe口接到SoC系统中, 通过编写ARM SoC的Bare metal代码来读取每一个产口的PCIe配置空间. 现在发现,WinDbg在KERNEL MODE(双机与LOCAL)下支持与PCI.PCIe的命令: !pci,

第三十一篇、iOS 9版本适配

1.网络适配(强制回退HTTP) 为了强制增强数据访问安全, iOS9 默认会把 所有的http请求 所有从NSURLConnection . CFURL . NSURLSession发出的 HTTP 请求,都改为 HTTPS 请求:iOS9.x-SDK编译时,默认会让所有从NSURLConnection . CFURL . NSURLSession发出的 HTTP 请求统一采用TLS 1.2 协议.因为 AFNetworking 现在的版本底层使用了 NSURLConnection ,众多Ap

mysql 第二十五篇文章~相关分片功能的测试五

一 简介:今天咱们来进行测试 二分片规则 sharding-by-murmur 1 table 相关配置  <tableRule name="sharding-by-murmur"> <rule> <columns>id</columns> <algorithm>murmur</algorithm> </rule> </tableRule> 2 function 相关配置 <funct

开始写游戏 --- 第三十一篇

今天: 1.增加物品使用组件 2.增加物品使用功能.增加蓝条 上图: 1.增加物品使用组件 { 效果图: 代码: } 2.增加物品使用功能.增加蓝条 { 效果图: 这个录制软件不知道除了啥问题...居然录制出现绿屏的情况. 代码: } 原文地址:https://www.cnblogs.com/dmc-nero/p/12088028.html

Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!

简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xd

mysql 第四十五篇文章~初探MGR

一 简介 :MGR一直没有时间测试,今天咱们来初步了解搭建一下呗 二 环境: mysql5.7.20  单台机器 启动三实例 三  mysql 搭建: 1 建立相关目录+ mkdir -p /data/mysql/data_3306 mkdir -p /data/mysql/data_3307 mkdir -p /data/mysql/data_3308 2 脚本初始化 /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql