当我们开发完 Java 程序并交付测试完成后,就需要将程序在线上运行,一般运行环境有:原生 Java 进程中运行;Java WEB 容器(Tomcat、Jetty 等)运行环境等。无论在哪种环境下运行,都免不了对其运行环境的 JVM 内存进行设置,因为程序运行中数据的处理大部分都是在内存中完成的,应用程序运行中可用内存的多少,直接影响到程序运行的效率,甚至有的时候内存设置不足,会导致 OOM 问题,由此可见内存设置的重要性。考虑到目前仍然有大量用户在 JDK1.7 上,所以这节课是以 1. 7 为基础讲的,主要目的是 JVM 设置扫盲。至于 1.8 和 1.9 的新特性和各个版本之间的差别,为了简单起见,不会做具体说明。讲师介绍王磊,现任国内某知名互联网公司大数据架构师。《offer 来了:Java 面试核心知识点精讲(原理篇)》《offer 来了:Java 面试核心知识点精讲(架构篇)》作者。有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现,有深刻理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计,有丰富的实战经验。
精选留言(14)
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异常诊断日志
作者回复: 您好,因为不同应用对内存需求不一样,有的程序会将数据缓存到JVM内存中加速,需要的内存相对较大。有的应用程序只是API无状态请求,对内存需求就不大。该视屏8GB的内存设置也是基于一般API无状态请求的应用设置的。
作者回复: 长生命周期对象也就是经过多次垃圾回购仍然在使用的的对象。
作者回复: 这是因为新生代用了标记清除算法实现的垃圾回收机制实现的。如果您感兴趣的话可以看我offer来了这部书对jvm的详细介绍。
作者回复: 经过minorGC后survivorFrom是否有存活对象是一般根据对象的可达性和对象的年龄来决定的。一般经过minorGC后会有存活对象。
作者回复: 由于目前仍然有大量用户在JDK1.7上,所以这节课是以1. 7为基础讲的,主要目的是为了JVM设置扫盲。至于1.8和1.9的新特性和各个版本之间的差别,分享中为了简单起见,未做具体说明。