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堆被细分成一致大小的区域。这设置个体的细分的大小。这个参数的默认值由工学意义上的基于堆的大小决定
相关推荐
1. **动态类型语言支持**:Java 7引入了 invokedynamic 指令,这使得JVM能够更好地支持动态语言,如Groovy和JRuby。invokedynamic 提供了一种灵活的调用机制,可以动态解析和执行方法,提高了脚本语言的性能。 2. *...
Java开发工具包(Java Development Kit,简称JDK)是学习和开发Java程序的必备组件,尤其对于初学者和专业开发者而言,它是理解Java技术的基础。JDK1.7,也称为Java SE 7(Java Standard Edition 7),是Java历史上...
5. **动态语言支持**:Java 7添加了JSR 292(invokedynamic指令),为支持动态语言如Groovy、JRuby等提供了基础,提升了这些语言在Java平台上的性能。 6. **字符串inswitch**:Java 7扩展了switch语句,使其可以...
Java 6.0还引入了改进的垃圾收集算法,如Parallel GC和CMS(Concurrent Mark Sweep),提升了应用程序的响应时间和整体性能。JIT(Just-In-Time)编译器也得到了优化,能够更智能地识别并编译频繁执行的热点代码,...
9. ** invokedynamic指令**:Java 8进一步利用了invokedynamic字节码指令,它是Java 7引入的,主要用于支持Lambda表达式的实现。这个指令使得JVM能够更高效地处理动态方法调用。 10. **并行GC优化**:包括CMS...
8. **动态类型语言支持**:引入了invokedynamic指令,为脚本语言和动态类型语言的Java集成提供了便利。 **JDK 1.7的安装与验证** 下载并安装`jdk-7u80-windows-x64.exe`文件后,按照向导完成安装。安装完成后,...
4. **动态语言支持**:Java 7添加了 invokedynamic 指令,支持动态语言如Groovy、Ruby等在Java虚拟机(JVM)上的运行。 5. **钻石操作符**:在创建带匿名构造器的类实例时,编译器可以自动推断出类型参数,如`Map, ...
Java SE 7的JVM支持多种GC算法,如串行GC、并行GC、并发标记扫描GC和G1 GC等,它们各有优缺点,适用于不同场景。 5. 类文件结构:详细描述了.class文件的内部结构,包括魔数、版本号、常量池、类信息、字段信息、...
随着JDK 1.7的推出,JVM迎来了许多新特性,如G1垃圾收集器和InvokeDynamic指令。新版书籍对此进行了更新,增加了对这些特性的介绍,并加强了对OpenJDK源码分析的讲解,让读者有机会深入源码层面理解JVM的实现细节。 ...
4. **新的日期/时间API**:`java.time`包提供了更强大、更易于使用的日期和时间API,取代了原有的`java.util.Date`和`java.util.Calendar`。 5. **Stream API**:提供了对集合数据进行声明性处理的能力,使得过滤、...
10. **最新特性**:第二版可能涵盖Java的新特性,如Java 7的 invokedynamic 指令、Java 8的Lambda表达式和Stream API,以及Java 11以上的特性,它们如何在JVM上实现和优化。 通过阅读本书,开发者不仅可以掌握JVM的...
2. 垃圾回收:Java SE 7的垃圾回收器进行了优化,包括并行和并发GC策略,以提高应用响应速度和降低暂停时间。G1垃圾收集器作为全功能的垃圾回收器被引入,它能够有效地管理大型堆内存,并减少垃圾回收的停顿时间。 ...
1. **多线程并行GC(Garbage Collector)优化**:Java 7提供了新的垃圾回收器,如G1(Garbage-First)收集器,它能更好地管理大型堆内存,降低停顿时间,提高应用性能。 2. **动态类型语言支持**:引入了`...
3. **动态类型语言支持**:JDK11增强了对动态类型语言的支持,例如Groovy和Ruby,通过添加了`invokedynamic`字节码指令的改进。 4. **文本块(Text Blocks)**:这是一种新的字符串语法,用于表示多行文本,减少...
JDK 1.7引入了 invokedynamic 字节码指令,这是对Java虚拟机(JVM)的重大改进。这项特性为动态类型语言提供了更好的支持,使得Java平台能够更有效地运行如Groovy、JRuby等脚本语言。 2. **Try-with-resources**:...
2. **动态类型语言支持**:JDK7通过加入`invokedynamic`指令,为脚本语言和动态类型语言提供了更好的支持。 3. **字符串在堆上直接存储**:之前的版本中,字符串常量池在方法区,JDK7将其移至堆内存,减少了内存...
5. **动态类文件常量**:Java 11允许在运行时创建`CONSTANT_InvokeDynamic`常量,这有助于动态语言的实现。 6. **ZGC:Zero Garbage Collector**:这是一个实验性的低延迟垃圾收集器,旨在提供极低的暂停时间,适合...
8. **动态语言支持:** Java 7引入了JSR 292,即 invokedynamic 指令,为运行时绑定和动态语言提供了更好的支持。 9. **并发工具改进:** `Fork/Join`框架和`Parallel Streams`的引入,使并行编程变得更加简单,...
10. **JVM最新发展**:书中的第二版会更新JVM的最新特性,如G1垃圾收集器、Metaspace、 invokedynamic指令等,使读者了解Java技术的前沿动态。 通过学习《深入Java虚拟机第二版》,开发者不仅可以掌握Java编程的...