1:大对象可以直接进入old区,多大的对象?大于eden区的剩余空间的对象直接进入old区域。
- -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8
- eden区8M,from和to各1M,old区10M,总共20M的空间
用参数-XX:PretenureSizeThreshold=3145728 控制。
注意:PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效,Parallel Scavenge收集器不认识这个参数,Parallel Scavenge收集器一般并不需要设置。如果遇到必须使用此参数的场合,可以考虑ParNew加CMS的收集器组合。
2:性能优化需要注意的地方:
Finalizers: don;t do it!需要2个gc cicle,gc循环会变慢?在对象销毁的时候,最好用方法
释放资源,如果不可以,用soft reference,最好也别用?否则会导致更多更长时间的垃圾收集暂停。
class ClassWithFinalizer{ protected void finalize(){} } class MyClass extends ClassWithFinalizer { private byte[] buffer = new byte[2014*1024*5]; }
最好写成
Class MyClass { private ClassWithFinalizer classWithFinalizer; private byte[] buffer = new byte[1024*1024*5] }
在此处有好几个性能优化的案例都是由于 Finalizer 方法使用不当导致的很严重的性能问题。
内部类的使用问题,inner class have a implicit reference to the outer class
增长了对象的生命周期,延迟了垃圾回收的时间??
二:Jvm的内存使用
jvm采用分代内存管理,分为
Young Generation --gc比较频繁,采用Copy算法
+Eden
+From Survivor
+To Survivor
Old Generation --gc较少,采用标记 收集 压缩的算法
Permanent Generation,存放方法和常量,如果常量迟无限增大,也会触发垃圾回收,(Full GC)。
由于堆内存是被所有进程共享的,新分配的对象要加锁,如果分配的对象比较小,就先分配到线程自己的缓冲中分配(?待确认),如果在Young Genration中分配的话就分配在eden区,如果Eden区域没有空间了,就gc一次,将存活的对象copy到 From和To中的一个,如果还是空间不足,就再gc一次,将From区域存活的对象copy到 To区域,将其中存活过一定时间的对象copy到Old区,将Eden区域的对象copy到To区域,如此循环,From和To总有一个是空的。
如果Old区域也满了,就会出发Full Gc了。
32bit的cPU 有4g内存给java程序,其中有一个部分被OS和C runtime占用,剩下的部分是userspace
三:内存区域控制常用的参数
-Xmx -- Heap区域的最大值,默认为1G
-Xms --heap区域初始化的时候的大小,默认为系统的1/64,不超过1G。如果当前的空余堆内存比例小于40%(见-XX:MinHeapFreeRatio)系统会将堆内存扩大到最大值。通常-Xmx和-Xms设置为一样的值,免得内存来回变动损耗性能
-XX:PermSize --设置方法区的初始化值,默认为系统的1/64
-XX:MinHeapFreeRatio——设置Heap区域最小空闲值,用于控制何时将堆内存扩大至最大值,通常是40%
-XX:MaxHeapFreeRatio——设置Heap区域最大空闲值,用于控制何时将对内存缩小至初始值,通常是70%
-XX:NewRatio——设置Heap区域中new和old代大小的比例,值就是年轻代内存大小/年老代内存大小。
-XX:SurvivorRatio——设置Survivor区域和Eden区域的比例,值就是Eden区域大小/Survivor区域大小。
引用:
HotSpot VM里Java程序通过JNI调用C函数的流程
The Law of Leaky Abstractions
http://www.artima.com/insidejvm/ed2/security2.html
语法分析
bison的运算符优先级一例
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩
https://kenai.com/hg/maxine~maxine/file/213118b238e8/mxmaxine
相关推荐
5. **性能优化**:通过即时编译(JIT)、热点代码优化等技术,提高Java程序的执行效率。 通过学习北航云计算公开课07 JVM Internal,学员们不仅能够掌握JVM的核心概念和技术细节,还能深入了解底层硬件与软件之间的...
而Nashorn则是一个全新设计的实现,它完全使用Java语言编写,意味着它可以充分利用Java平台的资源,包括JVM的各种优化技术,从而实现更高的性能。 Nashorn的设计充分利用了JavaScript标准库和Java标准库之间的相似...
源码可能是指开发者正在处理的项目源代码,而工具则提到了Eclipse作为一个常用的开发工具,其性能优化和配置对于高效开发至关重要。 压缩包中的文件“eclipse最优化设置.txt”可能包含了更多关于如何优化Eclipse...
总结起来,JDK17的源代码提供了丰富的学习材料,涵盖了从基础的JVM管理、性能优化、调试工具到XML处理的各个层面。开发者可以通过深入研究这些源码,提升自己的Java技能,更好地理解和利用Java平台的能力。
- **性能优化**:通过调整Nginx配置参数,提高与PHP-FPM的协同工作性能。 ##### 3.2 反向代理与负载均衡 - **反向代理原理**:作为客户端和目标服务器之间的中间层,为客户端提供服务。 - **负载均衡策略**:轮询...
理解JVM的工作原理有助于优化代码性能,例如通过了解堆内存结构,可以有效避免内存溢出问题。 2. 类加载机制 Java的类加载机制包括加载、验证、准备、解析和初始化五个阶段。这个过程确保了类在运行时的安全性和...
### 解决OutOfMemoryError内存溢出 在Java开发过程中,我们经常会遇到`java.lang.OutOfMemoryError`...通过对JVM内存配置的合理调整、代码层面的有效优化,可以大大减少OOM的发生概率,从而提高系统的稳定性和性能。
##### 3.1 Oracle性能优化 **3.1.1 SQL语句优化** 通过分析SQL执行计划,优化索引结构和SQL语句,可以显著提高查询性能。 **3.1.2 Oracle的其他调整** 例如,调整缓冲区缓存大小、PGA内存大小等参数,可以进一步...
### Myeclipse下java.lang.OutOfMemoryError: Java heap ...需要注意的是,在调整JVM参数时应当根据实际情况合理设置,以免造成资源浪费或者性能下降。同时也要持续关注程序的内存使用情况,及时发现并解决潜在的问题。
6. **jdk.internal.vm.compiler.management**:这部分可能涉及到JVM编译器(如JIT)的管理和监控,包括性能优化的实现。 7. **jdk.jdwp.agent**:Java调试协议(JDWP)的代理,用于调试Java应用程序。 8. **jdk.jcmd...
JMX代理允许远程或本地工具连接到Java虚拟机(JVM),收集性能数据,甚至调整运行时配置。 2. **java.prefs**: Java首选项系统提供了在用户和系统级别存储偏好和配置设置的API。这部分源码展示了如何实现持久化的...
深入理解Eclipse的启动时间源码,有助于我们优化其性能,提升开发效率。本文将探讨Eclipse启动过程中的关键源码,并介绍Java虚拟机(JVM)调优的相关知识。 首先,Eclipse的启动流程主要由`org.eclipse.ui.internal...
源码分析有助于理解JVM的优化策略和性能调优的细节。 `java.rmi`模块提供了远程方法调用(Remote Method Invocation,RMI)的支持,使得Java对象可以在不同的网络进程中互相调用。源码中,我们可以看到RMI的实现...
3. **编译器与性能优化**: - `jdk.internal.vm.compiler`:这部分源码涉及到HotSpot虚拟机的JIT(Just-In-Time)编译器,负责将字节码转化为机器码,提升运行效率。 4. **安全与加密**: - `jdk.crypto.cryptoki...
JDK11是Java开发工具包的一个重要版本,它包含了丰富的功能和性能优化。"jdk11.src.zip"这个压缩包提供了JDK11的源代码,这对于开发者来说是一份极其宝贵的资源,能够帮助我们深入了解Java语言和JVM的工作原理,提升...
3. **jdk.internal.le**:这部分涉及到了 Java 内部的链接扩展 (Linking Extension),它包含了与运行时类加载和链接相关的内部实现,通常不建议直接使用,但了解其工作原理对优化性能有帮助。 4. **jdk.unsupported...
对这部分源码的研究,有助于开发者掌握Java运行时环境的细节,提升性能优化的能力。 4. **java**: 此目录下的源码主要是Java基础类库,包括基本类型包装类、反射API、日期时间API等。通过研究这些源码,开发者可以...
Oracle JDK则是Oracle公司提供的官方版本,它在OpenJDK的基础上增加了一些专有特性、性能优化和长期支持。虽然两者在功能上大部分重叠,但Oracle JDK通常提供更稳定的性能和更长久的技术支持。 **2. Java 17的关键...
解决方案:调整JVM的垃圾收集策略,或者优化代码减少内存分配,避免长时间运行的线程。可能需要增加`-XX:MaxGCPauseMillis`参数来控制最大GC停顿时间。 1.4 故障编号:BEA-000337 日志报错:服务器无法启动,错误...
- 性能优化:包括垃圾回收、内存管理和编译器的改进。 - 安全强化:更新和增强安全协议,修复漏洞。 - 核心库扩展:添加了新的API和类,例如对HTTP/2的支持。 配置完成后,你可以通过`java -version`命令检查...