`
yajie
  • 浏览: 212231 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

小编辑 Java 6 JVM参数选项大全(中文版)

阅读更多

本文 是基于最新的SUN官方 文档Java SE 6 Hotspot VM Options   编写的译文。主要介绍JVM 中的非稳态选项及其使用说明。

为了让读者明白每个选项的含义,作者在原文基础上补 充了大量的资料 。希望这份文档,对正在研究JVM 参数的朋友有帮助!

 

另外,考虑到本文档是初稿,如有描述错误,敬请指正。

 

非稳态 选项使用说明

-XX:+<option> 启用选项

-XX:-<option> 不启用选项

-XX:<option>=<number> 给选项设置一个数字类型值,可跟单位,例如 32k, 1024m, 2g
-XX:<option>=<string>
给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core

 

行为 选项

选项

默认值与限制

描述

-XX:-AllowUserSignalHandlers

限于LinuxSolaris ,默认不启用

允许为java 进 程安装信号处理器。


Java
信号处理相关知识,详见 http://kenwublog.com/java-asynchronous-notify-based-on-signal

-XX:-DisableExplicitGC

默认不启用

禁止在运行期显式地调用 System.gc()

 

开启该选项后,GC 的 触发时机将由Garbage Collector 全权掌控。
注意:你熟悉的代码里没调用System.gc() ,不代表你依赖的框架工具没 在使用。

例如RMI 就在多 数用户毫不知情的情况下,显示地调用GC 来防止自身OOM

请仔细权衡禁用带来的影响。

-XX:-RelaxAccessControlCheck

默认不启用

Class 校验 器中,放松对访问控制的检查。

 

作用与reflection 里 的setAccessible 类似。

-XX:-UseConcMarkSweepGC

默认不启用

启用CMS 低停顿 垃圾收集器。

 

资料详见:http://kenwublog.com/docs/CMS_GC.pdf

-XX:-UseParallelGC

-server 时启用

其他情况下,默认不启用

策略为新生代使用并行清除,年老代使用单线程Mark-Sweep-Compact 的垃圾收集器。

-XX:-UseParallelOldGC

默认不启用

策略为老年代和新生代都使用并行清除的垃圾收集器。

-XX:-UseSerialGC

-client 时启用

其他情况下,默认不启用

使用串行垃圾收集器。

-XX:+UseSplitVerifier

java5 默认不启用

java6 默认启用

使用新的Class 类 型校验器 


Class 类型校验器有什么特点?
Class 类型校验器,将老的校验步骤拆分成 了两步:
1
,类型推断。
2
,类型校验。

新类型校验器通过在javac 编译时嵌入类型信息到bytecode 中,省略了类型推断这一步,从而提升了classloader 的 性能。

 

Classload顺序 (供参考)
load ->
  verify   -> prepare -> resove -> init


关联选项:
-XX:+FailOverToOldVerifier

-XX:+FailOverToOldVerifier

Java6 新引入选项,默认启用

如果新的Class 校 验器检查失败,则使用老的校验器。

 

为什么会失败?

因为JDK6 最高 向下兼容到JDK1.2 ,而JDK1.2class info JDK6info 存在较大的差异,所以新校验器可能会出现校验失败的情况。


关联选项:
-XX:+UseSplitVerifier

-XX:+HandlePromotionFailure      

java5 以前是默认不启用,java6 默认启用

关闭新生代收集担保。


什么是新生代收集 担保
在一次理想化的minor gc中,Eden和First Survivor中
的活跃对象会被复制到Second Survivor。
然而,Second Survivor 不一定能容纳下所有从EFcopy 过来的活跃对象。

为了确保minor gc 能 够顺利完成,GC 需要在年老代中额外保留一块足以容纳所有活跃对象的内存空间。
这个预留操作,就被称之为新生代收集担保(New Generation Guarantee )。如果预留操作无法完成时,仍会触发major gc(full gc)

为什么要关闭新生代收集 担保?
因为在年老代中预留的空间大小,是无法精确计算的。

为了确保极端情况的发生,GC参考了最坏情况下的新生代内存占 用,即Eden+First Survivor。

这种策略无疑是在浪费年老代内存,从时序角度看,还会提前触发Full GC

为了避免如上情况的发生,JVM 允 许开发者手动关闭新生代收集担保。

 

在开启本选项后,minor gc 将不再提供新生代收集担保,而是在出现survior 或年老代不够用时,抛出promotion failed 异常。

-XX:+UseSpinning

java1.4.21.5 需要手动启用, java6 默 认已启用

启用多线程自旋锁优化。


自旋锁优化原理

大家知道,Java 的 多线程安全是基于Lock 机制实现的,而Lock 的 性能往往不如人意。
原因是,monitorentermonitorexit 这 两个控制多线程同步的bytecode 原语,是JVM 依 赖操作系统互斥(mutex) 来实现的。
互斥是一种会导致线程挂起,并在较短的时间内又必须重新调度回原线程的,较为消耗资源的操作。

为了避免进入OS 互 斥,Java6 的开发者们提出了自旋锁优化。

 

自旋锁优化的原理是在线程进入OS 互 斥前,通过CAS 自旋一定的次数来检测锁的释放。

如果在自旋次数未达到预设值前锁已被释放,则当前线程会立即持有该锁。

 

CAS 检测锁的原理详见: http://kenwublog.com/theory-of-lightweight-locking-upon-cas


关联选项:
-XX:PreBlockSpin=10

-XX:PreBlockSpin=10

-XX:+UseSpinning 必须先启用,对于java6 来说已经默认启用 了,这里默认自旋10

控制多线程自旋锁优化的自旋次数。( 什 么是自旋锁优化?见 -XX:+UseSpinning 处的描述)


关联选项:
-XX:+UseSpinning

-XX:+ScavengeBeforeFullGC      

默认启用

在Full GC前触发一次Minor GC。

-XX:+UseGCOverheadLimit

默认启用

限制GC 的运行时 间。如果GC 耗时过长,就抛OOM

-XX:+ UseTLAB

1.4.2 以前和使用-client 选项时,默认不启用,其余版本默认启用

启用线程本地缓存区(Thread Local )。

-XX:+UseThreadPriorities

默认启用

使用本地线程的优先级。

-XX:+UseAltSigs

限于Solaris , 默认启用

为了防止与其他发送信号的应用程序冲突,允许使用候补信号替代 SIGUSR1SIGUSR2

-XX:+UseBoundThreads

限于Solaris , 默认启用

绑定所有的用户线程到内核线程。
减少线程进入饥饿状态(得不到任何cpu time )的次数。

-XX:+UseLWPSynchronization

限于solaris , 默认启用

使用轻量级进程(内核线程)替换线程同步。

-XX:+MaxFDLimit

限于Solaris , 默认启用

设置java 进程 可用文件描述符为操作系统允许的最大值。

-XX:+UseVMInterruptibleIO

限于solaris,默认启用

solaris 中, 允许运行时中断线程 。



性 能选项

 

选项与默认值

默认值与限制

描述

-XX:+ AggressiveOpts

JDK 5 update 6 后引入,但需要手动启用。

JDK6 默认启用。

启用JVM 开发团 队最新的调优成果。例如编译优化,偏向锁,并行年老代收集等。

-XX:CompileThreshold=10000

1000

通过JIT 编译 器,将方法编译成机器码的触发阀值,可以理解为调用方法的次数,例如调1000 次,将方法编译为机 器码。

-XX: LargePageSizeInBytes =4m

默认4m

amd64 位:2m

设置堆内存的内存页大小。

 

调整内存页的方法和性能提升原理,详见 http://kenwublog.com/tune-large-page-for-jvm-optimization

-XX: MaxHeapFreeRatio =70

70

GC 后,如果发现空闲堆内存占到整个预估上限值的70% ,则收缩预估上限值。

 

什么是预估上限值?

JVM 在启动时,会申请最大值(-Xmx 指定的数值)的地址空间,但其中绝大部分空间 不会被立即分配(virtual)

它们会一直保留着,直到运行过程中,JVM 发现实际占用接近已分配上限值时,才从virtual 里 再分配掉一部分内存。

这里提到的已分配上限值,也可以叫做预估上限值。


引入预估上限值的好处是,可以有效地控制堆的大小。堆越小,GC 效 率越高嘛。

注意:预估上限值的大小一定小于或等于最大值。

-XX:MaxNewSize=size

1.3. 1 Sparc: 32m

1.3.1 x86: 2.5m

新生代占整个堆内存的最大值。

-XX:MaxPermSize=64m

5.0 以后: 64 bit VMs 会增大预设值的30%

1.4 amd64: 96m

1.3.1 -client: 32m

 

其他默认 64m

Perm (俗称方法区)占整个堆内存的最大值。

-XX:MinHeapFreeRatio=40

40

GC 后,如果发现空闲堆内存占到整个预估上限值的40% ,则增大上限值。

( 什么是预估上限值?见 -XX:MaxHeapFreeRatio 处的描述)

 

关联选项:

-XX:MaxHeapFreeRatio=70

-XX:NewRatio=2

Sparc -client: 8

x86 -server: 8

x86 -client: 12

-client: 4 (1.3)

8 (1.3.1+)

x86: 1 2

 

其他默认 2

新生代和年老代的堆内存占用比例。

例如2 表示新生代 占最大堆内存的1/2 。即年老代和新生代平分堆的占用。

-XX:NewSize=2.125m

5.0 以后: 64 bit Vms 会增大预设值的30%

x86: 1m

x86, 5.0 以 后: 640k

 

其他默认 2.125m

新生代预估上限的默认值。( 什 么是预估上限值?见 -XX:MaxHeapFreeRatio 处的描述)

-XX:ReservedCodeCacheSize =32m      

Solaris 64-bit, amd64, -server x86: 48m

1.5.0_06 之 前, Solaris 64-bit a m d64: 1024m

 

其他默认 32m

设置代码缓存的最大值,编译时用。

-XX:SurvivorRatio=8

Solaris amd64: 6

Sparc in 1.3.1: 25

Solaris platforms 5.0 以前: 32

 

其他默认 8

EdenSurvivor 的占用比例。例如8 表 示,一个survivor 区占用 1/8 的新生代内存,另外因为有2survivor

所以survivor 总 共是占用新生代内存的 2/8Eden 的 占比则为 6/8

-XX: TargetSurvivorRatio =50

50

实际使用的survivor 空 间大小占比。默认是50% ,最高90%

-XX:ThreadStackSize=512

Sparc: 512

Solaris x86: 320 (5.0 以前 256)

Sparc 64 bit: 1024

Linux amd64: 1024 ( 5.0 以前 0 )

 

其他默认 512.

线程堆栈大小

-XX:+UseBiasedLocking

JDK 5 update 6 后引入,但需要手动启用。

JDK6 默认启用。

启用偏向锁。

 

偏向锁原理详见 http://kenwublog.com/theory-of-java-biased-locking

-XX:+UseFastAccessorMethods

默认启用

优化原始类型的getter 方 法性能。

-XX:-UseISM

默认启用

启用solarisISM

 

详见Intimate Shared Memory .

-XX:+UseLargePages

JDK 5 update 5 后引入,但需要手动启用。

JDK6 默认启用。

启用大内存分页。

 

调整内存页的方法和性能提升原理,详见http://kenwublog.com/tune-large-page-for-jvm-optimization

 

关联选项

-XX:LargePageSizeInBytes=4m

-XX:+UseMPSS

1.4.1 之前: 不启用

其余版本默认启用

启用solarisMPSS ,不能与ISM 同时使用。

-XX:+StringCache

默认启用

启用字符串缓存。

-XX: AllocatePrefetchLines =1

1

与机器码指令预读相关的一个选项,资料比较少,本文档不做解释。有兴趣的 朋友请自行阅读官方doc

-XX:AllocatePrefetchStyle=1

1

与机器码指令预读相关的一个选项,资料比较少,本文档不做解释。有兴趣的 朋友请自行阅读官方doc



调试选项

 

选项与默认值

默认值与限制

描述

-XX:-CITime

1.4 引入。

默认启用

打印JIT 编译器 编译耗时。

-XX:ErrorFile=./hs_err_pid<pid>.log

Java 6 引入。

如果JVM crashed , 将错误日志输出到指定文件路径。

-XX:-ExtendedDTraceProbes

Java6 引入,限于solaris

默认不启用

启用dtrace 诊断。

-XX:HeapDumpPath=./java_pid<pid>.hprof      

默认是java 进 程启动位置,即user.dir

堆内存快照的存储文件路径。

 

什么是堆内存快照?

java 进程因OOMcrashOS 强制终止后,会生成一个hprofHeap PROFling )格式的堆内存快照文件。该文件用于线下调试,诊断,查找问题。

文件名一般为

java_<pid>_<date>_<time>_heapDump.hprof

解析快照文件,可以使用 jhat, eclipse MATgdb 等工具。

-XX:-HeapDumpOnOutOfMemoryError

1.4.2 update12 5.0 update 7 引入。

默认不启用

OOM 时,输出 一个dump.core 文件,记录当时的堆内存快照(什么是堆内存快照? -XX:HeapDumpPath 处的描 述)。

-XX:OnError="<cmd args>;<cmd args>"

1.4.2 update 9 引入

java 每抛出 一个ERROR 时,运行指定命令行指令集。指令集是与OS 环 境相关的,在linux 下多数是bash 脚 本,windows 下是dos 批处理。

-XX:OnOutOfMemoryError="<cmd args>;
<cmd args>"

1.4.2 update 12java6 时引入

当第一次发生OOM 时, 运行指定命令行指令集。指令集是与OS 环境相关的,在linux 下 多数是bash 脚本,windows 下是dos 批处理。

-XX:-PrintClassHistogram

默认不启用

Windows, ctrl-breakLinux 下是执行kill -3 (发送SIGQUIT 信号)时,打印class 柱状图。

 

Jmap histo pid 也实现了相同的功能。

详见 http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html

-XX:-PrintConcurrentLocks

默认不启用

thread dump 的 同时,打印java.util.concurrent 的 锁状态。

 

Jstack l pid 也同样实现了同样的功能。

详见 http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html

-XX:-PrintCommandLineFlags

5.0 引入,默认不启用

Java 启动时,往stdout 打印当前启用的非稳态jvm options

 

例如:

-XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:+DoEscapeAnalysis

-XX:-PrintCompilation

默认不启用

stdout 打 印方法被JIT 编译时的信息。

 

例如:

1       java.lang.String::charAt (33 bytes)

-XX:-PrintGC

默认不启用

开启GC 日志打 印。

 

打印格式例如:

[Full GC 131115K->7482K(1015808K), 0.1633180 secs]

 

该选项可通过 com.sun.management.HotSpotDiagnosticMXBean API Jconsole 动态启用。

详见 http://java.sun.com/developer/technicalArticles/J2SE/monitoring/#Heap_Dump

-XX:-PrintGCDetails

1.4.0 引入,默认不启用

打印GC 回收的细 节。

 

打印格式例如:

[Full GC (System) [Tenured: 0K->2394K(466048K), 0.0624140 secs] 30822K->2394K(518464K), [Perm : 10443K->10443K(16384K)], 0.0625410 secs] [Times: user=0.05 sys=0.01, real=0.06 secs]

 

该选项可通过 com.sun.management.HotSpotDiagnosticMXBean API Jconsole 动态启用。

详见 http://java.sun.com/developer/technicalArticles/J2SE/monitoring/#Heap_Dump

-XX:-PrintGCTimeStamps

默认不启用

打印GC 停顿耗 时。

 

打印格式例如:

2.744 : [Full GC (System) 2.744: [Tenured: 0K->2441K(466048K), 0.0598400 secs] 31754K->2441K(518464K), [Perm : 10717K->10717K(16384K)], 0.0599570 secs] [Times: user=0.06 sys=0.00, real=0.06

secs]

 

该选项可通过 com.sun.management.HotSpotDiagnosticMXBean API Jconsole 动态启用。

详见 http://java.sun.com/developer/technicalArticles/J2SE/monitoring/#Heap_Dump

-XX:-PrintTenuringDistribution

默认不启用

打印对象的存活期限信息。

 

打印格式例如:

[GC
Desired survivor size 4653056 bytes, new threshold 32 (max 32)
- age 1: 2330640 bytes, 2330640 total
- age 2: 9520 bytes, 2340160 total

204009K->21850K(515200K), 0.1563482 secs]

 

Age1 2 表示在第12GC 后存活的对象大小。

-XX:-TraceClassLoading

默认不启用

打印class 装 载信息到stdout 。记Loaded 状 态。

 

例如:

[Loaded java.lang.Object from /opt/taobao/install/jdk1.6.0_07/jre/lib/rt.jar]

-XX:-TraceClassLoadingPreorder

1.4.2 引入,默认不启用

class 的引 用/ 依赖顺序打印类装载信息到stdout 。 不同于 TraceClassLoading ,本选项只记 Loading 状态。

 

例如:

[Loading java.lang.Object from /home/confsrv/jdk1.6.0_14/jre/lib/rt.jar]

-XX:-TraceClassResolution

1.4.2 引入,默认不启用

打印所有静态类,常量的代码引用位置。用于debug

 

例如:

RESOLVE java.util.HashMap java.util.HashMap$Entry HashMap.java:209

 

说明HashMap 类 的209 行引用了静态类 java.util.HashMap$Entry

-XX:-TraceClassUnloading

默认不启用

打印class 的 卸载信息到stdout 。记Unloaded 状 态。

-XX:- TraceLoaderConstraints

Java6 引入,默认不启用

打印class 的 装载策略变化信息到stdout

 

例如:

[Adding new constraint for name: java/lang/String, loader[0]: sun/misc/Launcher$ExtClassLoader, loader[1]: <bootloader> ]

[Setting class object in existing constraint for name: [Ljava/lang/Object; and loader sun/misc/Launcher$ExtClassLoader ]

[Updating constraint for name org/xml/sax/InputSource, loader <bootloader>, by setting class object ]

[Extending constraint for name java/lang/Object by adding loader[15]: sun/reflect/DelegatingClassLoader  ]

 

装载策略变化是实现classloader 隔 离/ 名称空间一致性的关键技术。

对此感兴趣的朋友,详见 http://kenwublog.com/docs/Dynamic+Class+Loading+in+the+Java+Virtual+Machine.pdf 中的 contraint rules 一章。

-XX:+ PerfSaveDataToFile

默认启用

java 进程因OOMcrashed 被强制终止后,生成一个堆快照 文件(什么是堆内存快照? -XX:HeapDumpPath 处的描述)。

 

作者敬告

完善的单元测试,功能回归测试,和性能基准测试可以减少因调整非稳态JVM 选项带来的风险。

 

参考资料

Java6 性能调优白皮书

http://java.sun.com/performance/reference/whitepapers/6_performance.html

Java6 GC 调优指南

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

全面的options列表

http://blogs.sun.com/watt/resource/jvm-options-list.html

PDF版请点击这里:

http://kenwublog.com/docs/java6-jvm-options-chinese-edition.pdf

10
5
分享到:
评论
5 楼 yajie 2011-11-03  
khotyn 写道
楼主太不厚道了,最后的三个链接全部指向了:http://havs.blogbus.com/

直接复制URL就可以啦
4 楼 khotyn 2011-11-02  
楼主太不厚道了,最后的三个链接全部指向了:http://havs.blogbus.com/
3 楼 Ex咖喱棒 2011-11-02  
好文,正在做JVM调优的工作
谢谢分享
2 楼 lqixv 2011-11-02  
确实不错,感谢分享
1 楼 tjzx 2011-11-02  
LZ分享的都是好东东。

相关推荐

    tomcat6.0 修改启动内存设置 java jvm参数配置

    ### Tomcat 6.0 修改启动内存设置及 Java JVM 参数配置详解 #### 一、背景与目的 在部署和运行 Java Web 应用时,合理地配置应用服务器(如 Apache Tomcat)的内存是非常重要的。这不仅可以提升应用程序的性能,还...

    eclipse与tomcat的JVM设置

    在Eclipse中配置JVM参数主要是为了确保Eclipse自身以及运行于其上的Java应用程序能够顺利运行。可以通过以下步骤进行配置: 1. **打开Eclipse**:首先启动Eclipse IDE。 2. **进入首选项**:依次点击“Window”&gt;...

    java JVM详解

    这些参数可以通过命令行选项传递给 JVM。 ##### 2.5 JVM 简单理解 - **Java 栈**:用于存储线程级别的局部变量和方法调用栈。 - **堆**:共享区域,用于存储所有 Java 对象实例和数组。 - **堆栈分离的好处**:...

    jvm详解(java虚拟机详解)

    JVM参数配置对于优化Java程序的性能至关重要。例如,`-XX:+UseParallelGC`可以启用并行垃圾收集器。 综上所述,深入理解JVM的工作原理及其内存管理机制对于优化Java程序性能至关重要。通过合理配置JVM参数,可以...

    JVM内存设置方法.docx

    也可以在 eclipse 中打开“窗口”-&gt;“首选项”-&gt;“Java”-&gt;“已安装的 JRE”,编辑当前使用的 JRE,在缺省 VM 参数中输入: -Xmx128m -Xms64m -Xmn32m -Xss16m 或者,在“运行”-&gt;“运行”-&gt;“Java 应用程序”中...

    JAVA_API1.6文档(中文)

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    Java 1.6 API 中文 New

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...

    Sh编辑的java运行脚本.zip

    在Java中,我们通常将编译好的`.class`文件打包成`.jar`文件,然后通过Java虚拟机(JVM)运行这个`.jar`文件。运行Java程序的基本命令格式是: ```bash java -jar [jar_file_name.jar] ``` 如果Java程序需要特定的...

    使用Jconsole对java的内存使用情况(JVM)进行监控.pdf

    1. 在Java启动参数中添加以下选项: - `-Dcom.sun.management.jmxremote.port=12345`:指定远程服务器的JMX端口。 - `-Dcom.sun.management.jmxremote.password.file=$JRE_HOME/lib/management/password....

    eclipse修改jvm参数调优方法(2种)

    eclipse修改jvm参数调优方法 Eclipse是一款功能强大且流行的IDE,然而在实际使用中,很多用户都会遇到Eclipse启动慢、卡顿的问题。其实,这些问题的根本原因是JVM的内存分配不合理。本文将介绍两种修改Eclipse JVM...

    可用于NetBeans6.1 6.0修改启动参数的插件

    安装此插件后,用户可以在NetBeans的首选项或设置中找到一个新的选项,专门用于配置JVM参数。这样,他们可以调整如以下常见的JVM参数: 1. -Xms: 指定JVM启动时的初始堆大小,例如"-Xms512m"将初始堆大小设置为512...

    weblogic扩展JVM扩容

    登录WebLogic控制台,选择“服务器”&gt;“服务器实例”,然后选择需要查看的服务器实例,在“常规”选项卡下的“Java和进程”部分可以查看JVM的内存配置信息。 ##### 2. 修改JVM内存配置 编辑`Middleware/user_...

    Eclipse 运行命令行参数大全

    - **Java 虚拟机 (JVM) 参数**:Eclipse 是基于 Java 构建的,因此可以通过 JVM 参数进一步优化 Eclipse 的性能。 #### 三、详细参数解析 ##### 3.1 指定语言环境 (-nl) - **参数**: `-nl` - **描述**: 该参数允许...

    打造极速MyEclipse+由MyEclipse内存不足谈谈JVM内存

    在Java开发环境中,MyEclipse是一款备受开发者喜爱的集成开发环境(IDE),它集成了多种功能,如代码编辑、调试、发布等,大大提升了开发效率。然而,随着项目规模的扩大,MyEclipse可能会遇到内存不足的问题,这将...

    最新Java JDK 8安装版(Windows 32位)

    - JVM参数(如-Xms、-Xmx)可以调整Java虚拟机的内存分配,以优化性能。 6. **安全性和更新** - 由于这个版本源自官网,因此包含了最新的安全补丁和性能优化。 - 建议定期检查Oracle官网更新,确保JDK始终为最新...

    java excel导出tomcat内存溢出处理方法

    综上所述,通过合理配置JVM参数,可以在很大程度上避免Tomcat服务器上的Java应用出现内存溢出的问题。当然,除了调整JVM参数之外,还需要结合具体的业务场景对程序本身进行优化,如减少不必要的内存消耗、合理使用...

    Java反编译工具把.class文件转换为.java文件

    Java作为一种广泛使用的编程语言,其编写的程序通常会被编译成字节码(.class文件),这些文件可以在任何支持Java虚拟机(JVM)的平台上运行。然而,有时候我们需要查看或理解这些.class文件中的具体逻辑,这就需要...

    Eclipse 快捷键大全和启动参数大全.txt

    6. **系统资源监控**: 当遇到性能瓶颈时,合理调整JVM参数,定期清理和优化工作空间,可以有效提升Eclipse的响应速度和稳定性。 综上所述,熟练掌握Eclipse的快捷键和启动参数,不仅能够显著提高编码效率,还能针对...

    java网络编程基础习题+部分答案

    - Java 虚拟机 (JVM) 负责执行编译后的字节码。它提供了与硬件无关的执行环境,使得 Java 程序可以在不同的平台上运行。 **11. 正确的叙述** - **选项分析:** - A)Java 语言的标识符是区分大小写的:正确。 -...

    java英语练习题

    - **解析**: Java语言设计为能够在多种不同的硬件架构上运行,这意味着Java程序可以在任何安装了Java虚拟机(JVM)的平台上运行,无需重新编译。这种特性被称为“一次编写,到处运行”(WORA),体现了Java的架构...

Global site tag (gtag.js) - Google Analytics