`

JVM Internal 一 性能优化

 
阅读更多

 

1:大对象可以直接进入old区,多大的对象?大于eden区的剩余空间的对象直接进入old区域。

  1. -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8  
  2. 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函数的流程

Java虚拟机规范

The Law of Leaky Abstractions

Java InstanceOf 的具体实现

http://www.artima.com/insidejvm/ed2/security2.html

 阅读OpenJdk代码

 

语法分析

 

bison的运算符优先级一例

虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩

Bson手册

javascript学习

DLR

https://kenai.com/hg/maxine~maxine/file/213118b238e8/mxmaxine

 Davik Internal

分享到:
评论

相关推荐

    北航云计算公开课07 JVM Internal

    5. **性能优化**:通过即时编译(JIT)、热点代码优化等技术,提高Java程序的执行效率。 通过学习北航云计算公开课07 JVM Internal,学员们不仅能够掌握JVM的核心概念和技术细节,还能深入了解底层硬件与软件之间的...

    Nashorn与JDK8——动态语言在JVM上的高性能实现.pdf

    而Nashorn则是一个全新设计的实现,它完全使用Java语言编写,意味着它可以充分利用Java平台的资源,包括JVM的各种优化技术,从而实现更高的性能。 Nashorn的设计充分利用了JavaScript标准库和Java标准库之间的相似...

    An internal error occurred during: \"Building workspace\". Java heap space

    源码可能是指开发者正在处理的项目源代码,而工具则提到了Eclipse作为一个常用的开发工具,其性能优化和配置对于高效开发至关重要。 压缩包中的文件“eclipse最优化设置.txt”可能包含了更多关于如何优化Eclipse...

    Java JDK17版 最新源代码文件 src.zip

    总结起来,JDK17的源代码提供了丰富的学习材料,涵盖了从基础的JVM管理、性能优化、调试工具到XML处理的各个层面。开发者可以通过深入研究这些源码,提升自己的Java技能,更好地理解和利用Java平台的能力。

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议 视频教程+笔记+课件+资料

    - **性能优化**:通过调整Nginx配置参数,提高与PHP-FPM的协同工作性能。 ##### 3.2 反向代理与负载均衡 - **反向代理原理**:作为客户端和目标服务器之间的中间层,为客户端提供服务。 - **负载均衡策略**:轮询...

    javainternal

    理解JVM的工作原理有助于优化代码性能,例如通过了解堆内存结构,可以有效避免内存溢出问题。 2. 类加载机制 Java的类加载机制包括加载、验证、准备、解析和初始化五个阶段。这个过程确保了类在运行时的安全性和...

    解决OutOfMemoryError内存溢出

    ### 解决OutOfMemoryError内存溢出 在Java开发过程中,我们经常会遇到`java.lang.OutOfMemoryError`...通过对JVM内存配置的合理调整、代码层面的有效优化,可以大大减少OOM的发生概率,从而提高系统的稳定性和性能。

    BEA_WebLogic平台下J2EE调优攻略

    ##### 3.1 Oracle性能优化 **3.1.1 SQL语句优化** 通过分析SQL执行计划,优化索引结构和SQL语句,可以显著提高查询性能。 **3.1.2 Oracle的其他调整** 例如,调整缓冲区缓存大小、PGA内存大小等参数,可以进一步...

    Myeclipse下java.lang.OutOfMemoryError Java heap space的解决

    ### Myeclipse下java.lang.OutOfMemoryError: Java heap ...需要注意的是,在调整JVM参数时应当根据实际情况合理设置,以免造成资源浪费或者性能下降。同时也要持续关注程序的内存使用情况,及时发现并解决潜在的问题。

    jdk-11.0.10 src.zip

    6. **jdk.internal.vm.compiler.management**:这部分可能涉及到JVM编译器(如JIT)的管理和监控,包括性能优化的实现。 7. **jdk.jdwp.agent**:Java调试协议(JDWP)的代理,用于调试Java应用程序。 8. **jdk.jcmd...

    jdk12的源码src文件

    JMX代理允许远程或本地工具连接到Java虚拟机(JVM),收集性能数据,甚至调整运行时配置。 2. **java.prefs**: Java首选项系统提供了在用户和系统级别存储偏好和配置设置的API。这部分源码展示了如何实现持久化的...

    eclipse启动时间源码

    深入理解Eclipse的启动时间源码,有助于我们优化其性能,提升开发效率。本文将探讨Eclipse启动过程中的关键源码,并介绍Java虚拟机(JVM)调优的相关知识。 首先,Eclipse的启动流程主要由`org.eclipse.ui.internal...

    jdk10的源码src文件

    源码分析有助于理解JVM的优化策略和性能调优的细节。 `java.rmi`模块提供了远程方法调用(Remote Method Invocation,RMI)的支持,使得Java对象可以在不同的网络进程中互相调用。源码中,我们可以看到RMI的实现...

    jdk13的源码src文件

    3. **编译器与性能优化**: - `jdk.internal.vm.compiler`:这部分源码涉及到HotSpot虚拟机的JIT(Just-In-Time)编译器,负责将字节码转化为机器码,提升运行效率。 4. **安全与加密**: - `jdk.crypto.cryptoki...

    jdk11.src.zip

    JDK11是Java开发工具包的一个重要版本,它包含了丰富的功能和性能优化。"jdk11.src.zip"这个压缩包提供了JDK11的源代码,这对于开发者来说是一份极其宝贵的资源,能够帮助我们深入了解Java语言和JVM的工作原理,提升...

    Java jdk下的src.zip(Windows版)

    3. **jdk.internal.le**:这部分涉及到了 Java 内部的链接扩展 (Linking Extension),它包含了与运行时类加载和链接相关的内部实现,通常不建议直接使用,但了解其工作原理对优化性能有帮助。 4. **jdk.unsupported...

    oepnjdk8u源码

    对这部分源码的研究,有助于开发者掌握Java运行时环境的细节,提升性能优化的能力。 4. **java**: 此目录下的源码主要是Java基础类库,包括基本类型包装类、反射API、日期时间API等。通过研究这些源码,开发者可以...

    openjdk-17 GA(openjdk-17_linux-aarch64_bin.tar.gz)

    Oracle JDK则是Oracle公司提供的官方版本,它在OpenJDK的基础上增加了一些专有特性、性能优化和长期支持。虽然两者在功能上大部分重叠,但Oracle JDK通常提供更稳定的性能和更长久的技术支持。 **2. Java 17的关键...

    weblogic常见故障总结.docx

    解决方案:调整JVM的垃圾收集策略,或者优化代码减少内存分配,避免长时间运行的线程。可能需要增加`-XX:MaxGCPauseMillis`参数来控制最大GC停顿时间。 1.4 故障编号:BEA-000337 日志报错:服务器无法启动,错误...

    jdk11压缩包,解压后配置环境就可以用

    - 性能优化:包括垃圾回收、内存管理和编译器的改进。 - 安全强化:更新和增强安全协议,修复漏洞。 - 核心库扩展:添加了新的API和类,例如对HTTP/2的支持。 配置完成后,你可以通过`java -version`命令检查...

Global site tag (gtag.js) - Google Analytics