jvm常用参数设置 good
1、堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx=512m
2、年轻代大小可以通过 -Xmn 来设置,比如-Xmn=2g 或者 -Xmn512m,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
3、年老代大小 = 堆大小 – 年轻代大小
4、持久代或者永久代大小可以通过 -XX:PermSize 和 -XX:MaxPermSize 来控制
5、-XX:SurvivorRatio 控制 Eden和Survivor的内存占用比例,默认为8;
如果设置了NewRatio,那么整个堆空间的1/(NewRatio +1)就是新生代空间的大小,-XX:NewRatio推荐2到4.
如果同时指定了NewRatio和NewSize,你应该使用更大的那个。于是,当堆空间被创建时,你可以用过下面的表达式计算初始新生代空间的大小:
min(MaxNewSize, max(NewSize, heap/(NewRatio+1))) |
三、JVM内存溢出配置
如何能在JVM遇到OOM错误的时候能够打印heap dump?可以设置-XX:+HeapDumpOnOutOfMemoryError参数,让JVM在探测到内存OOM的时候打印dump。但是在JVM启动参数添加这个参数的时候,JVM启动失败:Unrecognized VM option '+HeapDumpOnOutOfMemeryError' ,问题的原因是因为没有添加-XX:HeapDumpPath参数配置。-XX:HeapDumpPath这个参数可以设置dump文件的存放位置。将JVM启动参数设置成如下格式:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/
问题得到解决。当JVM发生内存溢出的时候,会在C:/下打印出heap dump
常用参数设置
UseParNewGC表示对新生代采用并行gc;
ParallelGCThreads表示并行的线程数为8,一般是cpu的核个数,当核个数大于8时可能不是很适用;
UseConcMarkSweepGC表示对full gc采用CMS gc;
-XX:+DisableExplicitGC 表示禁止显式gc,System.gc()
-XX:+UseCMSCompactAtFullCollection 适用于CMS gc,表示在进行gc的同时清理内存碎片,但会加长gc的总时间
-XX:CMSInitiatingOccupancyFraction=80 适用于CMS gc,表示在年老代达到80%使用率时马上进行回收
在JVM Crash时获heap信息的一些配置参数:
-XX:ErrorFile=./xxx.log JVM Crash时记录heap信息
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./yyy.log JVM OOM时记录heap信息
http://www.cnblogs.com/moonandstar08/p/4924602.html
Trace跟踪参数
-verbose:gc
-XX:+printGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:log/gc.log // 指定GC log的位置,以文件输出
-XX:PrintHeapAtGC // 每一次GC后,都打印堆信息
// 类加载信息
-XX:TraceClassLoading
-XX:+PrintClassHistogram
-Ctrl +Break 打印类信息, 类的使用情况

http://www.cnblogs.com/wind90/p/5457235.html
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader loader = HelloWorld.class.getClassLoader();
System.out.println(loader);
//使用ClassLoader.loadClass()来加载类,不会执行初始化块
loader.loadClass("Test2");
//使用Class.forName()来加载类,默认会执行初始化块
// Class.forName("Test2");
//使用Class.forName()来加载类,并指定ClassLoader,初始化时不执行静态块
// Class.forName("Test2", false, loader);
}
}
static {
System.out.println("静态初始化块执行了!");
}
}
http://lavasoft.blog.51cto.com/62575/184547/
java一般使用两个path:classpath 和 java.library.path
classpath是指向jar包的位置
java.library.path是非java类包的位置如(dll,so)
解决办法:
1:LINUX下的系统变量LD_LIBRARY_PATH来添加java.library.path
2:在vm arguments里添加-Djava.library.path= /usr/local/lib
3:见下图

开发、应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题。
http://www.cnblogs.com/linhaohong/archive/2012/07/12/2588660.html
如果嫌配置-classpath麻烦,可以用-Djava.ext.dir 参数替代,这样就可以批量引入jar包.
但是有个问题需要注意,java默认用的ext目录是$JAVA_HOME/jre/lib/ext,所以如果你指定了-Djava.ext.dir 参数,则原$JAVA_HOME/jre/lib/ext下的jar包将不会被引用,可能会导致你的程序出现问题;
例如有用到SSL协议的地方会出现javax.net.ssl.SSLKeyException: RSA premaster secret error 异常.
最近我在项目中通过jdbc连接sqlserver2008时出现过这样的问题,就是因为用-Djava.ext.dir 参数替代了-classpath.
解决方法是将$JAVA_HOME/jre/lib/ext下的dnsns.jar,localedata.jar,sunjce_provider.jar,sunpkcs11.jar放置到你指定的java.ext.dir目录下.
为了防止出现莫名其妙的错误,最好整个$JAVA_HOME/jre/lib/ext下的jar包都copy过去.
参考:
http://jony-hwong.iteye.com/blog/315324
http://t8500071.iteye.com/blog/790676
jvm常用参数设置 good的更多相关文章
- jvm常用参数设置 专题
在jdk8中 -Xms2g不合法,能通过的:-Xms2G #!/bin/bash JAVA_OPTS="-Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryErr ...
- JVM常用参数设置
堆内存设置 示例: java -Xmx4550m -Xms4550m -Xss128k -XX:NewRatio=5 -XX:SurvivorRatio=5 -Xmx4550m:设置JVM最大可用内存 ...
- HotSpot JVM常用参数设置
转自:https://www.zybuluo.com/jewes/note/57352 选项的分类 Hotspot JVM提供以下三大类选项: 1. 标准选项:这类选项的功能是很稳定的,在后续版本中也 ...
- 【JVM】6、聊聊JVM常用参数设置
整体考虑堆大小 -Xms3550m, 初始化堆大小.通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小. -Xmx3550m,最大堆大小. 考虑分代设置堆大小 首先通过jstat等工具 ...
- 深入理解JVM虚拟机10:JVM常用参数以及调优实践
转自http://www.rowkey.me/blog/2016/11/02/java-profile/?hmsr=toutiao.io&utm_medium=toutiao.io&u ...
- 深入理解java虚拟机笔记补充-JVM常见参数设置
JVM 常见参数设置 内存设置 参数 -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小. -Xmx:最大堆大小,如果初始堆空间不足的时候,最大可以扩展到多少. -Xmn:设置年轻代大小.整个堆 ...
- 了解java虚拟机—JVM相关参数设置(2)
1. JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使 ...
- HotSpot JVM常用参数(选项)设置
本文讨论的选项是针对HotSpot虚拟机的. 1.选项分类及语法 HotspotJVM提供以下三大类选项: 1.1.标准选项 这类选项的功能是很稳定的,在后续版本中也不太会发生变化. 运行java或者 ...
- JVM笔记-GC常用参数设置
GC常用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间, -Xms -Xmx 一般设置成一样大小, -XX:+UseTLAB 使用TLAB,默认打开 -XX:+Print ...
随机推荐
- USACO Hamming Codes DFS 构造
我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(l ...
- 笔记之Cyclone IV 第一卷第一章FPGA 器件系列概述
因为本人用的黑金四代开发板,中央芯片采用ALTERA的cycloneIV E,所以就此器件阅读altera官网资料,并做相应的笔记,以便于以后查阅 Cyclone IV 器件系列具有以下特性:■ 低成 ...
- Windows Phone 8初学者开发—第18部分:在页面间导航
原文 Windows Phone 8初学者开发—第18部分:在页面间导航 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developm ...
- smarty 截取字符串,调用php中的方法,foreach循环
1.smarty截取字符串 html中的代码 <{$content|truncate:30:"..."}> ...
- 自己设计的SSO登录流程图
这个图上不考虑安全加密.由于本身SSO流程图已经比較复杂了.可能还有问题,欢迎大家拍砖. 1.登录流程图: 2.退出流程图: 3.改进方面: 每一个应用登录后.直接将ticket写入session中, ...
- Android的BUG(四) - Android app的卡死问题
做android,免不了要去运行一些跑分程序,常用的跑分程序有quadrant(象限),nbench,安兔兔等.作为系统工程师,对这些跑分 程序都非常的不屑,这个只能是一个不客观的参考,但客户都喜欢拿 ...
- svn: keywords
在文件头里面加入下面的关键字: $Date$ $ID$ $Revision$ $Author$ 代码在svn提交时,先选中这几个关键字再提交. Date可能出现中文乱码: 在Control Panel ...
- MVC 向页面传值方式总结
总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传 ...
- windows下使用openssl的一种方法
下载openssl之后,全部解压到一个路径下,如:c:\program files\openssl sdk 举个例子,如使用SHA1,开发时引用头文件: #include <sha.h> ...
- @(报错)could not find the main class, Program will exit(已解决)
原文 @(报错)could not find the main class, Program will exit(已解决) (很抱歉,如果你希望能更加清楚地看清图片或是图上的文字的话,你可以 ...