jvm
LzwGlory
坚持自己的路
展开
-
JVM学习笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源转载 2015-09-06 18:04:36 · 577 阅读 · 0 评论 -
Tomcat中Java垃圾收集调优
Tomcat中Java垃圾收集调优 1 JVM内存JAVA_OPTS参数说明 设置服务器端的JVM参数一般在catalina.bat文件中:JAVA_OPTS="-server -Xms2048m -Xmx2048m-Xss512k" JVM中对象的划分及管理介绍 JVM根据运行于其中的对象的生存时间大致的分为3种。并且将这3种不同的转载 2015-12-01 18:57:18 · 612 阅读 · 0 评论 -
一次CMS GC问题排查过程(理解原理+读懂GC日志) (顶)
这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下。这篇文章分三部分:1、问题的场景和处理过程;2、GC的一些理论东西;3、看懂GC的日志先说一下问题吧问题场景:线上机器在半夜会推送一个700M左右的数据,这个时候有个数据置换的过程,也就是说有700M*2的数据在heap区域中,线上系统超时比较多,导致了很严重(严重程度就不说了)的问题。问转载 2015-12-03 10:27:11 · 1456 阅读 · 0 评论 -
Java常见内存溢出(OOM)解决方案
一,jvm内存区域1, 程序计数器一块很小的内存空间,作用是当前线程所执行的字节码的行号指示器。2, java栈与程序计数器一样,java栈(虚拟机栈)也是线程私有的,其生命周期与线程相同。通常存放基本数据类型,对象引用(一个指向对象起始地址的引用指针或一个代表对象的句柄),reeturnAddress类型(指向一转载 2016-02-26 13:56:10 · 651 阅读 · 0 评论 -
Java中关于OOM的场景及解决方法(顶)
1、OOM for Heap=>例如:java.lang.OutOfMemoryError: Java heap space分 析此OOM是由于JVM中heap的最大值不满足需要,将设置heap的最大值调高即可,参数样例为:-Xmx2G解决方法调高heap的最大值,即-Xmx的值调大。2、OOM for Perm=>例如:java.lang.OutOfM原创 2016-02-26 14:35:51 · 1064 阅读 · 0 评论 -
jvm参数选项要求
1. JVM参数列表(JDK7 Linux 64bit) jvm参数默认值参考值,最终以压测结果为准描述***-server jvm server模式以启动***-Xms物理内存1/644g初始堆大小***-Xmx转载 2016-11-08 11:15:25 · 1024 阅读 · 0 评论 -
java性能优化 –gc日志收集与分析
使用jvisualvm与jconsole能够实时监控java程序的运行状态。但是我们并不会一直盯着输入屏幕,或者说开着一个客户端一直抓取服务器的运行信息。相对来说,能够让java程序在运行的时候自动生成日志,然后我们再对生成的数据进行分析是比较不错的选择。收集日志打印Gc日志的参数打印gc详细信息-XX:+PringGCDetails带有距离JVM开始运行的时间戳转载 2017-07-04 16:44:30 · 764 阅读 · 0 评论 -
[Java类加载器]Java中classLoader浅析.
本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一、问题请在Eclipse中新建如下类,并运行它:1 package java.lang;2 3 public class Long {4 public static void main(String[] args) {5 System.out.prin...转载 2018-03-19 22:55:35 · 225 阅读 · 0 评论 -
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不...转载 2018-06-12 12:39:07 · 356 阅读 · 0 评论 -
JVM GC算法 CMS 详解(转)
前言CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是...转载 2018-06-12 12:39:57 · 330 阅读 · 0 评论 -
jvm调优之分层编译
前言CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是...转载 2018-06-12 12:40:35 · 677 阅读 · 0 评论 -
jvm调优之分层编译
1 问题 最近,在某个高QPS的服务在重启的时候,如图1.1所示,重启会load 非常高,出现尖刺,短信报警CPU使用率过高,然后一段时间负载就降下来。搜索下网络的文章,启动后高负载的原因大致是由于启动,随着代码的执行,jvm的jit编译器会将部分热点代码编译为目标机器代码,这时产生的编译线程会占用大量的cpu 导致系统负载高。但是通过top -H -p 查看编译线程的cpu 使用率,发现...转载 2018-06-12 12:41:22 · 1984 阅读 · 1 评论 -
JVM日志和参数的理解
写这篇wiki的目的:最近在调整Hbase的JVM,翻了些文档和wiki,想写点东西,给自己和想了解jvm日志和参数的同 学提供些帮助. 一:理解GC日志格式,读GC日志的方法1:开启日志-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps-Xloggc:/path/gc.log-XX:+UseGCLogFileRotation 启用GC日...转载 2018-06-12 12:42:16 · 280 阅读 · 0 评论 -
Java -verbose:gc 命令
Java -verbose:gc 中参数-verbose:gc 表示输出虚拟机中GC的详细情况.使用后输出如下:[Full GC 168K->97K(1984K), 0.0253873 secs]解读如下: 箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97K=71K的对象容量被回收,括号内的数据1984K为堆内存的总容量,收集所需要的时...转载 2018-06-12 12:42:54 · 2352 阅读 · 0 评论 -
非常详细GC学习笔记
GC学习笔记这是我公司同事的GC学习笔记,写得蛮详细的,由浅入深,循序渐进,让人一看就懂,特转到这里。一、GC特性以及各种GC的选择1、垃圾回收器的特性2、对垃圾回收器的选择2.1 连续 VS. 并行2.2 并发 VS. stop-the-world2.3 压缩 VS. 不压缩 VS. 复制二、GC性能指标三、分代回收转载 2015-10-10 16:43:27 · 545 阅读 · 0 评论 -
Java GC 调试手记
摘要本文记录GC调试的一次实验过程和结果。GC知识要点回顾问题1:为什么要调试GC参数?在32核处理器的系统上,10%的GC时间导致75%的吞吐量损失。所以在大型系统上,调试GC是以小博大的不错选择。'small improvements in reducing such a bottleneck can produce large gains in perform转载 2015-10-10 16:44:50 · 614 阅读 · 0 评论 -
JVM学习笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制下面将这两个部分进行详细学习转转载 2015-09-06 17:51:37 · 440 阅读 · 0 评论 -
JVM学习笔记(三)------内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代。新建的对象都是用新生代分配内存,转载 2015-09-06 18:02:14 · 458 阅读 · 0 评论 -
JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成cla转载 2015-09-06 17:56:01 · 534 阅读 · 0 评论 -
深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子转载 2015-09-30 15:35:14 · 520 阅读 · 0 评论 -
JVM 优化问题
jvm 优化问题JVM堆内存分为2块:Permanent Space 和 Heap Space。 Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。 Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Gener转载 2015-09-30 15:04:51 · 493 阅读 · 0 评论 -
JVM堆模型
JVM堆(Heap)= 新生代(Young) + 旧生代(Tenured)新生代(Young)= Eden区 + Survivor区 http://blog.csdn.net/jollyant/article/details/5647141http://blog.csdn.net/zhangren07/article/details/62708转载 2015-09-30 16:44:18 · 1682 阅读 · 0 评论 -
java 垃圾回收总结(1)
以前看过很多次关于垃圾回收相关的文章,都只是看过就忘记了,没有好好的整理一下,发现写文章可以强化自己的记忆。 java与C,c++有很大的不同就是java语言开发者不需要关注内存信息,不会显式的直接操作内存,而是通过jvm虚拟机来实现。java虚拟机运行的时候内存分配图如下图: jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟转载 2015-10-02 09:27:10 · 602 阅读 · 0 评论 -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
1.总体介绍:CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。2.CMS过程:初始标记(STW initial m转载 2015-10-02 10:35:34 · 855 阅读 · 0 评论 -
Java虚拟机类加载机制
虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。Java语言里,类型的加载和连接过程是在程序运行期间完成的。类的生命周期: 加载 loading 验证 verification 准备 preparation 解析 resolution转载 2015-10-02 11:00:27 · 376 阅读 · 0 评论 -
java垃圾回收总结(2)
介绍了jvm虚拟机运行时内存结构以及如何标识需要回收的对象,这一节主要讲解垃圾回收的基本算法。基本上 jvm内存回收有三种 基本算法标记-清除标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除。如何标记需要回收的对象,在上一篇文章里面已经有说明。 标记-清除-压缩这个算法是在标记-清除的算法之上转载 2015-10-02 09:28:03 · 901 阅读 · 0 评论 -
JVM垃圾收集算法及垃圾收集器(顶)
JVM垃圾收集算法 JVM垃圾收集算法有四种:标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法: 该算法如同它的名字一样,分为两个阶段:标记、清除。首先标记出所有需要回收的对象,然后,统一清除这些被标记的对象。该算法的缺点是:1、效率不高;2、产生大量不连续的内存碎片,导致有大量内存剩余的情况下,由于,没有连续的空间来存放原创 2015-10-09 10:10:01 · 678 阅读 · 0 评论 -
Java内存溢出和内存泄露
虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险。最近在网上搜集了一些资料,现整理如下: 一、为什么要了解内存泄露和内存溢出? 1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码编写水平; 2、通过了解内存溢出的几种常见情况,可以在出现内存溢出的时候快速的转载 2015-10-08 14:16:41 · 2500 阅读 · 0 评论 -
java处理内存泄露与内存溢出的学习总结
首先了解内存溢出与内存泄露的概念。顾名思义,内存溢出就是指在指定大小的内存空间,写入了超出大小的数据,从而导致了内存溢出。比方说,定义了20个字节大小的内存空间,却写入了21个字节的数据。通俗的说,就是内存不够,没办法支持当前程序。当发生内存溢出时,程序将无法进行,强制终止。内存泄露是指某个程序已不再执行,却始终占用着内存,不释放,从而消耗着资源,称其为内存泄露。如果发生内存泄露,那么可用内存会逐转载 2015-10-08 14:09:36 · 677 阅读 · 0 评论 -
你假笨JVM参数 - 005 CMSScavengeBeforeRemark
你假笨JVM参数分享全整理系列微信小程序:JVMPocket - JVM参数交流平台,Javaer的神奇口袋序号:005时间:2017-07-24参数:-XX:CMSScavengeBeforeRemark含义:Enable scavenging attempts before the CMS remark step.开启或关闭在CMS重新标记阶段之前的清除(YGC)尝试CMS并...转载 2018-11-29 11:22:37 · 333 阅读 · 0 评论