目录

Sun JVM 内存管理

Sun JVM 常用参数

Sun JVM 参数配置

内存分配与回收策略

GC 日志配置使用详解

GC 日志参数介绍

GC 日志参数使用

GC 日志信息分析


Sun JVM 内存管理

1、J2EE 系统开发的中,有时候应用系统处理的数据量不大,系统体积也不大,技术架构也没有问题,服务器的内存 8G、16G,但是
系统运行起来却很慢,还经常出现内存溢出错误。首当其冲的应该从 J2EE 应用系统本身上找问题,但是 J2EE 应用系统是运行在 J2EE 应用服务器上的,而 J2EE 应用服务器又是运行在 JVM(Java Virtual Machine)上的,所以其实在生产环境中 JVM 参数的优化和设置对 J2EE 应用系统性能有着决定性的作用。(Java SE应用也是同理)

2、本节将介绍 JAVA 的创建者 SUN 公司的 JVM 的内存管理机制(虽然除了 SUN 公司的 JVM,还有 IBM 的 JVM,Bea 的 JVM 等,但现实中绝大多数的 Java 应用是运行在 SUN 公司的 JVM 上的)。

3、JVM 的早期版本并没有进行分区管理,这样的后果是 JVM 进行垃圾回收时,不得不扫描 JVM 所管理的整片内存, 所以搜集垃圾是很耗费资源的事情,这也是早期 JAVA 程序的性能低下的主要原因。

4、随着 JVM 的发展,JVM 引进了分区管理的机制。 采用分区管理机制的 JVM 将 JVM 所管理的所有内存资源分为 2 个大的部分。 永久存储区(Permanent Space)和堆空间(The Heap Space)。其中堆空间又分为新生区(Young (New) generation space)和养老区(Tenure (Old) generation space),新生区又分为伊甸园(Eden space),幸存者0区(Survivor 0 space)和幸存者1区(Survivor 1 space)。具体分区如下图:

永久存储区(Permanent Space)     1)永久存储区是 JVM 的驻留内存,用于存放 JDK 自身所携带的 Class , Interface 的元数据,应用服务器允许必须的 Class,Interface 的元数据和 Java 程序运行时需要的 Class 和 Interface 的元数据。
    2)被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭 JVM 时,释放此区域所控制的内存。
    3)如果空间不足,则会有内存溢出错误 "永久存储区溢出(java.lang.OutOfMemoryError: Java Permanent Space)"
堆空间(The Heap Space)

1)堆空间(The Heap Space)是 JAVA 对象生死存亡的地区,JAVA 对象的出生,成长,死亡都在这个区域完成。
    2)堆空间又分别按 JAVA 对象的创建和年龄特征分为养老区和新生区。
    3)新生区(Young (New) generation space)的作用包括 JAVA 对象的创建和从 JAVA 对象中筛选出能进入养老区的 JAVA 对象。 
    4)伊甸园(Eden space):JAVA 程序的所有对象在此出生,该区的名字因此而得名。也即是说当你的 JAVA 程序运行时,需要创建新的对象,JVM 将在该区为你创建一个指定的对象供程序使用。
    5)创建对象的依据即是永久存储区中的元数据。

6)空间不足有JVM 堆空间溢出错误:java.lang.OutOfMemoryError: Java heap space

幸存者0区(Survivor 0 space)和幸存者1区(Survivor1 space)     1)当伊甸园的空间用完,程序又需要创建对象时,JVM 的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁工作。同时将伊甸园中的还有其他对象引用的对象移动到幸存者0区。
    2)幸存者0区就是用于存放伊甸园垃圾回收时所幸存下来的 JAVA 对象。当将伊甸园中的还有其他对象引用的对象移动到幸存者0区时,如果幸存者0区也没有空间来存放这些对象时,JVM 的垃圾回收器将对幸存者0区进行垃圾回收处理,将幸存者0区中不在有其他对象引用的 JAVA 对象进行销毁,将幸存者0区中还有其他对象引用的对象移动到幸存者1区。
    3)幸存者1区的作用就是用于存放幸存者0区垃圾回收处理所幸存下来的 JAVA对象。
    4)如果幸存者1区有足够空间存放则直接放到幸存者1区,如果幸存者1区没有足够空间存放,则 JVM 的垃圾回收器执行对幸存者1区的垃圾回收工作,销毁那些不再被其他对象引用的 JAVA 对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象所引用的 JAVA 对象移动到养老区。
养老区(Tenure (Old) generation space)     1)用于保存从新生区筛选出来的 JAVA 对象。
    2、如果养老区有足够空间存放则直接放到养老区,如果养老区没有足够空间存放,则JVM的垃圾回收器执行对养老区区的垃圾回收工作,销毁那些不再被其他对象引用的JAVA对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并保留那些被其他对象所引用的JAVA对象。

Sun JVM 常用参数

JVM 相关参数
参数名 参数说明
-server 启用能够执行优化的编译器, 显著提高服务器的性能,但使用能够执行优化的编译器时,服务器的预备时间将会较长。生产环境的服务器强烈推荐设置此参数。
-Xss 单个线程堆栈大小值;JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:+UseParNewGC 可用来设置年轻代为并发收集【多CPU】,如果你的服务器有多个CPU,你可以开启此参数;开启此参数,多个CPU可并发进行垃圾回收,可提高垃圾回收的速度。此参数和+UseParallelGC,-XX:ParallelGCThreads搭配使用。
+UseParallelGC 选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集 。可提高系统的吞吐量。
-XX:ParallelGCThreads 年轻代并行垃圾收集的前提下(对并发也有效果)的线程数,增加并行度,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
永久存储区相关参数
参数名 参数说明
-Xnoclassgc 每次永久存储区满了后一般GC算法在做扩展分配内存前都会触发一次FULL GC,除非设置了-Xnoclassgc.
-XX:PermSize 应用服务器启动时,永久存储区的初始内存大小
-XX:MaxPermSize 应用运行中,永久存储区的极限值。为了不消耗扩大 JVM 永久存储区分配的开销,将此参数和-XX:PermSize 这个两个值设为相等。
堆空间相关参数
参数名 参数说明
-Xms 启动应用时,JVM 堆空间的初始大小值。
-Xmx 应用运行中,JVM 堆空间的极限值。为了不消耗扩大JVM堆空间分配的开销,将此参数和-Xms这个两个值设为相等,考虑到需要开线程,将此值设置为总内存的80%.
-Xmn 此参数硬性规定堆空间的新生代空间大小,推荐设为堆空间大小的1/4。

1、JVM 参数关系到系统的性能,而其中 -XX:PermSize,-XX:MaxPermSize,-Xms,-Xmx 和 -Xmn 这 5 个参数更是直接关系到系统的性能,系统是否会出现内存溢出。

2、-XX:PermSize 和 -XX:MaxPermSize 分别设置应用服务器启动时,永久存储区的初始大小和极限大小;在生产环境中强烈推荐将这个两个值设置为相同的值,以避免分配永久存储区的开销,具体的值可取系统 "疲劳测试" 获取到的永久存储区的极限值。如果不进行设置-XX:MaxPermSize ,则默认值为 64M,一般来说系统的类定义文件大小都会超过这个默认值。

3、-Xms 和 -Xmx 分别是服务器启动时,堆空间的初始大小和极限值。-Xms 的默认值是物理内存的 1/64 但小于1G,-Xmx 的默认值是物理内存的 1/4 但小于1G。在生产环境中这些默认值是无法满足需要的,即使服务器有 8g 的内存,如果不对 JVM 参数进行设置优化,应用服务器启动时还是按默认值来分配和约束 JVM 对内存资源的使用,不会充分的利用所有的内存资源。

4、这也就是为什么 "服务器8g、16g内存,系统也就100M左右,数据量也不大,居然出现内存溢出" 。如:"永久存储区溢出(java.lang.OutOfMemoryError: Java Permanent Space)","JVM堆空间溢出(java.lang.OutOfMemoryError: Java heap space)"这两大溢出错误。永久存储区溢出是永久存储区设置太小,不能满足系统需要的大小,此时只需要调整 -XX:PermSize 和 -XX:MaxPermSize 这两个参数即可。JVM堆空间溢出是JVM堆空间不足,此时只需要调整 -Xms 和 -Xmx 这两个参数即可。

5、温馨提示:这些 JVM 参数可以通过《 Java 进程状态工具 jps.exe 与图形化监控工具 Jconsole.exe》进行简单的查询。

C:\Users\Administrator.SC-201707281232>jps
2304 Jps
976 RemoteMavenServer
5048 Launcher
12044 gxg_client.jar
12076 AppMain
6380C:\Users\Administrator.SC-201707281232>jps -v |findStr 6380
6380  -Xms128m -Xmx512m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=150m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djb.vmOptions=D:\JetBrains\IntelliJ_IDEA_14\bin\idea.exe.vmoptions -Xbootclasspath/a:D:\JetBrains\IntelliJ_IDEA_14\lib\boot.jar -Didea.paths.selector=IntelliJIdea14

pid 为 6380 的 java 进程为 IDEA 编辑器,-v 参数可以看到 IDEA 设置的 jvm 参数

6、上面这些 JVM 参数可以通过 JDK 下的核心工具 java.exe 来进行查看,配置了环境变量后,cmd 中直接输 java:

C:\Users\Administrator>java
用法: java [-options] class [args...](执行类)或  java [-options] -jar jarfile [args...](执行 jar 文件)
其中选项包括:-d32          使用 32 位数据模型 (如果可用)-d64          使用 64 位数据模型 (如果可用)-server       选择 "server" VM默认 VM 是 server.-cp <目录和 zip/jar 文件的类搜索路径>-classpath <目录和 zip/jar 文件的类搜索路径>用 ; 分隔的目录, JAR 档案和 ZIP 档案列表, 用于搜索类文件。-D<名称>=<值>设置系统属性-verbose:[class|gc|jni]启用详细输出-version      输出产品版本并退出-version:<值>警告: 此功能已过时, 将在未来发行版中删除。需要指定的版本才能运行-showversion  输出产品版本并继续-jre-restrict-search | -no-jre-restrict-search警告: 此功能已过时, 将在未来发行版中删除。在版本搜索中包括/排除用户专用 JRE-? -help      输出此帮助消息-X            输出非标准选项的帮助-ea[:<packagename>...|:<classname>]-enableassertions[:<packagename>...|:<classname>]按指定的粒度启用断言-da[:<packagename>...|:<classname>]-disableassertions[:<packagename>...|:<classname>]禁用具有指定粒度的断言-esa | -enablesystemassertions启用系统断言-dsa | -disablesystemassertions禁用系统断言-agentlib:<libname>[=<选项>]加载本机代理库 <libname>, 例如 -agentlib:hprof另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help-agentpath:<pathname>[=<选项>]按完整路径名加载本机代理库-javaagent:<jarpath>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument-splash:<imagepath>使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

它的用法是可以执行 .class 文件以及执行 .jar 文件,这里就不细解释了。

其中有个 -X(注意是大写)选项,就是用于查看 JVM 配置参数的。这也就是为什么 JVM 参数都是 -X 开头了。

7、现在使用 java -X 查看 JVM 参数:

C:\Users\Administrator>java -X-Xmixed           混合模式执行 (默认)-Xint             仅解释模式执行-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>设置搜索路径以引导类和资源-Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>附加在引导类路径末尾-Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>置于引导类路径之前-Xdiag            显示附加诊断消息-Xnoclassgc       禁用类垃圾收集-Xincgc           启用增量垃圾收集-Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)-Xbatch           禁用后台编译-Xms<size>        设置初始 Java 堆大小-Xmx<size>        设置最大 Java 堆大小-Xss<size>        设置 Java 线程堆栈大小-Xprof            输出 cpu 配置文件数据-Xfuture          启用最严格的检查, 预期将来的默认值-Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)-Xcheck:jni       对 JNI 函数执行其他检查-Xshare:off       不尝试使用共享类数据-Xshare:auto      在可能的情况下使用共享类数据 (默认)-Xshare:on        要求使用共享类数据, 否则将失败。-XshowSettings    显示所有设置并继续-XshowSettings:all显示所有设置并继续-XshowSettings:vm 显示所有与 vm 相关的设置并继续-XshowSettings:properties显示所有属性设置并继续-XshowSettings:locale显示所有与区域设置相关的设置并继续-X 选项是非标准选项, 如有更改, 恕不另行通知。

第一列是 JVM 参数,第二列是描述,以及解释的很清楚了,和上面表中的 JVM 参数是一样的,其中常用的有 -Xms、-Xmx、-Xss等。

Sun JVM 参数配置

1、JVM 参数在一般开发中默认即可,不需要任何配置,但是在生产环境中,为了提高性能,往往需要调整这些参数,以求系统达到最佳新能。

2、另外这些参数的配置也是影响系统稳定性的一个重要因素,相信大多数 Java 开发人员都见过 “OutOfMemory” 类型的错误,引发的原因不仅仅是 Java 应用,还很可能是 JVM 参数配置不当。

3、按着 Java 应用的不同,配置 JVM 参数主要分为以下方式:

1)Java SE 应用:对于 *.class 文件以及可执行 jar 程序,使用 java、javaw 命令进行运行时,将 JVM 参数带上即可。

2)Java EE 应用:Java web 程序在服务器中运行(如 Tomcat、Jetty、weblogic等),此时配置 JVM 参数,需要在服务器的配置文件中进行修改。

3)编辑器:如 Eclipse 、IDEA 等编辑器运行 Java 程序时,编辑器自身也会有修改 JVM 参数的功能。

4)可执行 .jar 包:如 Spring boot 打包的包,java -jar xxx 时直接将 JVM 参数带上即可。

4、本节介绍 java、javaw 命令行方式修改 JVM 参数。如下所示先准备一个 .java 源代码:

/*** Created by Administrator on 2019/4/2.*/
public class HelloWorld {public static void main(String[] args) throws InterruptedException {int count = 1000;while (count >= 0) {System.out.println(count-- + " 秒后运行完毕...");Thread.sleep(1000);}}
}

5、下面使用 "java -Xms256M -Xmx512M HelloWorld" 命令带上 JVM 参数修改初始化堆大小与堆的最大值:

6、上面运行之后,现在使用 JDK 自带的 jvisualvm.exe 工具来进行查看,在 %JAVA_HOME%/bin目录下,可以参考《Java JDK 自带监控工具 jps.exe、jconsole.exe、jvisualvm.exe》

如上所示 JVM 参数设置是成功有效的。

这里虽然展示的 java 命令执行 .class 程序,但是 java、javaw 命令执行可执行 jar 程序也是一样,同样命令行传参即可,这里不再累述。

如:java -jar -Xms200m -Xmx200m framework-server2-springcloud-2.1.0-SNAPSHOT.jar

内存分配与回收策略

1、对象的内存分配,主要分配在新生代的 Eden 区上,少数情况下也可能直接分配在老年代中。

2.、优先在 Eden 区分配:大多数情况下,对象在新生代 Eden 区分配,当 Eden 区空间不够时,发起 Minor GC。

Minor GC:发生在新生代上,因为新生代对象存活时间很短,当 Eden 区空间不够时,就会触发 Minor GC ,执行的频率较高,执行的速度一般也会比较快。

Full GC:发生在老年代上,老年代对象和新生代的相反,其存活时间长,因此 Full GC 很少执行,而且执行速度会比 Minor GC 慢很多。

3、大对象直接进入老年代

1)大对象是指需要连续内存空间的对象,最典型的大对象是那种很长的字符串以及数组。经常出现大对象会提前触发垃圾收集以获取足够的连续空间分配给大对象。

2)提供 -XX:PretenureSizeThreshold 参数,大于此值的对象直接在老年代分配,避免在 Eden 区和 Survivor 区之间的大量内存复制。

4、长期存活的对象进入老年代

JVM 为对象定义年龄计数器,经过 Minor GC 依然存活,并且能被 Survivor 区容纳的,移被移到 Survivor 区,年龄就增加 1 岁,增加到一定年龄则移动到老年代中(默认 15 岁,通过 -XX:MaxTenuringThreshold 设置)。

Full GC 触发条件

1、对于 Minor GC,其触发条件非常简单,当 Eden 区空间满时,就将触发一次 Minor GC。而 Full GC 则相对复杂,有以下条件:

1)调用 System.gc():此方法的调用是建议 JVM 进行 Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加 Full GC 的频率,也即增加了间歇性停顿的次数。因此强烈建议能不使用此方法就不要使用,让虚拟机自己去管理它的内存。可通过 -XX:+ DisableExplicitGC 来禁止 RMI 调用 System.gc()。

2)老年代空间不足:老年代空间不足的常见场景为前文所讲的大对象直接进入老年代、长期存活的对象进入老年代等,当执行 Full GC 后空间仍然不足,则抛出 Java.lang.OutOfMemoryError。为避免以上原因引起的 Full GC,调优时应尽量做到让对象在 Minor GC 阶段被回收、让对象在新生代多存活一段时间以及不要创建过大的对象及数组。

3. 空间分配担保失败:使用复制算法的 Minor GC 需要老年代的内存空间作担保,如果出现了 HandlePromotionFailure 担保失败,则会触发 Full GC。

GC 日志配置使用详解

GC 日志参数介绍

1、由于服务器配置或者是程序自身原因,服务会出现 GC 甚至宕机现象,所以配置 GC 日志参数,打印 JVM GC 日志信息显得必不可少。

2、下面的 GC 日志配置参数仅供参考:

# 必选项
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintTenuringDistribution
-XX:+PrintHeapAtGC
-XX:+PrintReferenceGC
-XX:+PrintGCApplicationStoppedTime# 可选项
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1# GC日志存储选项(默认不会存在,而是直接打印在控制台)
-Xloggc:/path/logs/gc-%t.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=16
-XX:GCLogFileSize=100M
-XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCDateStamps 打印GC日期戳
-XX:+PrintTenuringDistribution 打印对象年龄分布日志,分析 GC 时的晋升情况和晋升导致的高暂停
-XX:+PrintHeapAtGC GC 后打印堆数据,用于对比一下 GC 前后的堆内存情况,更直观
-XX:+PrintReferenceGC 打印 Reference 处理信息
-XX:+PrintGCApplicationStoppedTime 打印 STW 暂停时间
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
打印 safepoint 信息
-Xloggc:/path/logs/gc-%t.log GC日志存储的文件路径,%t 表示每次启动时用时间戳命名日志文件,如 gc-2021-03-29_20-41-47.log。
-XX:+UseGCLogFileRotation 开启日志文件分割
-XX:NumberOfGCLogFiles=16 最多分割几个文件,超过之后从头开始写
-XX:GCLogFileSize=100M 每个文件存储的上限大小,超过就触发分割

3、必选项与可选项只是定义了 GC 打印的内容,默认情况下,这些日志会输出到控制台(标准输出),必须配置了日志存储参数后才会进行文件存储。

4、上面参数的结果是:服务启动时,如果发生  GC,则会在 -Xloggc 指定的路径生成 GC 日志文件,名称如:

gc-2021-06-27_09-13-08.log.0
gc-2021-06-27_09-13-08.log.1
gc-2021-06-27_09-13-08.log.2.current

GC 日志参数使用

1、使用非常简单,与平时使用 -Xms、Xmx 完全一样,将上面的 GC 日志参数如下所示转成一行:

1.1、如果是在 IDEA 中,则将其粘贴到 Run/Debug Configurations->Environment->VM options 框中。

1.2、如果是使用 java -jar xxx.jar 方式,则将其放置在 xxx.jar 前面即可,如:java -jar -Xms200m -Xmx200m ...  xxx.jar

-Xms256m -Xmx400m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=16 -XX:GCLogFileSize=100M

2、下面通过一张动图进行演示,为了本地更容易触发 GC,特意调低 -Xms 和 -Xmx 值。

https://gitee.com/wangmx1993/material/blob/master/images/JVM%20GC%20%E6%97%A5%E5%BF%97%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8.gif

GC 日志信息分析

1、记录下GC 日志信息后需要进行分析,纯文本格式的日志又长又多,看起来还是很费劲的,可以借助第三方的工具进行分析。

2、GCViewer 是一个开源的小工具,能可视化 Sun/Oracle、IBM、HP 和 beajava 虚拟机生成的详细 GC 输出。https://github.com/chewiebug/GCViewer

3、使用非常简单,下载 gcviewer-1.36.jar | gcviewer-1.36-dist-mac.zip,然后双击运行,打开存储的 GC 日志文件即可分析。

Sun JVM 内存管理、参数与调优、内存分配与回收策略、GC 日志配置使用详解相关推荐

  1. python的内存管理机制及调优手段(很详细的哦)

    内存管理机制:引用计数.垃圾回收.内存池 引用计数 引用计数是一种非常高效的内存管理手段, 当一个Python对象被引 用时其引用计数增加1, 当其不再被一个变量引用时则计数减1. 当引用计数等于0时 ...

  2. python的内存管理机制及调优手段_Python的内存管理机制及调优手段?

    转载自 http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理机 ...

  3. Linux 的内存管理工具和调优参数

    1. free 2. top 3. vmstat 4. slabtop; 5. pmap 6. dmesg 7. /proc/meminfo 8. /proc/sys/vm 目录下的文件 9. syn ...

  4. python的内存管理机制及调优手段_Python的内存管理机制及调优手段

    内存管理机制:引用计数.垃圾回收.内存池 引用计数: 引用计数是一种非常高效的内存管理手段,当一个Python对象引用时其引用计数加一,当其不再被一个变量引用时则减一.当引用计数等于0时对象被删除. ...

  5. java中对JVM的深度解析、调优工具、垃圾回收

    jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...

  6. 一文详解java中对JVM的深度解析、调优工具、垃圾回收

    2019独角兽企业重金招聘Python工程师标准>>> jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以 ...

  7. 六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)

    一.概述 二.操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢? 1. 内存空间的分配与回收 连续分配:指为用户进程分配的必须是一个连续的内存空间. 1. 单一连续分配 在单一连续 ...

  8. 一文学会JVM常见参数设置+调优经验(JDK1.8)

    内存管理参数 本参数以JDK1.8为基础进行整理,目前默认参数大概有660个左右,使用java -XX:+PrintFlagsFinal -version可以输出所有参数的名称及默认值 名词解释 -X ...

  9. JVM 参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结

    堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为 ...

  10. JVM常用参数以及调优实践

    JVM常用参数选项 jvm 可配置的参数选项可以参考 Oracle 官方网站给出的相关信息:http://www.oracle.com/technetwork/java/javase/tech/vmo ...

最新文章

  1. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
  2. shell输出没有换行符
  3. Linux /proc/pid目录下相应文件的信息说明和含义
  4. Nginx 附录A 编码风格 和 附录B 常用API
  5. 在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt
  6. 核心动画——CAAnimation
  7. 2018 “百度之星”程序设计大赛 - 初赛(A)P1002度度熊学队列(双端队列模拟,STL)
  8. android x5全屏白色,x5webview 自定义全屏界面(示例代码)
  9. js实现导出Excel文档
  10. 百度云盘不限速的方法
  11. 电子计算机X线体层摄影,电子计算机X线体层摄影检查诊断乳腺肿块的价值
  12. CentOS 、Linux 配置国内阿里源、yum源镜像
  13. 网站制作教程:初学者如何制作网站,有哪些步骤?
  14. CHD6.3.1部署文档
  15. Python 类的知识点
  16. Qt设计的一个图片查看器
  17. PDF图书开放免费下载来源
  18. 【周末福利日】资料免费赠送
  19. 散列函数(哈希函数,Hash Function)
  20. 格兰杰因果 / EEG脑电数据分析

热门文章

  1. WorldWind学习系列六:渲染过程解析篇
  2. 拓端tecdat:R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据
  3. (3)评价模型-分析总和
  4. Android入门笔记09
  5. 免校准的电量计量芯片_电能计量芯片应用心得之选型篇
  6. Centos7下基于Pseudo-Distributed的Hadoop环境搭建
  7. Python中的极端梯度增强(XGBoost)集成
  8. 基于face_recognition构建的人脸识别系统以及相关应用
  9. python实现阿拉伯数字和罗马数字的互相转换
  10. Web服务器处理Servlet处理请求过程