- 浏览: 1494569 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (460)
- java (148)
- javascript (34)
- Flex文章 (4)
- css+div (2)
- ajax (6)
- extjs (11)
- 人生感悟 (9)
- struts2.0 (6)
- IT之路,生活 (15)
- hibernate (6)
- struts1 (1)
- spring (5)
- j2ee错误 (3)
- Dwr (5)
- Linux (33)
- C++ (3)
- SWT Win32 (2)
- EJB (1)
- JPA (4)
- C语言和LinuxC (7)
- SQL (13)
- 项目经理 (6)
- db2 (2)
- java数据结构 (2)
- 网页播放器flv (1)
- 数据库 (24)
- 用户体验设计学习 (2)
- 网络电话 (5)
- 军事理论 (4)
- android (3)
- oracle (18)
- oracle ebs form (11)
- oracle ebs oaf (4)
- erp (20)
- DBA (9)
- java中URL 的编码和解码函数 (1)
- 铁血丹心 (1)
- excel 单元格格式不能立即生效 (1)
- Java调用bat文件 (1)
- 如何把本地outlook中的邮件上传到网络邮箱中 (1)
- java 报表 打印 (1)
- 创建dblink (1)
- 图标前台框架 (1)
- vnc (1)
- FORM (1)
- MYSQL (1)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
web打印不显示页眉页脚 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
Javascript网页打印大全 -
hardyer:
大哥写的很实在,受教了,提前祝你元旦快乐!
黎活明给程序员的忠告 -
cxysilahi:
请问WIN7 64位,调用报错Exception in thr ...
JNative的初步使用 -
action1949:
好东西,解决问题
JFreeChart乱码解决方法
基本概念:
PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域
Heap space:存放Instance。
GC(Garbage Collection)应该不会对PermGen space进行清理
所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误
Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。
JVM的Heap分配可以使用-X参数设定,
-Xms |
初始Heap大小 |
-Xmx |
java heap最大值 |
-Xmn |
young generation的heap大小 |
JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?有如下原因:
l 程序内调用了System.gc()或Runtime.gc()。
l 一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
l Java的Heap太小,一般默认的Heap值都很小。
l 频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。
经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
Stack的设定
每个线程都有他自己的Stack。
-Xss |
每个线程的Stack大小 |
Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。
4种GC
1、第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
4种GC的具体描述参见[3]。
单文件的jvm内存进行设置
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
tomcat启动jvm内存设置
Linux:
-Xmx:最大值
-Xmn:最小值
Windows
在catalina.bat最前面加入
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
重起tomcat服务,设置生效
weblogic启动jvm内存设置
在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。
JBoss
默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"
eclipse
在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大
Websphere
进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机
(暂略)
发表评论
-
Oracle Developer10G 安装
2020-09-09 18:03 395oracle 客户端也要删除,以前的oracle产品 ... -
打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion
2018-06-05 15:06 9829打开Eclipse时出现"The Eclipse ... -
J2EE通过tomcat部署的两种方式
2017-09-12 09:01 713转载:http://blog.csdn.net/psp000 ... -
Linux安装Tomcat7
2016-03-30 15:01 911http://blog.sina.com.cn/s/blog ... -
java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)(转)
2015-11-17 22:10 1665http://blog.csdn.net/flyingclo ... -
栋哥涕啐茆
2015-10-27 10:49 796栋哥涕啐茆 -
Eclipse快捷键 10个最有用的快捷键
2015-10-27 10:18 827Eclipse中10个最有用的快捷键组合 一个Eclip ... -
java上传头像图像剪切
2015-04-02 20:19 1216java上传头像图像剪切 JQUERY 图片上传裁切 -
创建dblink
2014-12-11 20:01 720CREATE public database link ... -
Bitnami Redmine 安装笔记
2014-12-10 11:28 1687http://atian25.iteye.com/blog/ ... -
利用workflow发送类似数据报表内容的通知页面
2014-11-21 15:03 852利用workflow发送类似数据报表内容的通知页面 ... -
excel科学技术法问题
2014-11-12 13:50 8761.使用导入外部数据的方法2.并且在第三步的时候选择文本,需要 ... -
java.lang.IllegalAccessError
2014-09-29 11:05 1218java.lang.IllegalAccessError: ... -
java如何获取文件编码格式
2014-04-11 11:28 102791:简单判断是UTF-8或不是UTF-8,因为一般除了UTF ... -
JAVA中使用FTPClient上传下载
2013-12-08 13:35 1958方法一:这种方法网上有许多 可以用下面的方式,但是支持批量 ... -
在Java中获取环境变量
2013-11-11 11:18 1479package cy.cn.test; import ... -
ORACLE性能调整笔记
2013-11-05 18:39 0一 关于statspack中等待事件的一些解释 ... -
EBS DBA指南笔记1
2013-11-05 18:35 1944时光飞逝,不从事EBS DBA转眼已有两年多。很还念那段学习 ... -
用html代码在word中插入分页符和页面设置
2013-11-05 17:11 5385<span lang=EN-US style=&quo ... -
OpenJWeb新增二维码图片生成功能
2013-11-05 09:02 1319在开发进销存软件的时 ...
相关推荐
在Java及J2EE大型应用的场景下,Java虚拟机(JVM)非标准参数的合理配置对于提升系统的整体性能至关重要。这些参数不仅影响着应用的运行效率,还直接关联到系统的稳定性。本文将详细介绍JVM非标准参数的相关知识,并...
2. **JVM堆内存大小**:合理设置初始堆内存大小`-Xms`和最大堆内存大小`-Xmx`。 3. **年轻代和老年代配置**:年轻代空间`-XX:NewRatio`、`-XX:NewSize`、`-XX:MaxNewSize`;幸存者空间`-XX:SurvivorRatio`;永久代...
特别是在Java、J2EE等大型应用中,通过合理设置JVM参数可以极大提升系统的整体性能与稳定性。 #### JVM 非标准参数的重要性 JVM非标准参数主要指那些用于优化JVM内部行为的配置项,这些参数通常在开发阶段被忽略或...
3. **J2SE, J2EE, J2ME**:2000年代初,Sun Microsystems将JVM分为三个平台版本:J2SE(标准版),J2EE(企业版)和J2ME(微型版),分别针对桌面应用、企业级应用和移动设备。 4. **HotSpot JVM**:2000年,Sun ...
JVM内存管理是虚拟机的事情,和开发人员有什么关系。这种想法一直在我们开发人员的潜意识中存在:“内存管理,与我无关,只要规范地写好Java代码就好喽,虚拟机那是Oracle或者IBM的事。”。我们暂时先放下这个想法啊...
Java类装载器是Java虚拟机(JVM)的一部分,负责加载类文件到JVM内存中。由于Java程序由多个类组成,这些类不是一次性全部加载,而是按需加载。当JVM需要使用某个类时,它会向相应的类装载器发出请求。类装载器负责...
这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就...曾经的我经常害怕处理内存溢出的问题,因为不知道他为什么会出现这个问题,当我在看了这本书以后明白了垃圾回收算法,以及JVM是如何帮助我们处理GC的
### WebSphere应用服务器Java虚拟机性能调优与诊断 #### 概述 在现代软件开发领域,特别是企业级应用环境中,IBM WebSphere Application Server (WAS) 的使用极为广泛。作为一款高性能、高可靠性的应用服务器,WAS ...
- 典型的调优参数包括-Xmx、-Xms(设置堆内存大小)、-XX:+UseConcMarkSweepGC(启用并发标记-清扫垃圾回收器)等。 3. **调试工具** - 使用如VisualVM、JConsole等工具可以监控和分析Java应用程序的运行状况。 ...
4. **版本兼容性**:不同的J2ME设备可能支持不同的Java虚拟机(JVM)版本,因此需考虑跨平台兼容性。 5. **用户界面**:J2ME的UI设计需要适应小屏幕和有限的输入方式,提供良好的用户体验。 **具体实例** "Using ...
Java虚拟机(JVM)是Java开发的核心组成部分,它为Java应用程序提供运行环境。这份2020年的JVM生态系统报告深入探讨了JVM使用者在生产环境中的实践、选择和挑战。以下是一些关键知识点: 1. **Java供应商选择**:...
JVM内存分为多个区域:方法区(Method Area)、堆区(Heap Area)、虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。方法区存储类信息、常量、静态变量等,...
1. **调整堆内存大小**:合理设置初始堆大小(`-Xms`)和最大堆大小(`-Xmx`),以满足应用程序的需求。 2. **选择合适的垃圾回收器**:根据应用程序的特点选择最合适的垃圾回收器,如CMS、G1等。 3. **启用压缩指针...
Eclipse默认的内存设置可能不够用,尤其是在进行J2EE项目开发时,由于需要加载大量的库和框架,对内存的需求会显著增加。即使增加了物理内存,如果Eclipse的内存参数没有调整,问题仍然可能出现。 Eclipse的内存...
1. **内存溢出**(Out Of Memory Error, OOM):学习JVM可以帮助开发者更好地理解和解决内存溢出问题,比如通过调整堆内存大小或优化代码来减少内存占用。 2. **性能瓶颈**:通过深入学习JVM的工作原理,开发者可以...
通过管理控制台,可以进入"服务器" -> "应用程序服务器" -> "进程定义" -> "Java 虚拟机"来调整初始堆大小和最大堆大小。这两个参数分别设置为相同值,可以避免因内存分配不均导致的性能问题。通常,这需要根据应用...
JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而无需重新编译。 ##### 特点: 1. **跨平台性**...
1. **JVM内存配置**:理解不同JVM内存区域如堆内存(Heap)、方法区(Metaspace)、栈内存(Stack)等的作用,合理设置-Xms、-Xmx、-XX:MaxMetaspaceSize等参数,避免内存溢出和碎片化。 2. **垃圾回收(GC)调优**...
- Java虚拟机(JVM):负责解释字节码,是Java跨平台特性的关键部分。 - Java类库:一组标准API集合,使开发者能够构建丰富多样的应用程序。 2. Java开发环境的组成: - JDK(Java Development Kit):包括JRE和...