精华内容
下载资源
问答
  • img JVM调优实战.pdf

    2018-08-25 15:02:32
    img JVM调优实战.pdf
  • 1. JVM的运行参数1.1 三种参数类型标准参数 help -version-X参数 (非标准参数) -Xint -Xcomp-XX参数(使用率比较高, 常用语jvm调优) -XX:newSize -XX:+UseSeriaIGC1.2 标准参数-D 设置系统属性: java -Dstr=...

    1. JVM的运行参数

    1.1 三种参数类型

    • 标准参数 help -version
    • -X参数 (非标准参数) -Xint -Xcomp
    • -XX参数(使用率比较高, 常用语jvm调优) -XX:newSize -XX:+UseSeriaIGC

    1.2 标准参数

    -D 设置系统属性: java -Dstr=hello

    String str = System.getProperty("str")println(str)复制代码

    输出结果: hello
    JVM的两个启动模式: server和client
    JVM在启动的时候会根据硬件和操作系统自动选择是使用Server还是Client类型的JVM
    64位操作系统只有Server类型,没有Client

    1.3 非标准参数

    JVM的运行模式:
    -Xint: 解释模式, 强制要求JVM执行所有的字节码(interpreted mode)
    -Xcomp: 编译模式,JVM在第一次使用时会把所有字节码编译成本地代码(compiled mode)
    -Xmixed:混合模式,将解释模式和编译模式混合使用, JVM默认的模式, 也是推荐的模式(mixed mode)

    1.4 -XX 参数

    -XX参数也是非标准参数, 主要用于JVM的调优和debug操作
    两种使用方式:

    • boolean类型
      格式: -XX:[+-] 表示启用或者禁用name指令
      -XX:+DisableExplicitGC表示禁用手动调用gc操作, System.gc()无效
    • 非boolean类型
      格式: -XX= 表示name的属性值为value
      -XX:NewRatie=1 表示新生代和老年代的比值

    1.5 -Xms, -Xmx

    -Xms和-Xmx分别是设置jvm的堆内存的初始大小和最大大小
    -Xms512m相当于: -XX:InitialHeapSize=512m
    -Xms2048m相当于:-XX:MaxHeapSize=2048m

    JVM启动时会自动设置Heap size的值, -Xms初始空间是物理内存的1/64, -Xmx最大值是物理空间的1/4。
    进行JVM优化时, 可将-Xms和-Xmx设置值相同, 最大值不超过物理内存的80%

    1.6 查看jvm运行参数:

    运行java命令时打印参数: -XX:+PrintFlagsFinal
    参数列表中: = 表示默认值, :=表示值被修改过

    1.7 查看正在运行的进程的jvm信息

    jps -l查看当前系统中所有运行的java项目的进程id及详细信息
    jinfo -flags 29200 查看进程id为29200进程的所有jvm参数信息
    jinfo -flag MaxheapSize 29200 查看pid下的具体某一jvm信息

    ae1da2a6f1c3fe8d4858342aa7c302d8.png

    2. jvm的内存模型

    jvm的内存模型1.7和1.8有较大的区别

    2.1 jdk1.7的堆内存模型:

    • 年轻区: 新new的一些对象会在这个区域,young区被分为:Eden区和两个大小严格相同的Survivor区, 当Eden区变满时, 数据会移到Survior中,几次jvm垃圾收集后, 依然存活的Survivor会知道老年区
    • 老年区:tenured区主要保存生命周期长的对象, 一般是一些老的对象
    • 永久区: 主要保存class, method, field对象, 这部分空间一般不会溢出

    2.2 jdk1.8的堆内存模型

    年轻区:Eden+2*Survivor
    老年区:OldGen
    元数据空间(Metaspace):Matespace是不是在虚拟机内部, 而是占用服务器的内存空间,这是和1.7最大的区别

    2.3 为什么废除了1.7的永久区

    现实中是因为永久代内存总会发生不够用或者内存泄漏, 基于此将永久区废弃, 改为使用本地的内存空间

    2.4 通过jstat命令进行查看堆内存的使用情况

    jstat 参数指令 进程id 时间间隔 查询次数
    jstat -class 29200 查看类加载情况
    loaded: 加载类的数量
    Bytes:类占得空间
    uloaded:未加载类的数量
    Time: 加载占用的时间

    511d80ca9c61758f7da3c0683631759f.png

    jstat -compiler 29200 查看编译情况

    0512ca46eb11aff12ef4b18a967e32bc.png

    查看垃圾回收器的使用情况
    jstat -gc 29200 1000 10 每1000毫秒(1秒)钟打印一次gc使用情况, 总共打印10次

    3c4c3b2fd0c8e7abd597a763098629bb.png

    3. jmap的使用以及内存溢出分析

    3.1 查看内存使用情况

    jmap -heap 29200

    3.2 查看内存中对象数量及大小:

    jmap -histo | more 查看所有对象的
    jmap -histo:live | more 查看活跃对象的

    406e91eb31be1b4c25e657511f96aa88.png

    [B-> byte
    [I -> int
    [C->char

    3.3 将内存使用情况dump到文件中, jhat对快照文件分析

    jmap -dump:format=b,file=filename
    例如 jmap -dump:format=b,file=dumptest.dat 29200 会生成一份29200内存使用情况的二进制文件dumptest.dat
    使用jhat对dump的二进制文件分析:jhat port 9999 dumptest.dat

    7a707a1b589ea07d318a4248c25f9bd1.png

    浏览器访问7000端口:

    d3bfc972b952b1162b1a170a3dc00535.png

    4. 内存溢出的定位与分析

    内存溢出在生产环境中经常会遇到, 比如不断地将数据写入到一个集合中,出现了死循环, 读取超大文件等等,都可能造成内存溢出。

    4.1模拟内存溢出:

    设置jvm参数: -Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
    jvm初始内存8m, 最大内存8m, 内存溢出时dump内存快照
    编写代码:

        public static void main(String[] args) {        ArrayList strings = new ArrayList<>();        for (int i = 0; i <= 1000000000; i++){            String id = "";            for (int j = 0; j < 1000; j++){                id += UUID.randomUUID().toString();            }            strings.add(id);        }    }复制代码

    mat工具分析内存

    965bb57ad25d14fdfe743da9f7c00ceb.png

    4.2 jstack的使用:

    有时候我们需要查看jvm中的线程执行情况, 比如发现CPU的负载突然增高,出现了死锁,死循环等, 由于程序正常运行的,没有任何的输出, 从日志方面也看不出什么问题, 需要从jvm的内部线程的执行情况查找并且分析原因。
    jstack 可以看到当前pid进程中所有线程的执行情况。

    5. jstack中Java中线程的状态

    1. 初始状态(NEW): 创建一个thread对象, 但还未调用start启动线程, 则处于初始状态
    2. 运行状态(RUNNABLE): 就绪状态: 等待CPU分配执行权, 放在就绪队列中 运行状态:获得CPU的执行权, 一个CPU在同一时间只能执行一个线程,所以每个CPU在每个时刻都只有一条运行态的线程。
    3. 阻塞状态(BLOCKED):java中指请求某一锁失败时, 线程会进入阻塞态, 阻塞态会不断地请求资源, 一旦请求成功就会进入就绪队列, 等待CPU分配。
    4. 等待状态(WAITING):无限等待, 当线程中调用 wait, join, park等函数时,线程进入等待状态,等待线程会释放CPU以及锁资源,进入等待队列, 需要其他线程指示才能继续运行。
    5. 超时等待态 (TIMED_WAITING): 有限等待,与等待态的区别是, 到了超时时间会进入阻塞队列, 开始竞争锁。
    6. 终止态

    5.1死锁问题

    模拟死锁问题:

       private static Object obj1 = new Object();    private static Object obj2 = new Object();    public static void main(String[] args) {        new Thread(new Thread1()).start();        new Thread(new Thread2()).start();    }    private static class Thread1 implements Runnable{        @Override        public void run() {            synchronized (obj1){                System.out.println("Thread1 拿到了 obj1 的锁!");                try {                    // 停顿2秒的意义在于,让Thread2线程拿到obj2的锁                    Thread.sleep(2000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                synchronized (obj2){                    System.out.println("Thread1 拿到了 obj2 的锁!");                }            }        }    }    private static class Thread2 implements Runnable{        @Override        public void run() {            synchronized (obj2){                System.out.println("Thread2 拿到了 obj2 的锁!");                try {                    // 停顿2秒的意义在于,让Thread1线程拿到obj1的锁                    Thread.sleep(2000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                synchronized (obj1){                    System.out.println("Thread2 拿到了 obj1 的锁!");                }            }        }    }复制代码

    线程1和线程2相互持续持有对方需要的锁资源, 造成死锁问题。

    使用jstack查看死锁进程:

    4e6ff85b6a6c2fd7dadd08bff861432a.png
    d0ae41f0f29a6f9277e140de06d2554f.png

    jstack查找除了发生死锁进程的原因, 以及对应的堆栈信息。

    6. 使用JDK替代的 Java VisualVm

    综合的结合了以上介绍jvm性能查看的jdk自带可视化工具:

    位置: 当前jdk安装目录bin下的jvisualvm

    6741c415fb67bbbf40da955d1f8ccd2e.png

    既可以查看本地java进程, 也可以查看远程进程

    配置远程java进程如tomcat的启动文件catalina.sh, 允许jmx远程监控

    JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"复制代码

    开放9999端口, 不需要认证,关闭ssl认证

    小编分享的内容到这里就结束了!


    作者:麒麟才子
    链接:https://juejin.cn/post/6899287575794548750
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源...往期回顾:Hive性能调优 | Fetch抓取Hive性能调优 | 数据倾斜并行执行set hive.exec.parallel=true; //打开任务并行执行set hive.exec.parallel.t...

    点击上方蓝色字体,选择“设为星标

    回复”资源“获取更多资源

    fec4c8acad5c7b3d825252e97a0b91c0.png

    bbc61fd438d1715146c585ce7ca64b8b.png

    大数据技术与架构点击右侧关注,大数据开发领域最强公众号!d82b3f565ce50ce1ecf431c41309f679.png

    d029118d825fc22bcde2044e68d6bef2.png

    大数据真好玩点击右侧关注,大数据真好玩!4cd11c832eb3af327411b5b0e7cc1b8c.png

    往期回顾:

    Hive性能调优 | Fetch抓取

    Hive性能调优 | 数据倾斜

    并行执行

    5465560ccd8e04df52babea852887467.png

    set hive.exec.parallel=true;              //打开任务并行执行
    set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度,默认为8。

    当然,得是在系统资源比较空闲的时候才有优势,否则,没资源,并行也起不来。

    严格模式

    Hive提供了一个严格模式,可以防止用户执行“高危”的查询。

    通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。开启严格模式需要修改hive.mapred.mode值为strict,开启严格模式可以禁止3种类型的查询。

    hive.mapred.modestrict
    The mode in which the Hive operations are being performed.
    In strict mode, some risky queries are not allowed to run. They include:
    Cartesian Product.
    No partition being picked up for a query.
    Comparing bigints and strings.
    Comparing bigints and doubles.
    Orderby without limit.
    1. 对于分区表,用户不允许扫描所有分区,除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。没有进行分区限制的查询可能会消耗令人不可接受的巨大资源来处理这个表。

    2. 对于使用了order by语句的查询,要求必须使用limit语句。因为order by为了执行排序过程会将所有的结果数据分发到同一个Reducer中进行处理,强制要求用户增加这个LIMIT语句可以防止Reducer额外执行很长一段时间。

    3. 限制笛卡尔积的查询。对关系型数据库非常了解的用户可能期望在执行JOIN查询的时候不使用ON语句而是使用where语句,这样关系数据库的执行优化器就可以高效地将WHERE语句转化成那个ON语句。不幸的是,Hive并不会执行这种优化,因此,如果表足够大,那么这个查询就会出现不可控的情况。

    JVM重用

    JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。

    Hadoop的默认配置通常是使用派生JVM来执行map和Reduce任务的。这时JVM的启动过程可能会造成相当大的开销,尤其是执行的job包含有成百上千task任务的情况。JVM重用可以使得JVM实例在同一个job中重新使用N次。N的值可以在Hadoop的mapred-site.xml文件中进行配置。通常在10-20之间,具体多少需要根据具体业务场景测试得出。

    mapreduce.job.jvm.numtasks10How many tasks to run per jvm. If set to -1, there is
    no limit.

    我们也可以在hive当中通过

    set mapred.job.reuse.jvm.num.tasks=10;

    这个设置来设置我们的jvm重用 当然,这个功能也是有它的缺点的。开启JVM重用将一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡的”job中有某几个reduce task执行的时间要比其他Reduce task消耗的时间多的多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。

    推测执行

    在分布式集群环境下,因为程序Bug(包括Hadoop本身的bug),负载不均衡或者资源分布不均等原因,会造成同一个作业的多个任务之间运行速度不一致,有些任务的运行速度可能明显慢于其他任务(比如一个作业的某个任务进度只有50%,而其他所有任务已经运行完毕),则这些任务会拖慢作业的整体执行进度。为了避免这种情况发生,Hadoop采用了推测执行(Speculative Execution)机制,它根据一定的法则推测出“拖后腿”的任务,并为这样的任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,并最终选用最先成功运行完成任务的计算结果作为最终结果。

    Hive 同样可以开启推测执行

    设置开启推测执行参数:Hadoop的mapred-site.xml文件中进行配置

    mapreduce.map.speculativetrueIf true, then multiple instances of some map tasks 
    may be executed in parallel.

    mapreduce.reduce.speculativetrueIf true, then multiple instances of some reduce tasks
    may be executed in parallel.

    不过hive本身也提供了配置项来控制reduce-side的推测执行:

    hive.mapred.reduce.tasks.speculative.executiontrueWhether speculative execution for reducers should be turned on. 

    关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。如果用户因为输入数据量很大而需要执行长时间的map或者Reduce task的话,那么启动推测执行造成的浪费是非常巨大大。

    4e95f144007ec9cb90cf095aa9da88fa.gif4249431522f7a71b83e29294d3a7ae30.gif

    版权声明:

    本文为大数据技术与架构整理,原作者独家授权。未经原作者允许转载追究侵权责任。编辑|冷眼丶微信公众号|import_bigdata欢迎点赞+收藏+转发朋友圈素质三连

    484efdb968110a8d0f70cb7ada3d8aa7.png

    文章不错?点个【在看】吧! ?

    展开全文
  • jcmd的使用: jcmd -l #列出所有的Java虚拟机 jcmd 12472 VM.uptime #查看虚拟机启动时间 jcmd 12472 Thread.print #打印线程栈信息 ...jcmd 12472 GC.class_histogram #查看系统中...参考的书籍pdf下载链接 ...

    jcmd的使用:

     

    jcmd -l #列出所有的Java虚拟机
    
    
    jcmd 12472 VM.uptime  #查看虚拟机启动时间
    
    jcmd 12472 Thread.print  #打印线程栈信息
    
    jcmd 12472 GC.class_histogram #查看系统中类得统计信息

    #导出堆信息

    jcmd 12472 GC.heap_dump D:\dump     

     

     

     

     

    参考的书籍pdf下载链接

     

    展开全文
  • JVM笔记资料压缩文件

    2020-03-20 17:19:26
    jvm笔记 1、jvm总体架构.pdf 2、堆内存内部结构.pdf 3、有关内存的常用配置参数.pdf 4、有关内存溢出和内存泄漏的知识点.pdf 5、jvm里的垃圾回收机制.pdf ...7、Tomcat调优实战.pdf 8、动态查看JVM内存的工具.pdf
  • JVM面试难题 当面试官向你提问JVM实战问题时,你是否感觉到无所适从? 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬...如果面对JVM实战调优无从下手,那么你缺乏这两个字 那就是实战 消除痛点 解决面试 积.

    JVM面试难题

    1. 当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?
    2. 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?
    3. 面对JVM的海量参数,你是否感觉到迷茫无助?
    4. 看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?

    那么,作为JAVA工程师,你曾经面对过JVM这只怪兽吗?你有没有被JVM伤害过?

     

    从招聘需求上看,JVM还是很重要滴

    如果面对JVM实战调优无从下手,那么你缺乏这两个字

    那就是实战

    1. 消除痛点
    2. 解决面试
    3. 积累实战经验

    马士兵用四个小时时间,带你走进JVM实战调优的世界,帮助你在面对那些上亿用户,千万QPS,百万TPS,以及每天上PB级大数据量处理系统的时候,不再胆怯,不再心虚,开启涨薪升级之旅!

    让马士兵老师带你横扫一切关于JVM的面试问题,吊打所有敢于提问JVM的面试官。

    在你简历上填写JVM调优经历,为升职加薪添上浓墨重彩的一笔。

    Jvm垃圾回收快速入门

    1、什么是垃圾?

    2、如何定位垃圾?

    3、常用垃圾回收算法

    4、常用垃圾回收器

    5、系统上线前预估系统的内存占用情况

    6、系统上线前预估系统的并发访问情况

    7、根据预估值设定JVM初始参数

    8、压力测试方法论

    9、根据压测结果调整参数值

    10、系统上线后设定日志参数

    11、定期观察日志情况

    12、根据日志解决实战问题

    生产环境中的垃圾回收方法理论与动手实战

    13、为什么一个百万级TPS系统会频繁GC?

    14、定位JVM问题的实用参数设置

    15、用top命令观察系统运行情况

    16、用jps定位虚拟机进程

    17、用jstat定位JVM问题

    18、用jmap导出内存转储文件

    19、用jstack定位问题线程

    20、用jhat分析转储文件

    21、其他给力的工具visual VM,MAT,Arthas介绍

    22、动手实战

    23、集中答疑,解决同学们学习中的问题

    24、面向未来,学习路线指引与职业规划

    参加的小伙伴可获得马士兵老师首发实体【涨薪秘籍】

    如何参与:

     

     

     

    JVM调优实战(深入理解Java虚拟机)

    Java 程序是如何运行的?Java虚拟机在其中扮演了怎样的角色?如何让Java程序具有更高的并发性?许多Java程序员都会诸如此类的疑问。无奈,国内在很长一段时间里都没有一本从实际应用的角度讲解Java虚拟机的著作,《深入理解Java虚拟机:JVM高级特性与最佳实践》的出版可谓填补了这个空白。它从Java程序员的角度出发,系统地将Java程序运行过程中涉及的各种知识整合到了一起,并配以日常工作中可能会碰到的疑难案例,引领读者轻松踏上探索Java虚拟机的旅途,是广大对Java虚拟机感兴趣的读者的福音!(强烈推荐)

    1. 走近Java
    2. 自动内存管理机制
    3. 虚拟机执行子系统
    4. 程序编译与代码优化
    5. 高效并发

    走近Java

    1. 概述
    2. Java技术体系
    3. Java发展史
    4. 展望Java技术的未来
    5. 实战:自己编译JDK

    自动内存管理机制

    1. Java内存区域与内存溢出异常
    2. 垃圾收集器与内存分配策略
    3. 虚拟机性能监控与故障处理I
    4. 调优案例分析与实战

    虚拟机执行子系统

    1. 类文件结构
    2. 虚拟机类加载机制
    3. 虚拟机字节码执行引擎
    4. 类加载及执行子系统的案例与

    程序编译与代码优化

    1. 早期(编译期)优化
    2. 晚期(运行期)优化

    高效并发

    1. Java内存模型与线程
    2. 线程安全与锁优化

    《深入理解Java虚拟机:JVM高级特性与最佳实践》围绕内存管理、执行子系统、编程编译与优化、高效并发等核心内容对JVM进行全面而深入的分析,深刻揭示JVM的工作原理;注重实现,以解决实践中的疑难问题为首要目的,包含大量经典案例和最佳实践。

    由于文案限制,对这本深入理解Java虚拟机感兴趣的朋友们可以

     

     

    展开全文
  • 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC,OOM等问题,一脸懵圈! 大多数人学习JVM面临的痛点 实战经验缺乏 很多人学习一门技术,更...
  • Hadoop实战中文版.pdf

    热门讨论 2015-01-19 13:26:50
     6.3.4 重用JVM  6.3.5 根据猜测执行来运行  6.3.6 代码重构与算法重写  6.4 小结  第7章 细则手册  7.1 向任务传递作业定制的参数  7.2 探查任务特定信息  7.3 划分为多个输出文件  7.4 以数据库...
  • Hadoop实战中文版.PDF

    2015-11-07 06:44:04
    6.3.4 重用JVM 132 6.3.5 根据猜测执行来运行 132 6.3.6 代码重构与算法重写 133 6.4 小结 134 第7章 细则手册 135 7.1 向任务传递作业定制的参数 135 7.2 探查任务特定信息 137 7.3 划分为多个输出...
  • 一次性精通JVM JAVA虚拟机

    千人学习 2019-12-13 20:27:37
    jcmd、jinfo、jstap、jmap、jconsole、jvisualvm、jstat、jmx、jprofile、jps全部工具的使用一网大金 课程资料 课程附带配套2个项目源码 159页高清PDF理论篇课件一份 89页高清PDF实战篇课件一份 Unsafe源码PDF课件...
  • 内容包括:2020面试题库、Redis全套视频、JVM调优实战、分布式微服务专题、2020热门框架源码解析、千万级数据库调优技巧、项目实战、Zookeeper集群原理、Tomact底层架构设计、Redis持久化技术…(如下图) ...
  • 点击上方“逆锋起笔”,公众号回复PDF领取大佬们推荐的学习资料来源:https://urlify.cn/jyYny2对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强...
  • 1、多线程与高并发2、JVM调优案例式实战化指导3、经常被问的操作系统原理解析4、从底向上网络原理解读5、案例式深入解析23种设计模式6、设计原型7、源码层面无死角解析netty需要获取以上高清大纲等学习资料,源码,...
  • 推荐学习重识SSM,“超高频面试点+源码解析+实战PDF”,一次性干掉全拿走 全网独家的“MySQL高级知识”集合,骨灰级收藏,手慢则无 “吃”完这本Java性能调优实战,MySQL+JVM+Tomcat等问题一键全消 前言之前分析了...
  • │ │ JVM调优实战.doc │ │ Tomcat7优化.docx │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 │ 07-使用Jedis连接集群操作.avi │ ...
  • 【置顶2】再肝两夜,写了个「服务器项目部署」实战PDF手册 Linux系统 常用 Linux 发行版操作系统大盘点 人手一套Linux环境搭建之:macOS版本教程 人手一套Linux环境之:Windows版本教程 面试常问的20个Linux命令 ...
  • 精通sql及性能调优,熟练使用java、python、scala其中一种编程语言; 掌握数据仓库 (DW) / OLAP /商业智能 (BI) /数据统计理论,并灵活的应用,具备大型数据仓库设计经验; 这里只列举了三类比较热门的技术岗位,...
  • JVM故事】了解JVM的结构,好在面试时吹牛 看完这篇垃圾回收,和面试官扯皮没问题了 Java堆内存是线程共享的!面试官:你确定吗? 线上服务的FGC问题排查,看这篇就够了! 记一次大促期间JVM堆外内存泄漏故障排查...
  • 03 MapReduce-Demo——这是我另外一个项目,从多个设计模式实战 MapReduce 编程实例 仅供参考: 原生态在hadoop上运行java程序 ——引自@zhao_xiao_long 推荐几个博客分类博主LanceToBigData:Hadoop ,...
  • 前言 在工作中,作为 Java 开发的程序员,Tomcat 服务器是大家常用的,也是很多公司现在正在用的。...小编这里也对应整理了一份JVM调优实战400多页学习笔记,关注公众号:麒麟改bug,获取详细PDF对于

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

jvm调优实战pdf