1.Ubuntu下编译OpenJDK9
2.Centos 安装部署 铭飞MCMS
3.OpenJDKï¼
4.Windows下编译OpenJDK9
5.手机版安卓虚拟机哪个最好用手机虚拟机型app推荐
Ubuntu下编译OpenJDK9
为了在Ubuntu下编译OpenJDK9,首先安装VMware Workstation Pro和Ubuntu ..2 LTS,确保系统干净无其他应用。
接着,通过Mercurial(hg)获取OpenJDK9的源代码,安装并下载hg,源码英语单词然后访问OpenJDK官网获取源代码的下载地址。按照指导,使用hg下载源代码,注意要执行get_source.sh脚本。
在下载过程中可能会遇到问题,如“exited abnormally”或“stream ended unexpectedly”,此时可重新执行下载脚本。完成下载后,会生成约1GB的文件,包含大量.hg文件夹。
阅读OpenJDK官网提供的JDK 9 Build README,以了解编译步骤。在配置阶段,应避免使用系统自带的OpenJDK8作为Boot JDK,推荐手动下载安装Oracle的Java 8版本以确保稳定性。
访问Oracle官网下载Java 8,解压后将其放置在指定目录。配置编译环境时,可能会遇到缺少X库的问题,通过执行特定脚本解决。在多次尝试和调整后,完成配置。
使用make images命令开始编译过程,xp 源码下载整个编译耗时约8分钟。编译完成后,生成的build文件夹包含了所需JDK文件。将整个jdk文件夹复制到指定目录,并进行简单测试以验证编译成功。
对于Mac和Windows用户,OpenJDK9的编译流程类似,只需根据各自操作系统的特定需求进行调整。
Centos 安装部署 铭飞MCMS
要在CentOS上安装部署铭飞MCMS(MCMS内容管理系统),请遵循以下步骤。具体步骤可能会根据MCMS版本和CentOS版本有所差异,以下为通用指南:
1. **系统环境准备
**确保CentOS系统安装了以下基础环境:
Java: MCMS为Java系统,需安装OpenJDK 8或更高版本。
MySQL: 使用MySQL 5.7或更高版本作为数据库存储。
Apache Tomcat: 选择Tomcat 9或适用版本作为服务器。
配置环境变量:设置Tomcat和Java的环境变量(如果需要)。
2. **数据库配置
**登录MySQL,创建数据库和用户。
3. **MCMS源码获取与部署
**从铭飞官网或合法渠道下载MCMS源码包。解压并把MCMS的WAR文件放置于Tomcat的webapps目录下。
4. **配置Tomcat
**根据需求修改Tomcat配置文件,包括端口、内存设置等。
5. **启动Tomcat
**启动Tomcat服务。
6. **系统配置与初始化
**以上步骤为基本部署框架,实际操作时请参照官方指南并结合实际情况进行。
OpenJDKï¼
openjdkä¸jdkåºå«
1ãOracleJDKåOpenJDKä¹é´çä¸äºä¸»è¦åºå«å¦ä¸ï¼åå¸å¨æOpenJavaæ¯å 个æåå¸ä¸æ¬¡ï¼èOraclejavaæ¯ä¸å¹´åå¸ä¸æ¬¡ãç¨æ·è½å¤è·å¾oracleå¯¹å ¶çæ¬çé¿ææ¯æãèOpenJDK为任ä½çæ¬æä¾æ´æ¹ï¼ç´å°ä¸ä¸ä¸ªçæ¬åå¸ã
2ãææåè®®çä¸åï¼openjdkéç¨GPLV2åè®®æ¾åºï¼èJDKåéç¨JRLæ¾åºã两è åè®®è½ç¶é½æ¯å¼æ¾æºä»£ç çï¼ä½æ¯å¨ä½¿ç¨ä¸çä¸åå¨äºGPLV2å 许å¨åä¸ä¸ä½¿ç¨ï¼èJRLåªå 许个人ç 究使ç¨ã
3ãæ¯ä¸ªé¡¹ç®ç¨å°çä¸è¥¿ä¸åï¼æ以ä¸è½ä¸æ¦è论ï¼OpenJDKä¸SunçJDKåè½é½æ¯ä¸æ ·çï¼åªæ¯çæä¿¡æ¯ä¸ä¸æ ·ãOpenJDKå ¬å¼äºJDKãJVMãJREãJavaç±»åºçæºä»£ç ï¼èSunJDKåªå ¬å¼äºJavaç±»åºçæºä»£ç ã
4ãææåè®®çä¸åï¼OpenJDKéç¨GPLV2åè®®æ¾åºï¼èSUNJDKåéç¨JRLæ¾åºã两è åè®®è½ç¶é½æ¯å¼æ¾æºä»£ç çï¼ä½æ¯å¨ä½¿ç¨ä¸çä¸åå¨äºGPLV2å 许å¨åä¸ä¸ä½¿ç¨ï¼èJRLåªå 许个人ç 究使ç¨ã
5ãopenjdkéç¨GPLV2åè®®ï¼oraclejdkéç¨JRLåè®®ã
è°è°OpenJDKä¸çº¿ç¨ç9ç§ç¶æ
1ãæ£æ¥openjdkæ¯å¦ææ´æ°ï¼å¦ææï¼å¯ä»¥å°è¯æ´æ°openjdkçæ¬ï¼ä»¥è§£å³å¯è½åå¨çbugãæ£æ¥openjdkçé ç½®ï¼å¦ææè¿å¤çé ç½®ï¼å¯ä»¥å°è¯åå°é ç½®ï¼ä»¥åå°openjdkå ç¨cpuçæ åµã
2ã对äºOpenJDKèè¨ï¼æ¯ä¸æ¯æ¯ä¸ªJava线ç¨é½å¯¹åºä¸ä¸ªæ§è¡å¼æ线ç¨è¿ä¸ªæ¹æ³å½ç¶ä¸å¯è¡ãæç»ä½ 举个ä¾åï¼ä½ å»ç«è½¦ç«ä¹°ç¥¨ãçªå£å°±è¿ä¹å¤ï¼æ人æ¥äºå°±æéï¼ä¸ä¼æ¯ä¸ªäººé½æä¸ä¸ªçªå£ã
3ã使ç¨OpenJDKæå åå¿«ç §å¯ä»¥å¸®å©æ们äºè§£ç¨åºçå å使ç¨æ åµï¼ä»¥åæ¾åºå åæ³æ¼çåå ã
openjdkæ¯ä»ä¹1ãåå²ä¸çåå æ¯ï¼openjdkæ¯jdkçå¼æ¾åå§ç çæ¬ï¼ä»¥GPLåè®®çå½¢å¼æ¾åºãå¨JDK7çæ¶åï¼openjdkå·²ç»æ为jdk7ç主干å¼åï¼sunjdk7æ¯å¨openjdk7çåºç¡ä¸åå¸çï¼å ¶å¤§é¨ååå§ç é½ç¸åï¼åªæå°é¨ååå§ç 被æ¿æ¢æã
2ãJDK表示çæ¯Oracleå ¬å¸çéæºç¨åºOpenJDKæ¯Oracleå ¬å¸çå¼æºç¨åºé½æ¯åä¸ä¸ªå ¬å¸ç产åï¼åªæ¯åè ç±ç¤¾åºå¼åè æä¾æ´æ°JDKåç±Oracleå ¬å¸æä¾æ¯æã
3ã许å¯è¯OracleJDKä¾æ®Oracleäºè¿å¶ä»£ç 许å¯å议许å¯è¯ï¼èOpenJDK使ç¨GNUéç¨å ¬å ±è®¸å¯è¯(GNUGPL)第2çï¼ä½æä¸ä¸ªé¾æ¥ä¾å¤ã
4ãgcjæ¯ä¸ä¸ªç¼è¯å¨ï¼ç¨æ¥æjava代ç ç¼è¯æåèç çãgijæ¯ä¸ä¸ªè§£éå¨ï¼ç¨æ¥æåèç 解éææºå¨ç çã
5ãä»åé¢ä»ç»çJavaåå±å²ä¸æ们äºè§£å°OpenJDKæ¯Sunå¨å¹´æ«æJavaå¼æºèå½¢æç项ç®ï¼è¿éçâå¼æºâæ¯é常æä¹ä¸çæºç å¼æ¾å½¢å¼ï¼å³æºç æ¯å¯è¢«å¤ç¨çï¼ä¾å¦IcedTeaãUltraVioleté½æ¯ä»OpenJDKæºç è¡çåºçåè¡çã
使ç¨openjdkéå°çé®é¢1ãTomcatæå¡åºç°ä¸è½æ£å¸¸å¯å¨çé®é¢ï¼åºç¬¬ä¸æ¶é´æ¥çTomcatlogsæ件夹ä¸ï¼å½å¤©ä»¥âcammons-daemonâå¼å¤´çæ¥å¿æ件è¿è¡ææ¥ã
2ãä½ å¥½ï¼è¯¥é®é¢æ åµæ¯Microsoft.NETFrameworkåå§åé误ãMinecraftæ¬èº«ç¨çæ¯JAVAï¼ä½ç½æçå¯å¨å¨è¦ç¨å°.NETã
3ãå¯è½æ¯å ç¨å åãcpuè¿é«ï¼å¯¼è´æ æ³å·¥ä½äºï¼æè æ¯æ¾å¡é©±å¨é®é¢ã解å³åæ³æ¯æ´æ°æ¾å¡é©±å¨ææ¢ä¸ä¸ªæ¾å¡é©±å¨çæ¬ã
openjdkå个åè¡çå¸åºä»½é¢1ãæä½³æ¡é¢åè¡çï¼ElementaryOSElementaryOSLokiä¸ä» é常ç¾è§ï¼ä¸ç¨³å®æ§åºè²å¹¶æä¾æ ä¸ä¼¦æ¯çç¨æ·å好æ§åä¸è´æ§ãè½ç¶å¸¦æé¨å主è§å ç´ ï¼ä½æ认为ElementaryOSLokiå¿ ç¶è½å¤å¨å¹´å å»è´¥LinuxMintæ为æä½³æ¡é¢åè¡çã
2ãå¹´ï¼BobYoungæç«äºACCå ¬å¸ï¼è¿æ¯ä¸å®¶é®è´å ¬å¸ï¼ä¸»è¦ä¸å¡æ¯åºå®LinuxåUnixç软件é件ã
3ãOpenJDKä¸ç代ç åºæ¬ä¸é½æ¥èªäºOracleJDKï¼å±äºOracleJDKçä¸ä¸ªåæ¯ï¼ä½æ¯å ¶ä¸å»é¤äºä¸äºéå¼æºçç»ä»¶å代ç ï¼æ¿æ¢æäºå¼æºçç»ä»¶å代ç ï¼ä¸»è¦æ¯å å¯åå¾å½¢çé¨åãå æ¤ç¨OpenJDK代æ¿OracleJDKå¯è½ä¼æä¸äºçä¸å ¼å®¹ã
4ãèPHPãJavaåä¸åï¼å®ä»¬é½æ¯è·¨å¹³å°å¼æºå è´¹çï¼è½ç¶Javaå¼å§æ¶è´¹äº(ä½è¿æå è´¹çOpenJDK)ï¼æ以PHPãJavaè¿æ¯é¦éãæèªå·±å½åå¦è¿.netï¼javaï¼ç°å¨ç®æ¯ç¥æäºè§£ã
openjdkå cpué«æä¹å¤ç1ãopenjdkplatformbinaryå ç¨CPUè¾é«å¯è½æ¯å ä¸ºä½ ççµèç³»ç»ä¸æå¤ä¸ªJavaç¨åºå¨è¿è¡ï¼æè ä½ ççµèç³»ç»ä¸çJavaç¨åºè¿è¡æ¶é´è¿é¿ï¼å¯ä»¥å°è¯å ³éä¸äºä¸å¿ è¦çJavaç¨åºï¼æè éå¯çµèï¼ä»¥éæ¾CPUèµæºã
2ãå é¤å¤ä½MODï¼å é¤å¤ä½çMODå¯ä»¥éä½å åå ç¨ï¼å¢å 空é²å åã使ç¨ä¼åMODï¼ç¨ä¼åMODï¼æ¥ä¼åå åå ç¨ï¼éä½æ ç¨å åçå ç¨ã
3ãå¯è½æ¯å ç¨å åãcpuè¿é«ï¼å¯¼è´æ æ³å·¥ä½äºï¼æè æ¯æ¾å¡é©±å¨é®é¢ã解å³åæ³æ¯æ´æ°æ¾å¡é©±å¨ææ¢ä¸ä¸ªæ¾å¡é©±å¨çæ¬ã
4ã以ä¸æ¯å¨JDK8ä¸çThreadæºç ä¸å¤æ³¨çã
5ãMicrosoftBuildofOpenJDKæ¯ç±å¾®è½¯å®æ¹åå¸çOpenJDKå®ç°ï¼æä¾ä¸ä¸ªçº¯çº¿ç¨å®å ¨ã解å³äºå®å ¨æ¼æ´åé误çJavaå¼ååè¿è¡ç¯å¢ã
6ãé¦å è¦å æç¡®ä¹é´ï¼ä»¥åOpenJDKOpenJDKOpenJDK7uåOpenJDK8ç项ç®ä¹é´æ¯ä»ä¹å ³ç³»ï¼è¿æå©äºç¡®å®æ¥ä¸æ¥ç¼è¯è¦ä½¿ç¨çJDKçæ¬åæºç åæ¯ã
Windows下编译OpenJDK9
建议先阅读一下 Ubuntu下编译OpenJDK9
目标一致,下载源代码,文章源码分享然后弄出一个能用的JDK。
使用VMware® Workstation Pro .0.1 build-
从Java Archive Downloads - Java SE 8下载适合的安装包。
进行Cygwin安装
选择安装路径和下载路径,镜像使用清华大学的 Tsinghua Open Source Mirror,安装基本组件包括make、zip、unzip。
安装完成后,根据需要选择其他额外组件,等待安装完成。
无需额外编译Freetype,OpenJDK9内部已处理。
使用Mercurial SCM进行源代码管理。
打开Cygwin Terminal,配置编译选项,执行configure和make命令。
遇到错误时,查看相关文档,解决语法问题。
清理并重新make,完成编译过程,约耗时分钟。
生成的文件夹可用于后续测试和使用。
进行基本测试以验证编译结果。
提供其他平台编译教程链接:Ubuntu下编译OpenJDK9和Mac下编译OpenJDK9
手机版安卓虚拟机哪个最好用手机虚拟机型app推荐
手机虚拟机型app推荐,手机版安卓虚拟机哪个最好用。手机版安卓虚拟机哪个最好用如果想知道手机版安卓虚拟机哪个最好用的IT知识,一定能解决您的问题的,一起来了解吧!atf源码分析
Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
发展Dalvik的诞生也导致人们开始忧虑Java平台的第一次大规模的分道扬镳或许已经是进行时了——有人已经把Dalvik和微软的JVM以及Sun对微软的诉讼联系起来,等着看Google身上是否也会发生类似事情;另外一些人则指出,Google并没有宣称Dalvik是一个Java实现,而微软却是这样做的。Sun也对可能带来的阵营分裂表达了忧虑情绪,并提出和Google合作来保证Dalvik和JVM之间的兼容性——Google对此的解释是,Dalvik是对解决目前Java ME平台上分裂的一次尝试,也是为了提供一个拥有较少限制许可证的平台。甚至还有人怀疑这是否是Sun和Google两大阵营对Java之未来的一次大规模较量。Ian Skerret认为,Dalvik的诞生是对Sun尝试控制和保护来自Java ME收入来源的一次反应,以及对建立OpenJDK统辖理事会迟迟未果的回答。
这也导致Dalibor Topic怀疑Google是否要重履Sun走过的路:
当然,一个很有意思的问题是,为什么没人有勇气拿Google关于OpenJDK的问题反过来问Google呢?
虽然Android号称开源,但它仍是专有产品。Android做过兼容性保证,是在秘密会议室中签署和保管的。
Android不具备任何治理模型,netcore源码调试也没有证据指出将来会出现治理模型。Android没有规范,并且它的许可证禁止任何替代实现的开发,因为这并非Google在SDK许可证中授权许可的使用权。Android完全在Google的掌控之下,一旦有竞争性应用在财政上损害了Google的利益,Google是保有一刀抹杀这些应用的权利的。从设计伊始,Android就受到限制,只能在Google的财务利益允许的条件内开放。专有的Java也是旧瓶装新酒而已。这就好像大家在见证JCP的重生一样,人们排着队把开源社区的“街头信誉”在一个单一的、专有的实现的基础上借给另外一个封闭的厂商垄断集团。只不过这次的大头改姓Google,而不是Sun了。(不过大家在叫唤着开源的时候,却似乎全都忘记了开发这一系列软件本身需要巨大的投入,因此利益在前,这其实也无可厚非。)
Stefano Mazzocchi发布了一篇分析报告,深切入里地探讨了围绕Java ME和Dalvik的许可证问题,他得出结论说,Dalvik的市场定位良好,足以给移动电话市场带来冲击。尽管Google一直都很小心避免引起诉讼的几个关键点,但Mazzocchi相信Sun还是会起草知识产权案的状告书(IBM也有可能)。他还指出,由于在JCP之外操作,Google可以非常快地对Android进行更改,而且可以避开Sun对任何JCP更动的否决权——这样他们也可以为诸如USB和蓝牙这样的组件加入接口,而这些组件在基础Java ME实现中是不可用的。
手机虚拟机型app推荐,手机版安卓虚拟机哪个最好用。
手机版安卓虚拟机哪个最好用最后,通过在Apache许可证下授权许可Dalvik的源码,移动电话运营商更有可能采用Dalvik,因为运营商可以在不花费许可费用的情况下使用和修改它。
此外,Java也已经不再是人们在Dalvik上开发所选择的唯一语言了——已经有人在Dalvik上运行Scala取得了成功,并且Hecl也已经被成功移植了。另外更有人对运行Groovy做了一次尝试,不过目前为止还不怎么成功。Mono项目的创始人Miguel de Icaza也对在Dalvik源码公开之后将Mono整合到Dalvik上表示了兴趣,
而且也已经有人猜测如何用多种方式来实现整合了,包括与随Android SDK提供的Java到Dalvik重编译器类似的CIL(Common Intermediate Language,通用中间语言)到Dalvik重编译器。
( dx是一套工具,可以将 Java .class 转换成 .dex 格式. 一个dex档通常会有多个.class。由于dex有时必须进行最佳化,会使档案大小增加1-4倍,以ODEX结尾。)
Dalvik和标准Java虚拟机(JVM)首要差别
Dalvik 基于寄存器,而 JVM 基于栈。
基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短。(Also of register-based VMs allow faster execution times at the expense of programs which are larger after compilation.)
Dalvik和Java运行环境的区别
1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
3:不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex
4:dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。
6:所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制
7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。
8:Dalvik是由Dan Bornstein编写的,名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛Eyjafjörður。
前景很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如IOS的根源。
年6月日,Android L 将正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。
手机虚拟机型app推荐,手机版安卓虚拟机哪个最好用。
手机版安卓虚拟机哪个最好用由于ART的出现,使Dalvik在安卓系统应用方面注定成为历史。
架构不同于其他堆栈结构的Java虚拟机,dalvik采用的是基于寄存器的架构。
dx工具将部分(但不是全部)Java的.class文件转换成.dex格式。多个类被包含在一个.dex文件中。为了节省空间,各个类文件中重复的字符串和其他常数只在.dex输出中存放一次。Java字节码被转换成Dalvik虚拟机所使用的替代指令集。一个未压缩的.dex文件通常比来自相同.class文件的已压缩.jar文档小。
当被安装到移动设备时,Dalvik可执行文件可能会被修改。为了进一步优化,虚拟机可能会调整文件内部分数据的端序、内联一些函数和简单的结构体、并短路掉一些不必要的操作等。
自Android 2.2开始,Dalvik支持JIT(just-in-time,即时编译技术)。
优化后的Dalvik较其他标准虚拟机存在一些不同特性
·占用更少空间
·为简化翻译,常量池只使用位索引
·标准Java字节码实行8位堆栈指令。Dalvik使用位指令集直接作用于局部变量。局部变量通常来自4位的“虚拟寄存器”区。这样减少了Dalvik的指令计数,提高了翻译速度。
当Android启动时,Dalvik VM 监视所有的程序(APK),并且创建依存关系树,为每个程序优化代码并存储在Dalvik缓存中。Dalvik第一次加载后会生成Cache文件,以提供下次快速加载,所以第一次会很慢。
Dalvik解释器采用预先算好的Goto地址,每个指令对内存的访问都在字节边界上对齐。这样可以节省一个指令后进行查表的时间。为了强化功能, Dalvik还提供了快速翻译器(Fast Interpreter)。
性能基于堆栈的机器与基于寄存器的机器谁更有优势一直是个争论不休的话题。
一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。这种差异主要是VM机对的操作码调度造成的,它们往往比其他的因素昂贵,比如说及时汇编。
然而,年,在Oracle公司(Java技术的拥有者)嵌入式设备上的标准非图形化性能测试表明,Android 2.2(最初的版本包括一个即时编译器)比Java SE嵌入式设备(两者都基于 Java SE 6)慢2-3倍。
类库Dalvik虚拟机既不支持Java SE 也不支持Java ME类库(如:Java类,AWT和Swing都不支持)。相反,它使用自己建立的类库(Apache Harmony Java的一个子集)。
其他许可与专利
Dalvik是基于Apache License 2.0发布的。Google说Dalvik是一个清洁室(clean room)的实现,而不是一个在标准Java运行环境的改进,这意味着它不继承标准版本的或开源的Java运行环境的版权许可限制。关于这一点,Oracle和一些专家还在讨论中。
手机虚拟机型app推荐,手机版安卓虚拟机哪个最好用。
手机版安卓虚拟机哪个最好用
已于年4月收购Sun(Sun Microsystems)的Oracle获得了Java的专利,在年8月日起诉Google侵犯其版权和专利。Oracle声明,Google在开发Android当中直接并且多次侵犯关于Java的知识产权。在五月,陪审团认为Google没有侵犯Oracle的专利,法官认定Google所使用的Java APIs没有版权。双方同意零美元法定赔偿的9行复制代码(9 lines of copied code)。
非Android平台
年,Myriad Group软件公司公布了除了android以外一个新的Dalvik虚拟机平台端口“Alien Dalvik”。
以上就是手机版安卓虚拟机哪个最好用 手机虚拟机型app推荐的全面方法讲解,希望为您起一个抛砖引玉袋作用,能解决您生活中的问题吧。
2024-11-28 06:57
2024-11-28 06:15
2024-11-28 06:13
2024-11-28 06:07
2024-11-28 05:52
2024-11-28 05:44