Tagged: 性能

0

移动APP性能优化的建议

移动手机的发明使得人们可以在很远的距离通过无线网络进行交流。用户很开心能够使用各种各样的网络和世界相连接。 慢慢的,每个人的口袋中都装了一个移动手机。 随着时间的推移,有很多发明都在影响着手机的技术,这也使得用户的使用更加便捷。 现如今,移动手机已经发展到有很多应用来协助我们的日常生活。事实上,我们甚至无法想象没有手机的生活。 为什么移动APP的优化是必要的 移动手机最初是用来为什么远距离通信的,而现如今,他已经演变成任何时候,任何地点都可以通过几个点击来做任何事情。 从预订出租车到订购你最喜欢餐厅的食品,移动APP已经使得我们生活变得更加方便和快捷。 当这些APP在我们生活中所起的作用越来越大时,他们的性能也越来越重要了。这也是为什么我们说移动APP性能的优化是有必要的。 想象一下,你已经很饿了,然后你拿起手机准备到你最喜欢的餐厅订购食物,然而,你的APP却不能正确工作了。 而结果是,你没有能够下单,你会再使用这个APP吗?我想不会了,对吧?所以,当被问到为什么改进APP的性能很重要的时候,我想答案就是保持用户不流失。 更精确地说,移动APP就是用来作为用户和服务提供商指教交流的平台,只有他们能够正常交流,你才有机会留住他们。 因此,有一个更好的交流平台必然会改进用户的保有率。 有哪些因素影响移动APP的优化? 当一个开发者决定优化移动APP的时候,有很多因素需要他们注意: 1. 用户的期待 当你开发一个APP的时候,想一下你或者你的客户想服务的用户。 因此,用户才是我们开发的最重要的因素。 当使用APP的时候,用户希望有一个很方便的使用接口,并且APP的访问速度很稳定。在最初开发APP的时候,我们也需要记住这一点。 2. 适应性 当用户使用APP的时候,其实是没有固定地点和时间的,他们有可能是在家里使用,也有可能是在外面使用。 然后,蜂窝移动网络的覆盖并不总是一样。因此,作为一个应用开发者,你需要保证你的APP能够适应不同的网络环境。 3. 用户流失 记住,假如用户在使用你APP的时候不开心,那么他们是不会再回来的。把这个记在心里,然后再去开发APP。当你的客户丢失了最终用户之后,这些用户不会再回来,你的客户也同样会离开。所以,请做好心里准备。 当你的移动APP和用户的期待是一直的,那么他们会在网上给你很好的反馈和正面的评论。 怎样优化APP的性能 移动APP是你的商业向用户提供的一个方便的平台,他们只需要几个点击就可以访问你的服务。 1. 关注于用户端的接口 一个用户接口不是说你的应用在屏幕上有多色彩斑斓。而是你的用户使用他有多方便。 作为一个用户,你希望你的移动应用有些什么?进行分析,并记下这些用点,你就会得到想要的答案。 当然,应用的美观也是很重要的一个方面,这个是不能忽略和否认的。然而,更重要的是导航和可浏览性。...

0

Java应用性能测试之堆内存

每一个性能工程师都需要知道Java中内存是如何工作的吗?假如你想完全解决性能瓶颈的话,我的答案是“必须的”。Java的性能管理对每一个性能工程师以及Java开发者来说都是一个梦魇,但同时又是写好Java应用必不可少的一部分。 这是一个申请新的对象和清除不使用对象(垃圾回收)的过程。Java有自动的内存管理,在后台有自动运行的垃圾回收机制来回收不使用的对象并释放内存。假如没有足够的知识和经验来了解JVM和垃圾回收是如何工作的,不知道Java的内存是如何创建的,我们工程师在执行Java应用程序的时候就很难发现对应的瓶颈是在哪里。 当分析性能瓶颈的时候,理解Java内存模块的运行是一个技术活。在我查阅了很多博客,以及结合我自身的工作经验来看,趟过了很多工作上的坑之后,慢慢理解了JVM各个部分都是如何工作的。当我开始做性能测试的时候,根本不知道什么是Java的堆,我甚至不关注Java中对象都是如何创建的,更不用说GC是如何把不同类型的不使用的对象释放的。 在我开始做Java性能测试的时候,我遇到了好几个内存相关的错误,比如 java.lang.OutOfMemoryError,也就是在那时,我开始了解Java性能测试中JVM堆和栈所扮演的不同角色。当你想要获得一些性能相关的工作时,很多公司和客户都会检查你对Java开发和Java性能调试上面的专业度,所以理解Java中内存是如何申请的是非常重要的,它可以让你写出高性能的应用,再也不会出现诸如OutOfMemoryError或者Memory Leaks的错误。 每一个性能工程师在调试JVM性能问题时都需要理解Java的性能管理内部是如何工作的。我们所创建一切,比如类,方法,对象,变量其实在JVM中都是内存。比如,我们创建一个局部变量,一个全局变量或者不同的类对象,他们都是存储在JVM堆内存中。 JVM中有很大的内存,它被分成了两大部分,一个是堆内存另一个是栈内存。首先,我们从堆内存开始来分析可能的读写内存问题。堆内存在Java中的定位已经目标是什么,这大概是每一个性能测试工程师中心中的疑问。 对所有的性能问题来说,这是Java程序中非常关键的部分。其实有很多不同的模式,方法,资源以及技巧有关堆内存,我们可以用之来优化Java程序。 堆内存 关于Java中堆内存有很多图表都对之进行了描述。每一个性能工程师都需要理解PermGen和Metaspace之间的区别,我们可以从下面的图中粗略了解一二: 堆内存被分为两代,一代是YOUNG,一代是OLD。YOUNG这一代的开始部分我们称之为EDEN空间,紧接着其后的第二部分称之为SURVIVOR,它有SURVIVOR0以及SURVIVOR1组成。现在我们来理解YOUNG每个部分的目的。无论何时,当我们创建一个新的对象时,他们都首先存放在EDEN空间。JVM中有一个自动的内存管理功能称之为垃圾回收(这里就不做详细介绍了)。 假如应用非常重创建了成百上千的对象,EDEN的内存就会被这些对象占满,这时候垃圾回收机制就会运行,把不使用或者没有引用的对象删除了,这个过程就称之为Minor GC。这个Minor GC会把所有的还存活的对象移动到SURVIVOR内存空间。Minor GC会自动在YOUNG中运行并释放内存空间。Minor GC运行的周期很短并且速度很快。 不同的类可能会创建很多对象,因此当对象的数目增大时,EDEN空间的内存也会增加。假设现在有GC1, GC2, GC3一直到GCN在运行(他们是由JVM自动调用垃圾回收操作创建的),他们会不停地检查不同的对象,并把他们立即转移到SURVIVOR内存中。 YOUNG中存活的对象会被转移到OLD中,当OLD也满的时候,Major GC就会启动。那什么时候Major GC会被启动呢?当OLD中内存完全满了的时候,Major GC就会启动。Major GC很长时候才会发生一次。当我们开发Java应用和Java自动框架的时候,假如程序员创建了很多的对象,那这时候就需要小心YOUNG和OLD这两个不同的概念了。 程序员不应该创建任何没有必要的对象,假如这种现象真的存在,那么垃圾回收应当在任务结束的时候即使销毁他们。Minor GC主要在YOUNG上运行,而Major GC则运行在OLD上。比如,你使用Amazon或者Walmart,我们知道将会有很多请求或者访问到这些页面,并且我们看到了超时的异常伴随着高的访问量。通常来说,在这种线上的商务网站,超时的异常一般是由于Major GC使用了大量的内存去销毁对象,从而使用相应的CPU以及内存的使用非常高。 这也表明了一些特定的类创建了太多了的对象。这种情况下,Major GC将会不停试图销毁不使用的对象。Major GC相比于Minor GC使用的时间会更长。 PermGen(Permanent...