堆里面分Eden区,s0,s1区,老年代,整体分两块大的区,复制算法分别转换角色,对于JAVA里面的栈,里面有局部变量表,操作数栈,帧数据区,主要是操作数栈是一个主要的概念,局部变量表和帧数据区主要是抛异常处理的线程,处理异常什么的,然后方法区就是永久区了然后看一下之前所学的例子test1,虚拟机参数的分配,-XX是系统级的,虚拟机参数进行调优的,堆虚拟机本身调优的,剩下非-XX的参数,都是对应用程序进行调优的,比如设置一些堆内存,然后配置一些栈,永久区的设置,我们之前的test1的helloworld, Run As -----> Configuration,给他设置一下这个参数 -Xmx20m -Xms5m -XX:+PrintCommandLineFlags 它会把参数传给虚拟机,当然有一个参数是 -XX:PrintCommandLineFlags可以打印具体的配置,是可以打印的,在第一行的时候,其实之前有一个小结:在实际工作中,我们可以直接将初始的堆大小和最大堆大小设置相等,以后我们进行TOMCAT调优的时候,你可以把初始化的堆内存和实际的堆内存大小配置成一样,其实这种方式带来的好处就是减少GC的回收次数,比如一开始你分配一个G的内存,然后你初始化的时候如果调100M,这个时候他会不断地向你的虚拟机不断的去申请,我这边没达到上限的内存都会给你,一旦达到一个G了,相当于不给你了,就报异常了,其实建议是调到大小相等,我个人一般调百分之八十,你给我1G,初始化就给800M,我可能就分配一半,500M,开始运行跑起来就行了,后期我们做实验的时候你能看出来,配置相等的时候差距真的很大
打印的东西那天我们也详细去说了,第一次分配1M的时候我就去用了1M,第二次我分配了4M,我的 free memory 不够了,我就会去向虚拟机要,由于我设置的上限是20M,所以它还能要一些内存,free memory几乎没有什么变化,然后 total memory 使用的内存就变多了, 下面就是一个详细的detail信息

新生代和老年代,新生代分为三块,老年代还有永久区新生代的配置:一般我们使用-Xmn, 之前我们用-Xms,s代表我们初始化的堆大小,-Xmx中x代表最大的大小,初始化和最大的,但是我们看到Xmn,这个是设置新生代,这个是更细粒度的一个设置了,就是我们可以通过参数去设置新生代的一个大小,这个设置一个比较大的新生代会减少老年代的大小,我整个堆内存是一定的,新生代大了,那老年代肯定是少了但是对于我们正常的工作来讲,一般我们不能随便给新生代设置多大,新生代设置的太小了也不行,设置太大了也不太好,根据你实际的情况,一般我们会把新生代设置到整个堆空间的1/3到1/4左右.相当于新生代占1份,老年代占2份,或者新生代占1份,老年代占3分,三分之一到四分之一是比较合适的,因为你整个程序跑起来的时候,那更多的是一直在使用的对象,大部分是一直存活的,要不你的程序怎么运行呢,但是你的新生代也不能分配太小,一旦调用一个方法名调用对象的时候,如果是堆放不下来的话,会把新生代的对象直接扔到老年代老年代会占去GC,对系统的性能是有很重要的影响的,所以要合理的设置-Xmn这一块,我不知道我们刚刚说的你听懂了没有,就是这个参数堆GC的行为是有一个很大的影响的.比如说我现在新生代设置三分之一,老年代2份,假如我设置配置比的话,对象过来的时候首先是往Eden区存放,经过一次垃圾回收收集GC的话,它会放在s0或者s1区,JVM默认的15次的GC,如果这个对象还是保留那就进化到老年代中但是如果说Xmn设置的很小的话,新生代设置一点点,老年代设置很大,老年代设置大了很应该的,因为很多应用程序跑的时候需要JAVA的内存和对象进行支撑,如果你的应用程序启动之后,就相当于你没有多少功能吗
加入你设置非常小的话,对象过来的时候发现我的对象进不去了,那这个时候他就去往老年代扔了,如果你设置太小的话,100次以后,往新生代new了100个或者1000个以后,新生代放不下了,那这个对象就直接放在老年代了,或者是一些大对象,一些大对象也直接放在老年代,这个时候老年代产生了GC,新生代也产生GC,新生代必然会产生GC的,因为我们在应用程序走的时候,对象初始化的销毁,新生代一定是有GC的,老年代如果频繁的产生GC的话,就是Full GC,这种堆JAVA虚拟机的影响还是非常大的,这个时候就会产生应用程序的停顿,导致性能是有一些问题的,时间长的话就会导致崩溃,内存溢出,新生代和老年代的设置一般来说是需要你注意一下的,就是三分之一到四分之一左右,但是也是根据你实际的工作去看,到底是三分之一合适还是四分之一合适,如果你以后精通你整体的这个项目,做一个实时运维和架构的模式,那你的代码有多少个接口,多少个类,都是可以看出来的,用一些JVM调优的工具看一下,先下之前做一些压力测试,然后你们给出一个比较合适的配置,这配置可不是随便配置的,当然你要依赖TOMCAT这种程序的话,这个配置的要求是很高的
我怎么去配这个大小的协调,就是新生代我能配置多大,新生代给他配置20M,但是新生代我们还可以去配置比例,有一个-XX:SurvivorRatio这么一个参数,用来设置新生代中的Eden和from/to空间的比例,更细粒度的再比一下设置的是from和to的一个比例 -XX:SurvivorRatio=eden/from=eden/to 就是新生代除以from, 新生代除以to就是和from/to比例是对等的,如果eden/from比值等于2的话是什么意思呢,就是我有2份新生代,1份from,还有1份to,并不是from加上to的之和,是和其中一个的比例,因为from和to是大小相等的,可以角色相互转换的空间,所以eden是和其中之一比的,整个堆内存我们可以先配置新生代的大小,然后新生代的大小给他设置100M,然后再配置-XX:SurvivorRatio这个参数,配置成2,就是eden和from或者是eden和to,比例是2比1的关系,其实就是这么一个情况,eden比上from是二比一,eden比上to也是二比一

这是002,我们看看做了什么事情Run As ----> Configuration,来看看这个配置,一点要点到Test02才行,然后看arguments

首先我们初始化的时候配置的是20M,最大也是20M,也就是他们两个是相等的,这个是比较好的,一般你运行一个比较小的程序,也许他耗内存不是非常多,给他300M就足够了,这个时候你初始化给300M,最大也是300M,他们两个相等也就OK了,Ratio我们配置的是2,就是这个比值我们配置的是2

我们这里Xmn新生代配置的是1M,比值又是2,你想想这个应该怎么去划分呢,然后直接运行看结果

我们这个是连续申请10M的空间,我是第一次配置,我初始化配置20M,肯定够,但是我新生代就配置1M,那我们主要看这块,eden是512K,from和to都是256K,这个充分说明这个比值是没有问题的,就是2比值是没有问题的,然后我们去看第二次配置,我们去看新生代我们一共是7M

然后我们再次执行看控制台打印的信息

eden,from,to加起来约等于7M,已经看到这个效果了第三次配置我们看到了多了一个配置,多了一个NewRatio,NewRatio是什么概念呢,新生代的Eden和to的配置是SurvivorRatio这个参数,NewRatio是老年代和新生代的比例不同的堆的分布情况,对系统执行会产生一定的影响的,在实际工作中,应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,减少老年代的GC次数.老年代GC是非常耗性能的,除了可以设置新生代的绝对大小(-Xmn),你分10M或者20M,还可以使用(-XX:NewRatio)设置新生代和老年代的比例, -XX:NewRatio = 老年代/新生代,老年代在前,新生代在后,那我们看一下这个配置是怎么说的.我初始了20M,我们设置新生代和老年代,就不设置具体的,那我整个堆的内存是20M那我们来看一下这个有什么区别

这里配置老年代和新生代的比例是2:1,老年代是新生代的2倍,你可以看这个数据
说的比例的配置是非常的细了,以后你想怎么做就可以按照这个配置配了,这是关于配置参数,然后我们继续看一个配置参数,其实参数就是这么点,还有一些就是不常用的参数在JAVA程序中,如果堆空间不足,则会抛出内存溢出的异常,是非常严重的,可能引起业务的严重的中断,这个事我还是要强调一下,你写程序的时候,你做测试的时候可能会出现异常,可能你个人觉得这种异常没有什么大不了的,不就是报个内存溢出,自己使用eclipse开发代码写的不好也经常报内存溢出,其实在生产环境出现内存溢出是非常可怕的,内存溢出相当于down了,不像我们抛出一个什么exception,我就catch捕捉记录日志,我的系统还能继续对外提供服务,像这种RuntimeException,其实是可控的,就是我在系统运行的时候出RuntimeException是很正常的,但是如果出现OOM这种东西的话,那整个服务就不可用了,这种肯定是要尽量避免的,当然有一些内存为什么溢出的工具,整个我们可以给你一个地址,这个是可以给eclipse做集成的

首先初始化是2M,最大也是2M,打印内存溢出的error,找到D盘的dump,我一共申请了5次,内存一共要使用5次,那必然会内存溢出,当然你这个参数也要配好了

就是2M,2M,

它会看到一个信息 java.lang.OutofMemoryError, Java heap 空间不足了, 是放在Temp003文件里了

jvm_虚拟机参数讲解(二)相关推荐

  1. jvm_虚拟机参数讲解(一)

    其实在JAVA中,虚拟机参数主要起到的作用,在虚拟机运行的时候,在程序运行的时候,这个虚拟机的调配,参数会对应用系统的运行的良好,性能等等都会产生直接的关系,比如说我们有两个方面堆参数的分配大多数的参 ...

  2. jvm_虚拟机参数讲解(三)

    关于新生代和老年代怎么划分的问题,这块主要是一些配置,刚才我们也说了分析器这一块 分配了1M的内存大小, 我现在用的是JDK1.8了,它会生成一个文件,1.8分配太小了,他就启动不了, 因为我是准备分 ...

  3. 微信开发生成带参数的二维码的讲解

    在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 ...

  4. JVM_虚拟机执行子系统

    本篇为<深入理解Java虚拟机 第3版>读书笔记 文中,<Java虚拟机规范>简称<规范> 类文件结构 平台无关性和语言无关性的基石:Java虚拟机和字节码存储格式 ...

  5. 启动rrt什么意思_python学习第144课--创建虚拟机、设置虚拟机参数以及启动虚拟机...

    [每天几分钟,从零入门python编程的世界!] 上节我们介绍了下载虚拟机以及centOS的相关事项,现在我们创建虚拟机. ●创建虚拟机 安装好virtualbox之后,我们点击Oracle VM V ...

  6. pyhton GUI编程之Tkinter详细讲解二

    文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...

  7. 微信公众号开发之生成并扫描带参数的二维码

    生成带参数二维码详见微信公众平台之生成带参数的二维码 具体步骤:可在微信测试平台https://mp.weixin.qq.com/debug进行生成 生成结果如下: 拿到ticket 请求 https ...

  8. java虚拟机参数-X 与 -XX的区别

    java虚拟机参数-X 与 -XX的区别 java虚拟机参数-X 与 -XX的区别 为什么有的用-X 如,-Xms -Xmx -Xmn等 有的用-XX: 如-XX:MaxPermSize=100M等 ...

  9. 微信生成带参数的二维码,合成海报,扫码后推送小程序?

    微信服务号渠道二维码功能,支持生成带参数二维码,合成海报二维码,微信扫码后推送内容:结合微号帮平台48小时信息推送,推送微信小程序. 带参二维码 海报二维码 微信扫码后回复 48小时信息推送 在微号帮 ...

最新文章

  1. [仙剑四]仙剑四十大经典语句评析
  2. Windows Server 2019 开发环境
  3. 一维卷积filter_面试题:CNN的卷积核是单层的还是多层的?
  4. UbbCode用正则替换指定格式的输入实现想要的输出
  5. PHP(二)——HTML基础
  6. 支付宝 报错 rsa_private read error : private key is NULL解决方法
  7. 硬盘安装Windows7--笔记
  8. 中国首个芯片大学最快于本月底在南京挂牌;​华为方舟编译器正式支持 C 语言;Ora2Pg v21.0 发布|极客头条
  9. JAVE 视音频转码
  10. 蓝牙驱动卸载后自动安装_外星人的控制中心下载,安装及常见问题处理方法
  11. 华为手机老是自动截屏_华为手机竟然三种截屏方法 然后打开智能截屏开关
  12. php怎么触发js函数,如何从PHP调用JavaScript函数?
  13. 嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫
  14. Dedecms 前端RCE分析
  15. GIT远程分支误删恢复
  16. Android 双击退出和单击回到桌面
  17. 微信「扫一扫识物」 的背后技术揭秘
  18. Codeforces14 E. Camels(dp)
  19. Zigbee 设置信道,PANID,发射功率
  20. MapReduce稍微高级编程之PageRank算法的实现

热门文章

  1. Java中的List/Set和Map的区别
  2. dedecms 制作模板中使用的全局标记介绍
  3. Java多线程与并发控制
  4. 获取web.py上面的示例code
  5. C# 模拟一个处理消息队列的线程类 Message Queue
  6. 【Apache JMeter】JMeter接口压测实例
  7. Linux里的稀疏文件
  8. CSharpGL(36)通用的非托管数组排序方法
  9. 第三周项目5-数组作数据成员
  10. Good Technology 产品特色