虚拟机

JAVA内存泄漏——内存泄漏原因和内存泄漏检测工具(zt)

元气小坏坏 提交于 2021-02-17 23:04:06
摘要   虽然Java虚拟机(JVM)及其垃圾收集器(garbage collector,GC)负责管理大多数的内存任务,Java软件程序中还是有可能出现内存泄漏。实际上,这在大型项目中是一个常见的问题。避免内存泄漏的第一步是要弄清楚它是如何发生的。本文介绍了编写Java代码的一些常见的内存泄漏陷阱,以及编写不泄漏代码的一些最佳实践。一旦发生了内存泄漏,要指出造成泄漏的代码是非常困难的。因此本文还介绍了一种新工具,用来诊断泄漏并指出根本原因。该工具的开销非常小,因此可以使用它来寻找处于生产中的系统的内存泄漏。 垃圾收集器的作用   虽然垃圾收集器处理了大多数内存管理问题,从而使编程人员的生活变得更轻松了,但是编程人员还是可能犯错而导致出现内存问题。简单地说,GC循环地跟踪所有来自“根”对象(堆栈对象、静态对象、JNI句柄指向的对象,诸如此类)的引用,并将所有它所能到达的对象标记为活动的。程序只可以操纵这些对象;其他的对象都被删除了。因为GC使程序不可能到达已被删除的对象,这么做就是安全的。   虽然内存管理可以说是自动化的,但是这并不能使编程人员免受思考内存管理问题之苦。例如,分配(以及释放)内存总会有开销,虽然这种开销对编程人员来说是不可见的。创建了太多对象的程序将会比完成同样的功能而创建的对象却比较少的程序更慢一些(在其他条件相同的情况下)。   而且,与本文更为密切相关的是

Android之Activity生命周期讲解

拜拜、爱过 提交于 2021-01-30 13:46:47
Activity生命周期 维护一个 Activity 的生命周期非常重要,因为 Activity 随时会被系统回收掉。 生命周期: 现在使用者使用智慧型手机,大多已习惯使用多工 (Multi-Task) 的操作系统 ( 如 Window sMobile),可以在用手机听音乐的同时,也执行其他多个程序。同时执行多个程序有它的明显好处,但是也有它的严重的缺点。每多执行一个应用程序,就会多耗费一些系统记忆体 。而手机里的记忆体是相当有限的。当同时执行的程序过多,或是关闭的程序没有正确释放掉记忆体,执行系统时就会觉得越来越慢,甚至不 稳定。为了解决这个问题, Android 引入了一个新的机制 -- 生命周期 (LifeCycle) 。 行程: 应用程序(一个个Activity )执行的状态称为行程(process) 。在 Android 操作系统 中 ,每个应用程序都是一个行程。 Android 系统平台 ( 准确的说是 Dalvik 虚拟机 ) 会维护一个唯一的 Activity 历史记录堆叠,并从旁观察每个应用程序行程。系统平台会依照系统的记 忆体状况,与 Activity 的使用状态,来管理记忆体的使用。Activity 类别除了负责运行程序流程,与操作界面元件之外,最重要的,就是它提供 了开发者控制行程生命周期的函式。我们已经相当习惯在 OnCreate (建立行程时的行为 )

新一批电子商务解决方案和企业管理应用加入 VM Depot 中国站点

做~自己de王妃 提交于 2021-01-05 07:48:55
VM Depot 登陆中国已有三个月的时间。近日,我们非常高兴地看到另一批镜像正不断加载到库中。感谢来自社区的大力支持,这些新虚拟机镜像所封装的应用程序着实值得让我们细细品味。 //电子商务平台助力您建设网店// 大约有 6 个最近更新的电子商务程序包已经登陆 VM Depot。 这不仅囊括了全球知名的 Magento、OFBiz 等程序包,同时也涵盖了一些流行的本地解决方案,如 phpB2B、天狼星等等。其中应用不仅可以实现常规的 B2C 网店,更有针对行业的解决方案,比如酒店预订系统等等。 值得一提的是,如果您对在灵活且可扩展的平台上运营网店感兴趣, Magento 虚拟机 可能会对您快速上手有所帮助。 特色虚拟机镜像: Magento 灵活创建丰富的桌面到移动消费者体验,灵活定制适合您业务的后端工作流。 提供数以百计的扩展,以及可添加更多功能并集成其他最佳组合企业系统的开放架构。 来自全球的合作伙伴以及开发者生态系统,帮助您快速实施解决方案。 //开源的管理应用程序 – ERP、CRM 及 HRM// 越来越多的开源企业管理软件选正加盟 VM Depot! 您可能已经非常兴奋地看到列表中包含了很多流行的开源企业管理应用,如 SugarCRM 、 Orange HRM 、 Odoo (Open ERP) 等等!显而易见,这为 IT 从业人员和社区开发者尝试并学习领先的企业应用

java的锁机制

本小妞迷上赌 提交于 2020-12-08 08:32:40
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的 权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻 塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他 在锁池中等待的某个线程就可以拿到锁执行同步代码了。这样就保证了同步代码在统一时刻只有一个线程在执行。 众所周知,在Java多线程编程中,一个非常重要的方面就是线程的同步问题。 关于线程的同步,一般有以下解决方法: 1. 在需要同步的方法的方法签名中加入synchronized关键字。 2. 使用synchronized块对需要进行同步的代码段进行同步。 3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。 另外,为了解决多个线程对同一变量进行访问时可能发生的安全性问题,我们不仅可以采用同步机制,更可以通过JDK 1.2中加入的ThreadLocal来保证更好的并发性。 本篇中,将详细的讨论Java多线程同步机制,并对ThreadLocal做出探讨。 大致的目录结构如下: 一、线程的先来后到——问题的提出:为什么要有多线程同步?Java多线程同步的机制是什么? 二

Cloud Engine:大杀器如何炼成

可紊 提交于 2020-05-08 19:58:53
郑昀 创建于2016/6/18 最后更新于2016/6/19 点击查看我的《 如何从零搭建一个技术平台 》,这是一个系列。转载时请注明“转载自旁观者-博客园”或者给出本文的原始链接。 本文档适用人员:技术人员 何谓 ACP? 阿里协作平台 是也。 自动化测试、自动化构建、自动化运维、环境维护、资源申请和释放、虚拟机集群、容器集群……对于一支庞大的技术团队,这些名词术语意味着生产效率,意味着快速迭代,意味着研发、测试、运维 All in,当然也可能意味着混乱,有操不完的心,有维护不完的事,工程越多,并行项目越多,麻烦越大。 去年年底,我们的一支小分队与支付宝一起并肩作战了三个月,近距离观察了他们的研发协作和应用发布过程。回来后,志全、老白、明骏给大家分享了所见所闻,我们试图从中找到云纵研发协作和持续集成的未来之路。不久之后,田志全明确了切入方式,云纵 CloudEngine 开始开发。 我们先来看一眼 CloudEngine 的庐山真面目: 图0,云纵 CloudEngine 首页-管理员身份 下面先介绍一下蚂蚁金服的玩法。 蚂蚁金服的研发协作是怎么运转的 一套精密的体系 如下图1所示,我们可以把庞大的蚂蚁金服研发支撑体系浓缩为这四个平台: ACP,阿里协作平台 九州资源管控平台 AQC,蚂蚁质量基础设施平台 Zpass,蚂蚁集团发布部署平台 ACP 是总驱动方。九州,AQC

虚拟机中openSUSE安装软件问题的解决

心不动则不痛 提交于 2020-04-12 20:22:59
虚拟机中安装完openSUSE 12.1后想安装个软件试试,于是我在terminal中敲入zypper install emacs 结果出现如下错误: Failed to mount cd:///?devices=/dev/disk/by-id/ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001 on /var/adm/mount/AP_0x00000001: Mounting media failed (mount: no medium found on /dev/sr0) Please insert medium [openSUSE-12.1-12.1-1.4] #1 and type 'y' to continue or 'n' to cancel the operation. [yes/no] (no): 看看信息的意思好像是要我们插入DVD, 于是进vm的setting,在CD/DVD(IDE)标签选项中,指定openSUSE的iso镜像,然后将connected选上。 问题就解决了。 这个时候zypper install emacs就很顺利的成功了。 来源: oschina 链接: https://my.oschina.net/u/158589/blog/64306

磁盘调配策略--vsphere

走远了吗. 提交于 2020-04-08 09:53:21
厚配备延迟清零(默认):创建磁盘的空间将占用物理机磁盘中固定空间,不再被其它虚拟机使用 厚配置立即清零:创建磁盘的空间将占用物理机磁盘中固定空间,主要用于故障切换FT 精简配置:虚拟机磁盘仅占用保留当前文件所需的空间,其它空间可以继续提供其它虚拟机使用 许多虚拟机配置精简配置虚拟磁盘,将会发生数据存储过量分配现象 精简型:做实验用,部署大型网络不建议这么做,分配500G,可能到400G就写不进去了 来源: https://www.cnblogs.com/pyzyliuyan/p/12657762.html

[转帖]JVM源码分析之安全点safepoint

懵懂的女人 提交于 2020-04-08 08:52:36
JVM源码分析之安全点safepoint https://www.jianshu.com/p/c79c5e02ebe6 原来是这个意思.. 简书 占小狼 转载请注明原创出处,谢谢! 上周有幸参加了一次关于JVM的小范围分享会,听完R大对虚拟机C2编译器的讲解,我的膝盖一直是肿的,能记住的实在有点少,能听进去也不多 1、什么时候进行C2编译,如何进行C2编译(这个实在太复杂) 2、C2编译的时候,是对整个方法体进行编译,而不是某个方法段 3、JVM中的safepoint 一直都知道,当发生GC时,正在执行Java code的线程必须全部停下来,才可以进行垃圾回收,这就是熟悉的STW(stop the world),但是STW的背后实现原理,比如这些线程如何暂停、又如何恢复?就比较疑惑了。 然而这一切的一切,都涉及到一个概念safepoint,openjdk的实现位于 openjdk/hotspot/src/share/vm/runtime/safepoint.cpp 什么是safepoint safepoint可以用在不同地方,比如GC、Deoptimization,在Hotspot VM中,GC safepoint比较常见,需要一个数据结构记录每个线程的调用栈、寄存器等一些重要的数据区域里什么地方包含了GC管理的指针。 从线程角度看

Linux性能之CPU使用率

China☆狼群 提交于 2020-04-08 00:40:20
CPU使用率 Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息 proc - process information pseudo-file system 查询 man proc 关键指标常用参数 user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。 nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。 system(通常缩写为 sys),代表内核态 CPU 时间。 idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。 iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。 irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。 softirq(通常缩写为 si),代表处理软中断的 CPU 时间。 steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。 guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的

【PHP源码】PHP 函数调用

≡放荡痞女 提交于 2020-04-07 20:46:29
想法 我以前对于 C 语言的印象是有很强的确定性,而 PHP 在执行的时候会被翻译为 C 语言执行,所以一直很好奇 PHP 怎么调用底层函数。 换句话说就是已知函数名字的情况下如何调用 C 语言中对应名字的函数? 解决这个问题前,首先根据过往的经验做出假设,然后再去验证。 之前在写《用 C 语言实现面向对象》的时候,就意识到使用 void 指针实现很多功能,包括指向任意的函数。接着在写《PHP 数组底层实现》的时候,了解了 HashTable 的实现,即在 C 语言层面通过字符串 key 找到任意类型值。 现在把两者结合起来,是否就能解决以上问题了?比如说把函数名作为 HashTable 的 key,函数指针作为 HashTable 的 value,这样就可以通过函数名获取函数指针来调用函数了。 接下来通过查看 PHP 的源码来看这个假设与真实情况有多少差距。 总体分为三个步骤: 从 PHP 层进入 C 语言层 找到字符串函数名与函数的关系 函数的调用 注:这篇博客的源码对应的版本是 PHP 7.4.4 。 https://github.com/php/php-src/tree/php-7.4.4 从 PHP 层进入 C 语言层 首先要找到 C 语言层调用函数的地方。怎么找? 经常使用 PHP 的同学看到前面的问题描述很容易联想到 PHP