写在前面

这年头就是得不断地学习. 学什么东西就看需要了. 不学习很难进步. 同时别人也会超过你. 东西都是网上有的。图片也好,文字也好。基本都可以在网上找到。

JAVA运行原理

JVM包括字节码解释程序,执行器,方法区,堆,VM栈,本地方法栈,Program Counter计数器。

垃圾回收算法

GC主要分二类,新生代GC,老年代GC;

新生代GC包括:串行GC、并行GC、并行回收GC

老年代GC包括:串行GC、并行GC、CMS

G1比较特殊,同时支持新生代和老年代

GC选择:

GC在选择上,主要关注两点,吞吐量优先和暂停时间优先,

对于吞吐量优先的采用server默认的并行GC(Parallel GC)方式(上图蓝色区域),

对于暂停时间优先的选用并发GC(CMS)方式(上图黄色区域),常用场景:互联网、电商类

常用GC开启方式

暂停时间优先: 并行GC + CMS

开启方式[ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC ]

吞吐量优先: 并行回收GC + 并行GC

开启方式 [ -XX:+UseParallelOldGC ] ,此GC也时server模式默认的配置

G1: [ -XX:+UseG1GC ]

适用于服务器端、大内存、多CPU情景的垃圾收集器;

G1的目标是在维持高效率回收的同时,提供软实时中断特性

常用场景:hadoop、elasticsearch

CMS和G1区别

Cms 堆 -> 年轻代老年代

G1 堆 -> 多个区 -> 每个区里(年轻代老年代)

Cms 标记清理算法

G1 压缩复制算法,不产生碎片

G1 时间停顿可设置,相关参数[ -XX:MaxGCPauseMillis=100 -XX:GCPauseIntervalMillis=200 ]

需要注意的是,JDK8中已经用Metaspace(元数据区)完全替代了永久代(即方法区)

而且元数据区内存不在JVM中,而是使用的本地内存,默认情况下受操作系统内存限制。

调整元数据区内存大小的参数 -XX:MetaspaceSize -XX:MaxMetaspaceSize

自学提高:JVM点滴的更多相关文章

  1. JVM点滴

    JVM java拥有GC,为什么还会内存泄漏? 理解什么是内存泄漏: Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露. Java为了简化编程工作,对于不再 ...

  2. 自学Python的点滴

    1.第一天 注释 ——任何在#符号右面的内容都是注释. 注释主要作为提供给程序读者的笔记. 程序应该包含这两行 #!/user/bin/python #Filename:**.py 2.在程序中打开P ...

  3. JVM系列-分代收集垃圾回收

    Java自动垃圾回收(Automatic Garbage Collection)是自动回收堆上不再使用的内存,new的对象在程序中没有引用指向它,就会被回收.回收的实现很多,有Reference Co ...

  4. 意译:《JVM Internals》

    译者语 为加深对JVM的了解和日后查阅时更方便,于是对原文进行翻译.内容是建立在我对JVM的认识的基础上翻译的,加上本人的英语水平有限,若有纰漏请大家指正,谢谢. 原文地址:http://blog.j ...

  5. Linux下jvm、tomcat、mysql、log4j优化配置笔记

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  6. 深入理解JVM内部结构(转)

    图中显示的组件将会在下面两部分中进行逐一的解释.第一部分涉及JVM为每一个线程都会创建的组件:第二部分则是独立于线程进行创建的组件.   1. Thread       Thread是一个程序中的一个 ...

  7. Linux下jvm、tomcat、mysql、log4j优化配置

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  8. JVM 必备指南

    简介 Java虚拟机(JVM)是Java应用的运行环境,从一般意义上来讲,JVM是通过规范来定义的一个虚拟的计算机,被设计用来解释执行从Java源码编译而来的字节码.更通俗地说,JVM是指对这个规范的 ...

  9. Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

随机推荐

  1. Nunit的尝试

    (ps:没有代码,只有理论) 单元测试 单元测试(Unit Test)的一个测试用例(Test Case)是一小段代码,用于测试一个小的程序功能的行为是否正常,保证开发的功能子项能正确完成并实现其基本 ...

  2. phpmock测试

    随着互联网发展,前后端分离的开发模式兴起,Mock也从以住的幕后走上了台面,让更多的人而得知, 以前传统的开发方式Mock大多局限在后端人员接触较多一些,那么什么是Mock? Mock其实就是真实数据 ...

  3. 【JVM】问题排查

    jetty的调用场景是:为了支持Servlet规范中的注解方式(使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程),jetty在启动时会扫描class.lib包,将使用注解 ...

  4. 关于git的简单操作

    首先这篇随笔我是不太想写的,因为网上有很多教程,我也是看廖雪峰大神的git教程自学的.还是一个小学生,就当一个学习笔记了,如果你想看大神的原版,请点击这里.我们原来都是用svn的,但是越来越觉得svn ...

  5. CSS---伪类与伪元素的区别

    在CSS中对于伪类和伪元素并没有做出很明显的区别定义,两者的语法是一样的,都是以 : 开头,这样导致我们将一些伪元素误认为伪类,如 :before :after 而在CSS3中给出了明显的定义. ☞ ...

  6. Zookeeper 分布式机器部署

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  7. Snapde怎么添加行和列

    Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏.那么它是如何添加行列的呢? 它有三种方法可以添加: 1.在编辑下拉菜单下找到设置行列数菜 ...

  8. linux命令df中df -h和df -i

    df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [ ...

  9. JavaWeb 消息总线框架 Saka V0.0.1 发布

    端午闲着无聊,自己撸了一个简单的框架,可以实现在使用SendClient发送消息,在Spring容器中,符合该消息机制的接收器将能够被执行,目前Saka处于0.0.1版本[Saka-GIthub地址( ...

  10. JMeter中文返回乱码

    JMeter中文返回乱码 结果树响应数据中文返回乱码 其实有几个方法: 在线程组->http请求的字符集里设置 ​ 在http 消息管理头中设置 ​ 3.如果以上方法还没有解决,请打开安装目录 ...