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

java invokedynamic和GC

    博客分类:
  • java
 
阅读更多

invokedynamic:java是静态类型语言,每一个函数调用一定是确定的映射到某个方法区,之后用解释器来执行;invokedynamic允许程序员指定,某个函数调用具体映射到哪个方法区(Callsite),可以实现根据数据类型的不同调用不同的指令(无类型的语言)。相应的Class文件的常量区里也设定了对应的字段。

jit:即时编译,有一个编译的过程,本身花费时间,同时表以后的体积膨胀很厉害,所以不是jit一定优于AOT

gc:针对堆和方法区

一、算法

1、标记-清除:大量碎片,效率低

2、复制:内存使用率低(只有50%)

3、标记-压缩:清除的同时,进行压缩

4、分代收集:FullGC太慢,可以分代。young代才需要频繁的GC。

年轻代存活时间短,进行复制清理;老年代执行标记-压缩。

 

二、具体实现:

1、串行收集器 -XX:+UseSerialGC 新生代复制算法、老年代标记-压缩

2、并行进行:新生代并行复制算法、老年代串行标记-压缩

-XX:+UseParNewGC  ParNew收集器

-XX:ParallelGCThreads 限制线程数量

3、并行

-XX:+UseParallelGC 自适应调节策略

-XX:+UseParallelOldGC 使用Parallel收集器+ 老年代并行

 

5、CMS(Concurrent Mark Sweep)最短停顿,缺点是内存碎片。

1》基本概念

堆内存是分区的,这样可以避免FullGC。

heap = young + old

young = Eden + 2个Survivor(分别叫from to)

PermGen(永久代):针对hotspot,存储class信息,jsp比较多时容易出现,string太多时,容易出现。

元空间: 替代permGen,使用native 内存

-XX:MetaspaceSize

-XX:MaxMetaspaceSize

 

Minor GC(stop the world):从Eden复制活的到to,from中还活的复制到to或老年代。to全满了,整个进入old。to和from交换。这时Eden和to都是清空的。

Full GC:清理整个堆空间—包括年轻代和老年代。

 

Full GC触发条件:

老年代达到一定比例或永久区满了,主动触发 System.gc;

 

2》过程:

初始标记(STW initial mark) root直接相关

并发标记(Concurrent marking) 向下扫描

并发预清理(Concurrent precleaning) 扫描新进入老年代的对象

重新标记(STW remark)

并发清理(Concurrent sweeping)

并发重置(Concurrent reset)

 

3》配置

-XX:+UseConcMarkSweepGC  使用CMS收集器

-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长

-XX:+CMSFullGCsBeforeCompaction  设置进行几次Full GC后,进行一次碎片整理

-XX:ParallelCMSThreads  设定CMS的线程数量(一般情况约等于可用CPU数量)

 

 

6、G1 garbage first 第一时间处理垃圾最多的区块。

1> 对CMS优化

整个堆不分固定的代,而是分为多个region,每个region可以动态的改变代;可指定停顿时间;并发回收时会压缩碎片

2》配置

-XX:+UseG1GC使用(G1,Garbage First)

-XX:MaxGCPauseMillis=n设置垃圾收集暂停时间最大值指标。这是一个软目标,Java虚拟机将尽最大努力实现它

-XX:InitiatingHeapOccupancyPercent=n触发并发垃圾收集周期的整个堆空间的占用比例。它被垃圾收集使用,用来触发并发垃圾收集周期,基于整个堆的占用情况,不只是一个代上(比如:G1)。0值 表示’do constant GC cycles’。默认是45

-XX:NewRatio=n年轻代与年老代的大小比例,默认值是2

-XX:SurvivorRatio=neden与survivor空间的大小比例,默认值8

-XX:MaxTenuringThreshold=n最大晋升阈值,默认值15

-XX:ParallerGCThreads=n设置垃圾收集器并行阶段的线程数量。默认值根据Java虚拟机运行的平台有所变化

-XX:ConcGCThreads=n并发垃圾收集器使用的线程数量,默认值根据Java虚拟机运行的平台有所变化

-XX:G1ReservePercent=n为了降低晋升失败机率设置一个假的堆的储备空间的上限大小,默认值是10

-XX:G1HeapRegionSize=n使用G1收集器,Java堆被细分成一致大小的区域。这设置个体的细分的大小。这个参数的默认值由工学意义上的基于堆的大小决定

分享到:
评论

相关推荐

    Java虚拟机规范(Java SE 7).pdf

    1. **动态类型语言支持**:Java 7引入了 invokedynamic 指令,这使得JVM能够更好地支持动态语言,如Groovy和JRuby。invokedynamic 提供了一种灵活的调用机制,可以动态解析和执行方法,提高了脚本语言的性能。 2. *...

    Java安装环境所需的JDK1.7

    Java开发工具包(Java Development Kit,简称JDK)是学习和开发Java程序的必备组件,尤其对于初学者和专业开发者而言,它是理解Java技术的基础。JDK1.7,也称为Java SE 7(Java Standard Edition 7),是Java历史上...

    java7运行库

    5. **动态语言支持**:Java 7添加了JSR 292(invokedynamic指令),为支持动态语言如Groovy、JRuby等提供了基础,提升了这些语言在Java平台上的性能。 6. **字符串inswitch**:Java 7扩展了switch语句,使其可以...

    最新 java se8 虚拟机 详解

    9. ** invokedynamic指令**:Java 8进一步利用了invokedynamic字节码指令,它是Java 7引入的,主要用于支持Lambda表达式的实现。这个指令使得JVM能够更高效地处理动态方法调用。 10. **并行GC优化**:包括CMS...

    Java环境变量-jdk1.7

    8. **动态类型语言支持**:引入了invokedynamic指令,为脚本语言和动态类型语言的Java集成提供了便利。 **JDK 1.7的安装与验证** 下载并安装`jdk-7u80-windows-x64.exe`文件后,按照向导完成安装。安装完成后,...

    Java SE 7 Documentation

    4. **动态语言支持**:Java 7添加了 invokedynamic 指令,支持动态语言如Groovy、Ruby等在Java虚拟机(JVM)上的运行。 5. **钻石操作符**:在创建带匿名构造器的类实例时,编译器可以自动推断出类型参数,如`Map, ...

    Java 6.0中文参考手册(最新版).chm

    Java 6.0还引入了改进的垃圾收集算法,如Parallel GC和CMS(Concurrent Mark Sweep),提升了应用程序的响应时间和整体性能。JIT(Just-In-Time)编译器也得到了优化,能够更智能地识别并编译频繁执行的热点代码,...

    The Java® Virtual Machine Specification Java SE 7 Edition.rar

    Java SE 7的JVM支持多种GC算法,如串行GC、并行GC、并发标记扫描GC和G1 GC等,它们各有优缺点,适用于不同场景。 5. 类文件结构:详细描述了.class文件的内部结构,包括魔数、版本号、常量池、类信息、字段信息、...

    深入理解Java虚拟机JVM高级特性与最佳实践1

    JDK 1.7的发布带来了许多新特性和改进,本书第2版随之更新,加入了对G1收集器和InvokeDynamic的支持等内容。此外,鉴于OpenJDK的开源性质,作者在新版中加强了对OpenJDK源码分析的讲解,使读者能直接从源码层面理解...

    JDK SE8 Java语言规范与虚拟机规范 官方文档

    4. **新的日期/时间API**:`java.time`包提供了更强大、更易于使用的日期和时间API,取代了原有的`java.util.Date`和`java.util.Calendar`。 5. **Stream API**:提供了对集合数据进行声明性处理的能力,使得过滤、...

    深入java虚拟机

    10. **最新特性**:第二版可能涵盖Java的新特性,如Java 7的 invokedynamic 指令、Java 8的Lambda表达式和Stream API,以及Java 11以上的特性,它们如何在JVM上实现和优化。 通过阅读本书,开发者不仅可以掌握JVM的...

    Java虚拟机规范(Java SE 7版).

    2. 垃圾回收:Java SE 7的垃圾回收器进行了优化,包括并行和并发GC策略,以提高应用响应速度和降低暂停时间。G1垃圾收集器作为全功能的垃圾回收器被引入,它能够有效地管理大型堆内存,并减少垃圾回收的停顿时间。 ...

    jdk1.7-64位,官网原版,java开发利器

    1. **多线程并行GC(Garbage Collector)优化**:Java 7提供了新的垃圾回收器,如G1(Garbage-First)收集器,它能更好地管理大型堆内存,降低停顿时间,提高应用性能。 2. **动态类型语言支持**:引入了`...

    JDK11 11.0.12版本下载

    3. **动态类型语言支持**:JDK11增强了对动态类型语言的支持,例如Groovy和Ruby,通过添加了`invokedynamic`字节码指令的改进。 4. **文本块(Text Blocks)**:这是一种新的字符串语法,用于表示多行文本,减少...

    JAVAjdk1.7

    JDK 1.7引入了 invokedynamic 字节码指令,这是对Java虚拟机(JVM)的重大改进。这项特性为动态类型语言提供了更好的支持,使得Java平台能够更有效地运行如Groovy、JRuby等脚本语言。 2. **Try-with-resources**:...

    windows-java-jdk7

    2. **动态类型语言支持**:JDK7通过加入`invokedynamic`指令,为脚本语言和动态类型语言提供了更好的支持。 3. **字符串在堆上直接存储**:之前的版本中,字符串常量池在方法区,JDK7将其移至堆内存,减少了内存...

    java-11-openjdk-11.0.9-3.windows.redhat.x86_64.rar

    5. **动态类文件常量**:Java 11允许在运行时创建`CONSTANT_InvokeDynamic`常量,这有助于动态语言的实现。 6. **ZGC:Zero Garbage Collector**:这是一个实验性的低延迟垃圾收集器,旨在提供极低的暂停时间,适合...

    jdk1.7 java 7 windows 64

    8. **动态语言支持:** Java 7引入了JSR 292,即 invokedynamic 指令,为运行时绑定和动态语言提供了更好的支持。 9. **并发工具改进:** `Fork/Join`框架和`Parallel Streams`的引入,使并行编程变得更加简单,...

Global site tag (gtag.js) - Google Analytics