当前播放: 彻底掌握 JVM 内存设置的金钥匙
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

彻底掌握 JVM 内存设置的金钥匙

王磊 某知名互联网公司大数据架构师
6820次播放
¥4.99 单独购买
开通会员免费看
当我们开发完 Java 程序并交付测试完成后,就需要将程序在线上运行,一般运行环境有:原生 Java 进程中运行;Java WEB 容器(Tomcat、Jetty 等)运行环境等。无论在哪种环境下运行,都免不了对其运行环境的 JVM 内存进行设置,因为程序运行中数据的处理大部分都是在内存中完成的,应用程序运行中可用内存的多少,直接影响到程序运行的效率,甚至有的时候内存设置不足,会导致 OOM 问题,由此可见内存设置的重要性。考虑到目前仍然有大量用户在 JDK1.7 上,所以这节课是以 1. 7 为基础讲的,主要目的是 JVM 设置扫盲。至于 1.8 和 1.9 的新特性和各个版本之间的差别,为了简单起见,不会做具体说明。讲师介绍王磊,现任国内某知名互联网公司大数据架构师。《offer 来了:Java 面试核心知识点精讲(原理篇)》《offer 来了:Java 面试核心知识点精讲(架构篇)》作者。有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现,有深刻理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计,有丰富的实战经验。
展开
登录 后留言

精选留言(14)

  • zhguixin
    笔记记录:JVM内存设置

    JVM运行时内存构成

    新生代1/3

    - 新创建的对象首先放在新生代
    - 对象状态朝生夕死
    - 垃圾回收最频繁的地方
    - 采用MinorGC进行内存清理

    老年代2/3

    - 大对象
    - 多次垃圾回收后仍然保留的对象
    - 采用MajorGC进行内存清理

    永久代(很少内存空间)

    - class文件、元数据信息
    - 不执行内存清理

    内存设置常用的参数

    -Xms -Xmx

    --XX:NewSize

    --XX:MaxPermSize

    --XX:NewRatio=n

    --XX:SurivorRatio=n

    --XX:+UserParNewGC和--X:+UserConcMarkSweepGC

    HeapDumpOnOutMemoryError和HeapDumpPath

    内存设置实战步骤

    1、为操作系统预留运行资源、其余的内存分配给JVM

    2、判断对象特性,确定新生代和老年代的内存大小

    3、设置垃圾回收算法和开启OOM异常诊断日志
    2020-05-17
    1
    7
  • Geek_a8799f
    老师您举得例子是一个8G服务器运行一个服务,在实际情况下一个8G服务可能会运行多个服务,能不能从服务本身对内存需求的情况讲一下怎么去设置堆内存的大小呢?

    作者回复: 您好,因为不同应用对内存需求不一样,有的程序会将数据缓存到JVM内存中加速,需要的内存相对较大。有的应用程序只是API无状态请求,对内存需求就不大。该视屏8GB的内存设置也是基于一般API无状态请求的应用设置的。

    2020-05-16
    6
    2
  • 整体还算清晰明了,通俗易懂,不过老师的录音需要1.25倍速播放才比较流畅。
    2020-05-23
    1
    2
  • 天芒Jian
    漂亮
    2021-05-11
  • 慎独明强
    对于老师的设置方法有些不同的意见。一、从新生代进入老年代对象,老师讲了三种 大对象,对象年龄超过15岁,S区放不下,还有动态年龄规则这一种。二、永久代也不是永久,只是回收条件比较苛刻。 三、年轻代和老年代为1:3,这个可以讲下依据吗?经验值?还是适用于大部分场景。我觉得这个没有银弹,需要根据系统实际每秒产生对象在年轻代,系统处理请求速度这些,每次majorgc还有多少对象剩余,又有多少对象会进入老年代。
    2020-08-18
    1
  • X
    major gc不应该是只有并发标记阶段,譬如cms和g1这些才有的吗?jdk1.7默认parallel所以只要fullgc才回收老年代,是不是这样?
    2020-07-24
  • 靠人品去赢
    如果是高版本的G1垃圾回收器,是不是就不是这样811分配的情况,因为G1直接打破,以每一块的状态配置。
    2020-06-01
  • 思奇
    讲得很好,特别minorGC流程那一块,之前的认知有些偏差,这次加深了理解,感谢!
    2020-05-31
  • 再忙也要充充电
    老年代里存放了长生命周期对象和大对象,长生命周期对象怎么理解呢

    作者回复: 长生命周期对象也就是经过多次垃圾回购仍然在使用的的对象。

    2020-05-26
  • 小刘
    永久代也存在垃圾回收机制,当没有对class引用e,而且也没有对classloader进行使用的时候就可以被回收掉
    2020-05-24
  • 恋雪
    老师请教个问题,minorGC后为什么要交换from区和to区,存活下来的对象一直保存在to区有什么问题吗?

    作者回复: 这是因为新生代用了标记清除算法实现的垃圾回收机制实现的。如果您感兴趣的话可以看我offer来了这部书对jvm的详细介绍。

    2020-05-19
    4
  • 光夏i
    新生代第一次MinorGC,SurvivorFrom也有对象存在吗?

    作者回复: 经过minorGC后survivorFrom是否有存活对象是一般根据对象的可达性和对象的年龄来决定的。一般经过minorGC后会有存活对象。

    2020-05-18
    2
  • Trident
    这个是哪个版本的jvm参数?
    2020-05-18
    1
  • yihang
    应该说明一下java版本,视频中的永久代参数和垃圾回收器都比较旧了

    作者回复: 由于目前仍然有大量用户在JDK1.7上,所以这节课是以1. 7为基础讲的,主要目的是为了JVM设置扫盲。至于1.8和1.9的新特性和各个版本之间的差别,分享中为了简单起见,未做具体说明。

    2020-05-18
    5
收起评论
极客时间超级会员
开通超级会员 解锁海量内容免费学特权
立即开通
相关推荐
相关专题
4620
06:01
iOS 路由链接总是拼错怎么办?
宋旭陶 美团点评
9154
15:17
如何在多线程环境里安全读写数组?
张杰 美团高级技术专家
9832
08:34
如何使用 sed 处理多行配置?
尹会生 金山西山居运维总监
5940
09:53
HBase 和 Aerospike 哪个 NoSQL 才是你的菜?
臧萌 PayPal 数据处理组技术负责人