当前位置: 首页 > 编程日记 > 正文

更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动

Zing虚拟机文档Understanding Java Garbage Collection(了解Java垃圾收集)

首先说明这个Zing是收费的,但是他也是优秀的,我觉得我们可以研究下他的一些思想对于怎么提高JVM,以及目前的JVM有什么缺陷是非常有帮助的。

中文版简介:https://cn.azul.com/

Zing的优势:

1)更好的性能
支持 Zing 的 Falcon JIT 编译器是使用 LLVM 技术构建的,其可提供深入的优化。

2)无停顿执行
Azul 解决了Java 的垃圾回收问题。停止和应用程序超时、GC 停顿、停滞和抖动周旋。

3)更快速启动
凭借 ReadyNow!® 技术,Java 应用程序启动速度快,且能保持高速运行。

Zing:虚拟机

Zing FAQ:

https://www.azul.com/products/zing/zinqfaq/

下面是我结合谷歌翻译后再适当修改了下的FAQ,删掉了购买等和技术无关的部分:

什么是Zing®?
Zing是一个兼容并符合Java SE规范的JVM。Zing针对Linux和x86进行了优化。Zing专为需要大内存,高事务率,一致响应时间或高持续吞吐量的任意组合的企业应用程序和工作负载而设计,是唯一能够提供与堆大小无关的可预测响应时间的JVM。

Zing与传统JVM在部署Java应用程序方面有何不同?
Zing是一个高度优化的 JVM和弹性运行时,它打破了传统的Java规模障碍,并为Java应用程序,规模和吞吐量提供了数量级的改进。Zing发行版包括一个非侵入式,生产时应用程序可见性工具,称为Zing Vision(ZVision)。
借助ZVision,IT组织首次拥有零开销,细粒度的可见性工具,可帮助发现问题并加速解决难以捉摸的生产问题。

Zing是另一个JVM吗?
Zing是一个更好的 JVM,它利用先进技术为主流Java应用程序提供更高的性能。我们的大多数客户不需要巨大的Java堆或超低延迟 - 他们只是希望他们的Java应用程序可靠地运行。Zing通过Azul C4提供这些优势   (Continuously Concurrent Compacting Collector) (连续并发压缩收集器)消除了限制所有传统JVM可扩展性的“stop-the-world”(“全局停顿”)。由于单实例可以扩展到几千兆字节到多达8TB内存,因此Zing可以显着减少支持企业应用程序或多租户SaaS / PaaS解决方案所需的实例总数,从而简化部署,显着提高响应时间一致性并降低运营支出和资本支出。Zing还附带ReadyNow!解决Java预热问题的技术,允许您的应用程序快速启动并保持快速。

Zing如何提供比其他JVM更好的性能?
Zing消除了“stop-the-world”(“全局停顿”)式的垃圾收集,其他JVM限制了这样的可扩展性,因此每个Zing实例可以扩展到8TB的堆内存。Zing还使用高度优化的即时(JIT)编译器,默认使用分层编译
传统的Java热身问题由Zing的ReadyNow解决!允许应用程序快速启动并保持快速运行的技术,允许运营团队在运行之间保存和重用累积的编译器优化,并避免在工作负载或条件发生变化时可能减慢处理速度的去优化停顿

什么是Zing Vision?
Zing Vision是一个安装在Zing里的零开销,永远在线的线上监控,诊断和调整工具。
Zing总是收集数据作为其必须完成的工作的辅助任务,这使得系统管理员可以通过Zing Vision利用这些信息,而不必担心影响正在运行的应用程序。

Zing如何解决Java热身问题(Java warm up)?
Zing使用Azul创新的ReadyNow!™ 技术来解决热身问题。ReadyNow专为低延迟系统而设计!允许Java应用程序在启动时实现最佳性能和一致性,并最大限度地减少负载条件发生变化时可能发生的破坏优化

为什么要介绍Zing的名为“Falcon”的新编译器
Falcon JIT编译器的开发是为了确保Java开发人员和基于Java的企业能够从当今的服务器硬件中获取最大性能

Falcon JIT编译器基于什么技术?
Falcon JIT编译器基于LLVM技术,这是一个受欢迎的编译器基础设施项目,得到了一流大学和包括Adobe,Apple,Google,NVIDIA和Intel在内的数十家企业贡献者的积极参与。

Falcon比C2更快吗?
是。

Falcon支持哪些版本的Java?
Falcon适用于使用Java SE 7和Java SE 8构建的应用程序。作为功能预览,Falcon还可以与Java SE 10和11一起使用(即将推出)


Zing如何支持大堆大小以及它是如何弹性的?
Zing允许Java应用程序利用他们需要执行的任何数量的内存,仅受系统中物理内存或虚拟机管理程序可识别的数量的限制
由于Zing独特的垃圾收集器,基于Azul的开创性C4 (连续并发压缩收集器)技术,GC暂停与JVM堆的大小无关,并且不限制应用程序可伸缩性。
此外,Zing还包括一项专利创新的“内存池”(即内存储备),允许JVM根据实时需求动态增加内存占用量; 当需求减少时,Zing将此内存返回给系统。
此内存预留不仅可确保在高负载下保持一致的性能,而且可以充当因错误或编码错误而遇到“内存泄漏”的JVM的紧急内存。

什么是Zing ReadyNow!™?
ReadyNow!是Zing运行时内置的技术,可以很好地解决Java热身问题。
他有两个主要特点:
首先,它使运营团队能够跨运行保存和重用编译器优化。
第二,ReadyNow!为开发人员提供强大的API和编译器指令,以预编译常用的代码或必须快速的方法,即使它们不经常被调用。

Zing如何提供无间断操作?
Zing默认使用Azul C4垃圾收集器。无论堆大小如何,C4收集器都在不断地进行压缩,并且永远不会使用“stop-the-world”(“全局停顿”)的暂停来进行垃圾收集。

什么是C4垃圾收集器?
该C4(连续并行压缩收集器)  是一个更新的代执行Azul Pauseless GC算法,是Zing的默认垃圾收集器。

Zing能帮助解决数据库争用吗?
是。使用较少的应用程序实例,您的数据库可以看到更少的连接和更少的争用

Zing是否已经使用各种Java应用程序进行了测试?
是。对于每个版本,我们测试各种应用程序堆栈(包括Wildfly,Active MQ,Cassandra,WebLogic Server,WebSphere Application Server,JBoss和Tomcat),以及其他开源软件和第三方应用程序。

企业主为什么要关心Zing?
Java应用程序通常是关键业务和关键任务。影响收入和使用的性能和可伸缩性问题通常不是由应用程序,数据库或网络引起的,而是通常与JVM的选择有关。
通过选择Zing,您可以消除意外长时间的用户等待时间内存不足崩溃,从而捕获收入和客户的损失,并在需求突然出现时提供一致的用户体验。

Azul C4垃圾收集器

大多数垃圾收集器的主要缺点是需要长时间的应用程序暂停。这些暂停是不可避免的要求压缩堆以释放空间的结果。收集器使用不同的策略来延迟这些事件,但是除了使用连续并发压缩收集器的Azul C4垃圾收集器之外,所有商业可用收集器都不可避免地压缩。

C4(连续并发压缩收集器)是Azul Pauseless GC算法是Zing®的默认收集器。 C4通过支持同时生成并发来区别于其他世代垃圾收集器:使用可以同时且独立活动的并发(非停顿)机制收集不同代。与其他算法不同,它不是“大部分”并发,而是完全并发,所以它永远不会回到 stop-the-world 的压缩。

垃圾收集器摘要如下。有关术语的更多信息以及有关收集器的更多详细信息,请阅读Understanding Java GC白皮书。

垃圾收集(GC)是Java平台上应用程序行为的一个组成部分。Java开发人员可以通过了解GC的工作原理以及更好地选择垃圾收集器来提高应用程序性能,可伸缩性和可靠性。

更多资源:
关于Azul C4收集器的技术白皮书»
*请注意,使用IBM的J9和Oracle的JRockit,您可以选择使用单代或2代垃圾收集器

ReadyNow!® - 启动更快,保持快速

解决Java热身问题 
专为基于Java的应用程序而设计,必须满足特定的服务级别
帮助开发人员管理Java的运行时去优化
减少CPU资源消耗 
允许保存和重复使用累积的编译器优化配置文件
为开发人员提供对Java编译的更多控制
减少因合成测试或“假”数据的需要而导致的运行预热风险
在市场开放等关键时刻确保一致的峰值性能
允许Java快速启动并保持快速
要了解有关ReadyNow的更多信息!®特性和功能,下载 数据表
了解更多有关Azul的ReadyNow的信息!®技术在 InfoQ采访阿祖尔首席技术:Azul ReadyNow!寻求消除JVM热身

Java“热身”问题的背后:
基于Java的系统在运行编译和优化代码时可提供出色的性能。但是,JVM需要时间来“预热”或优化常用代码,因此应用程序可以以最快的速度运行。 
为什么会这样? Java旨在快速启动,然后根据实际使用情况提高性能。JVM的即时(JIT)编译器(如Zing的Falcon编译器)依赖于描述应用程序的哪些部分被称为最多(“热”代码)的配置文件数据。
JIT编译允许JVM优化性能,但这可能需要时间。在资本市场等用例中,通常系统会“热身”以提供最佳性能。虽然Java应用程序通常需要一段时间才能启动,但是当打开铃声响起时,它必须准备好进行全面优化。


当前的Java预热策略:
需要最佳Java性能和一致性的公司(如金融服务公司)已经尝试了多种方法来加热JVM,例如模拟测试数据,“虚假”交易,甚至是市场开放时的小型实时交易。
在其他问题中,这些策略可能会引入操作风险,即“虚假”数据可能会泄漏到“真实”交易日,或者实际情况可能与用于预热JVM的方案不同。有效的策略需要复制真正的端到端行为。
如果条件发生变化,Java会恢复为已解释的代码,这种情况称为“去优化”,这会使性能降低到爬行速度,直到重新编译和重新优化关键方法。Azul的ReadyNow!技术提供两个关键功能。首先是运营团队能够跨运行保存和重用累积的优化配置文件。第二个是一组强大的API和编译器指令,使开发人员能够更好地控制JVM去优化的时间和影响。

解决方案:ReadyNow!®AzulSystems的技术:
好了!®是用于Java的Zing运行时内置的技术。它允许基本系统在交易日开始时实现最佳性能和一致性。常见的热身技术有时会针对错误的条件进行优化,Zing的ReadyNow!
当“真实”交易与用于预热的配置文件不同时,技术可以防止大多数去优化。有了ReadyNow!运营团队可以从一天或一组市场条件中节省累积的优化,以便以后重复使用。
此外,开发人员可以更好地控制Java编译,包括API,配置指令,策略控制以及对“未实现”代码处理的改进。ReadyNow专为低延迟系统而设计!技术使Java应用程序从开幕式开始就能快速上市 - 并且它们保持快速。

垃圾收集(GC)调整

为什么垃圾收集(GC)调整?

大多数垃圾收集器必须停止应用程序处理 (“stop-the-world”)以确定哪些对象仍在使用中,这些对象可以被垃圾收集以及对内存堆进行碎片整理和压缩。暂停时间随内存堆大小线性增加,因此大堆可能导致用户明显延迟和应用程序性能不佳。

GC调整 - 一些基础知识

调整垃圾收集所花费的大部分时间都是为了延迟压缩。由于大多数物体都很年轻,因此可以在年轻一代上进行垃圾收集一段时间,但最终需要回收旧的没用的对象。可以通过跟踪旧的gen对象被删除的位置并使用释放的内存来进一步延迟完整的GC。但是,在某些时候,这个空间将变得支离破碎,需要回收。您可以尝试通过调整尽可能地延迟垃圾收集,但实际情况是您不能永远延迟它。

消除垃圾收集暂停和GC调整的需要

Zing虚拟机使用 Azul创新的C4收集器,可提高应用程序性能,无需进行大多数GC调整。使用Zing,应用程序可在堆和GC设置的广泛,平稳操作范围内始终如一地执行。另一个关键的好处是“你测试的是你得到的东西”,因此生产中的性能与测试的性能相匹配。

C4是一种高度并发,一致的算法,能够同时压缩Java堆,并允许应用程序在执行内存重映射时继续执行。其他JVM需要“停止世界”暂停才能完全压缩堆。请参阅下面的Zing GPGC和HotSpot JVM CMS的比较。

HotSpot JVM CMS与Zing Pauseless垃圾收集的比较:

Hotspot JVM  CMS

年轻代:会停顿。

年老代:大部分是并发的,非压缩的

├主要是并发标记

├在mutator运行时同时标记,

├跟踪卡片标记中的突变,

├重新访问变异卡片(根据需要重复),

└停顿Stop-the-world以赶上突变,ref处理等。

├并发打扫

└不压缩(维护空闲列表,不移动对象)

FGC:停顿Stop-the-world

而Azul  PGC 总之是并发,压缩,且没有停顿的!

Java堆大小

Java堆是分配给在JVM中运行的应用程序的内存量。堆内存中的对象可以在线程之间共享。
由于垃圾收集暂停,传统JVM中Java堆大小的实际限制通常约为2-8 GB。许多类型的应用程序都可以从非常大的堆中受益,例如内存计算,NoSQL数据库,大数据 应用程序,分析,Web个性化和电子商务。

一个100GB的堆不会在典型的JVM上崩溃,它会一次定期暂停几分钟。这限制了应用程序性能和可伸缩性,并阻止Java应用程序使用当今商用服务器的全部资源。
如果可以消除相关的性能问题,非常大的堆大小通常非常实用。Azul的Zing®是解决Java的垃圾回收问题,并允许堆多达8TB没有性能损失的第一个JVM。

更大的Java内存堆:
允许创建更多对象;
填充需要更长时间;
允许应用程序在垃圾收集(GC)事件之间运行更长时间。

较小的Java内存堆:
保留较少的对象;
填写更快;
是否更频繁地收集垃圾(但暂停时间较短);
可能导致内存不足错误。

2-8GB的内存堆是否足以满足大多数Java应用程序的需求?
我们已经找到了大量证据表明对更多堆的需求被压抑了:
机器内“横向尺度”的常见用途
使用“外部”内存和不断增长的数据集(更大的数据库以及使用外部数据缓存,如memcached,JCache和JavaSpaces)
持续研究永无止境的分配问题

问题出在软件堆栈中,它会对每个实例的内存施加人为约束。
GC暂停时间是实例大小的唯一限制因素,正如我们在实践中发现的那样,即使是广泛的垃圾收集(GC)调整也不会让它消失。
一旦你解决了GC,你就解决了这个问题。Azul的创新C4垃圾收集算法是完全并发的,消除了非常大堆的性能影响。

JVM调优

JVM调优:主要指内存堆大小垃圾收集(GC)调优

如果您正在寻找有关Zing调整标志的特定信息,请查看ZVM命令行选项下的在线Zing文档。

内存堆大小

对于大多数JVM,调整堆大小需要分析应用程序如何使用内存,更改参数和重新分析。应用程序需要尽可能靠近生产负载运行。这是特别难以做到的,因为在实验室中不会看到一些现实中出现的负载。大多数JVM使您能够设置初始堆大小(-Xms)和最大堆大小(-Xmx),但有些也允许其他参数,如大页。如果堆大小设置得太大垃圾收集暂停会变得太长; 如果堆大小设置得太小应用程序将抛出内存不足错误并可能崩溃。因此,内存和GC调优是影响应用程序性能的密切相关主题。

Zing®消除了大部分JVM调整的需要。Zing支持堆内存的“银行系统” ( ‘banking system’ ),允许运行时实例根据需要可靠地增长和缩小内存堆。Zing可以以多个GB /秒的速度在实例之间转移物理资源。不必将内存堆调整“完全正确”可以节省大量时间。您可以专注于为业务增加更多价值并启动新计划,而不是花时间调整和重新调整Java基础架构以修复生产故障。

此外,该平台还包括Zing Vision,一种零开销,始终在线监控,调整和可视性工具。使用Zing Vision,您可以快速启动应用程序,从而加快产品上市速度并随时调整生产。下面是传统JVM和Zing的实际JVM调整参数的示例。

介绍Falcon JIT编译器

Zing的Falcon JIT编译器
在将近二十年之后,Java有了一个新的实时(JIT)编译器,它只能在Zing运行时中用于Java。 Azul Systems构建了Falcon JIT编译器,以确保Java开发人员和基于Java的企业能够从当今的服务器硬件中获取最大性能。

Falcon JIT编译器与Azul的无暂停垃圾收集技术以及ReadyNow完全集成!技术,解决了延迟敏感应用程序中Java的预热问题。

LLVM  - Falcon JIT背后的技术
Falcon JIT编译器基于LLVM技术,这是一个受欢迎的编译器基础设施项目,得到了一流大学和包括Adobe,Apple,Google,NVIDIA和Intel在内的数十家企业贡献者的积极参与。

今天,LLVM被用于Java和JVM之外的各种编程语言和框架,包括Swift和Rust等新平台以及许多其他平台,包括C / C ++,Objective-C,Swift,Clang,OpenCL,CUDA等等。

LLVM被认为是最先进的编译器技术,LLVM社区不断采用新的优化技术并支持新的处理器指令集和硬件平台。


使用Zing的新Falcon JIT编译器运行时,Java工作负载的性能优势具有显着的业务优势:

更好的应用程序服务级别指标:减少延迟,减少超时,提高一致性;
更好的客户体验:即使在不可预测的负载下也能可靠地实现客户期望,提高客户满意度;
降低运营成本:减少内存占用要求,提高云/ AWS部署中类似大小的实例的承载能力;
降低开发成本:实现所需性能,一致性和规模所需的工程时间更短.

问:Zing什么时候和Falcon一起发货?
答:Falcon JIT已与Zing一起运行了几个月。从版本17.03开始,Falcon是Zing的默认JIT编译器,取代了传统的C2编译器。

问:Falcon JIT比C2更快吗?
答:是的。

问:Zing还支持C2吗?
答:是的,可以通过在JVM启动时指定标志来使用C2。

问:我是否需要重新编译现有的应用程序以使用Falcon?
答:不用。

问:Falcon支持哪些版本的Java?
答:Falcon适用于使用Java SE 7和Java SE 8构建的应用程序。

问:Falcon会支持Java 9吗?
答:是的,在Zing的未来版本中。

相关文章:

c语言将水仙花数放入一维数组a中,全国计算机等级考试C语言考试程序设计题(13)...

在考生目录下,要求程序PROG.C的功能是:将所有的水仙花数保存到一维数组a中。(所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:1531*1*15*5*53*3*3)#includevoid main(){void NONO( );//函数声明int a[10]{0},i…

[j2me]类似于OperaMini二级菜单界面演练[1]

拜朋友所赐,今日开始尝试如何绘制类似于Opera Mini的二级菜单,如下图所示:我自己的练习,还很幼稚,姑且记录如下:点击左软键,即可选中界面左下角的“选择”命令,二级菜单旋即弹出&…

宜人贷YEP技术、数据沉淀背后:金融科技迎来开放赋能时代

日前,“IFPI第十届金融科技决策者大会2018”在上海举办,宜人贷不仅入选了本届大会的“中国Fintech独角兽榜Top50”,推出的YEP共享平台也受到了众多金融机构的关注。从头部平台宜人贷全面开放金融科技能力来看,互联网金融行业历经混…

Redis源码和java jdk源码中hashcode的不同实现

一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C代码调用栈非常深。 先看这个rehashing.c 主要就是dictKeyHash函数,需要调用dict.h头文件中定义的dictGenHashFunction #include "redis.h" #i…

android 7.0 短信监控,Android 7.0 监听网络变化的示例代码

Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可。public class NetChangeReceiver extends BroadcastReceiver {private static final String ANDROID_NET_CHANGE_ACTION "android.net.conn.CONNECTIVITY_CHANGE…

Mysql列类型-数值型

2019独角兽企业重金招聘Python工程师标准>>> 一、整数型: 1、取值范围: tinyint smallint mediumint int bigint 分别占用1、2、3、4、8个字节的存储空间 如:tinyint占用1个字节空间,它的取值范围&…

2018.10.22-dtoi1443奶牛逃亡(cowrun)

题目描述&#xff1a; Farmer John忘记修复他农场篱笆上的一个大洞&#xff0c;以至于篱笆围着的N&#xff08;1< N <1,000&#xff09;只奶牛从大洞中逃脱出来&#xff0c;并在农场里横冲直撞。每头在篱笆外的奶牛每分钟都将给他带来一美元的损失。FJ必须遍及每头奶牛、…

[转载]Linux 线程实现机制分析

自从多线程编程的概念出现在 Linux 中以来&#xff0c;Linux 多线应用的发展总是与两个问题脱不开干系&#xff1a;兼容性、效率。本文从线程模型入手&#xff0c;通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足&#xff0c;描述了 Linux 社区是如何看待…

Java12和Jdk12安装以及OpenJdk12源码

文档&#xff1a; JDK 12文档:https://docs.oracle.com/en/java/javase/12/ 下载&#xff1a; OracleJDK12下载&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html csdn上我下好的&#xff0c;速度较快&#xff1a;https…

android 获取视频大小,Android 获取视频缩略图(获取视频每帧数据)的优化方案

速度对比左边的图片是通过方式1右边的图片是通过方式2speed.gif速度优化&#xff0c;效果拔群。在缩小2倍的Bitmap输出情况下使用MediaMetadataRetriever 抽帧的速度&#xff0c;每帧稳定在 300ms左右。使用MediaCodecImageReader 第一次抽帧。大概是200ms ,后续每帧则是50ms左…

Msql的DML、DDL、DCL的区别

DML(data manipulation language)&#xff1a;它们是SELECT、UPDATE、INSERT、DELETE&#xff0c;这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition language)&#xff1a;主要的命令有CREATE、ALTER、DROP等&#xff0c;DDL主要是用在定义或改变表(TABLE)的…

JSR 133 Java内存模型以及并发编程的最权威论文汇总

Java内存模型 先看官方文档&#xff1a; https://docs.oracle.com/javase/specs/ JSR 133&#xff1a;Java TM内存模型和线程规范修订版&#xff1a;https://www.jcp.org/en/jsr/detail?id133 JSR&#xff1a;Java规范请求所有JSR的列表&#xff1a;https://jcp.org/en/jsr/…

ajax实现自动刷新页面实例

html部分&#xff1a;<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>ajax实现自动刷新</title> </head> <body onLoad"Autofresh()"> <p>现在的时间是&#xff1a…

android aliasactivity作用,android activity-alias 的作用

activity-alias是android里为了重复使用Activity而设计的。当在Activity的onCreate()方法里&#xff0c;执行getIntent().getComponent().getClassName();得到的可能不是这个Activity的名字&#xff0c;有可能是别名的名字&#xff0c;例如&#xff1a;在AndroidMenifest.xml有…

1024 程序员节 | 请对身边的程序猿好一点

程序员节起源程序员的工作我们都知道&#xff0c;编程嘛。但为什么程序员节要在1024呢&#xff1f;1024最早火起来是因为一个“不可描述”的论坛&#xff0c;那里的回帖机制是&#xff1a;新用户发过贴之后&#xff0c;过1024秒才能发一贴&#xff0c;如果没到1024秒就又发了一…

stackoverflow上一个最会举例子的专家

https://stackoverflow.com/ Premraj是stackoverflow上一个一个最会举例子的专家&#xff0c;我特意收集了他的一些有趣的举例&#xff1a; Java弱引用最精彩的解释 https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakrefere…

Java中的两个关键字——super、this

Java中的两个关键字——super、this 神话丿小王子的博客主页 一、super super 是java中方的一个关键字&#xff0c;用它可以引用父类中的成员&#xff1a; super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造器中调用父类的构造器 使…

android system window,Android控件的fitSystemWindows属性

官方描述&#xff1a;根据系统窗体里的元素比如状态栏来调整View的布局。如果被设为true&#xff0c;控件的padding将会被调整为顶部留出一个statusBar的空间。类似于伪代码paddingTop"statusBarHeight"。重点说明&#xff1a;当布局内容可以延伸到状态栏&#xff0c…

Nestjs OpenAPI(Swagger)

官方文档 用来描述api 转载于:https://www.cnblogs.com/ajanuw/p/9846589.html

Jdk11,Jdk12的低延迟垃圾收集器ZGC

https://wiki.openjdk.java.net/display/zgc/Main Z垃圾收集器&#xff0c;也称为ZGC&#xff0c;是一种可扩展的低延迟垃圾收集器&#xff0c;旨在实现以下目标&#xff1a; 暂停时间不超过10毫秒暂停时间不会随堆或实时设置大小而增加处理堆范围从几百M到几T字节大小 一目了…

Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

《Android项目驱动式开发教程》第一章开发入门1.4 项目框架分析 4 android:versionName"1.0" > 5 8 第9行代码android:icon用来声明整个APP的图标&#xff0c;图片一般都放在drawable文件夹下&#xff0c;使用资源引用的方式。 第10行代码android:label用来声明整…

getLocationInWindow getLocationOnScreen getLeft , getTop, getBottom,getRight

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 最近做项目时&#xff0c;发现在activity的onCreate()和onResume()方法里调用View.getLocationInWindow() 时&#xff0c;View.getLocationInWindow()返回空值&#xff0c;觉得很奇怪&#xff0c;因…

使用reflector对.NET反编译

reflector的下载地址&#xff1a;https://www.cr173.com/soft/355285.html 反编译后的结果&#xff1a; 转载于:https://www.cnblogs.com/ZaraNet/p/9848355.html

协程和Java实现

多线程的性能问题&#xff1a; 1.同步锁。 2.线程阻塞状态和可运行状态之间的切换。 3.线程上下文的切换。 协程&#xff0c;英文Coroutines&#xff0c;是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样&#xff0c;一个线程也可以拥有多个协程。 协程&a…

LoadRunner 技巧之 手动关联与预关联

上一节介绍了关联的原理与自动关联&#xff0c;除了自动关联还有另外两种关联方式&#xff1a;手动关联与 预关联。 手动关联 如果脚本很长&#xff0c;那么我们想找到一…

android app文档,android App项目需求描述文档.docx

本app是给外卖配送员用的&#xff0c;系统后台根据一定的逻辑生成或者建立运单&#xff0c;本App读到后台的运单讲外卖送到定外卖的手中本文档所需详细资料请到/s/1jGGgtLG下载与后台交互的地方不用实现&#xff0c;有数据显示的自己把交互函数写好 返回的测试数据写在交互函数…

如何利用微信小游戏的分包加载机制突破4M代码包体积限制

相信大家度过了一个不错的端午假期&#xff0c;在端午前夕&#xff0c;即6月15日晚上&#xff0c;微信小游戏宣布支持分包加载功能&#xff0c;白鹭引擎在端午节后第一天正式支持分包加载机制。在正式向开发者介绍如何使用前&#xff0c;我先为各位解读一下我对微信提供这个 AP…

一个会画图的工程师

发现小谢图画的很好&#xff0c;虽然有些也是他引用的&#xff0c;但是我觉得还是很好所以这里收集下。 【RocketMQ源码学习】2-Namesrv 3-Remoting模块 rocketmq-remoting 模块是 RocketMQ 中负责网络通信的模块&#xff0c;被其他所有需要网络通信的模块依赖。它是基于 Net…

2016百度实习编程题:括号序列

不知如何解决 1.感觉贪心或者动态规划&#xff0c;不知道如何解决 2.做过生成合法括号序列的题目&#xff0c;想到用DFS补成合法的括号&#xff0c;然而没有成功

html动画怎么隐藏,JQuery操作div隐藏和显示的4种动画

Jquery-Div动画显示body{font-family:"宋体";font-size:13px;color:#415973;}#ShowDiv{display:none;width:300px;height:100px;border:1px solid #ccc;border-right:2px solid #888;border-bottom:2px solid #888;background-color:#f9f9f9;text-align:center;paddi…