正则表达式和Python中正则的使用

正则表达式的概念和用法

多练习,多使用,才能熟练掌握正则表达式

参考链接

######基本概念
在编写处理字符串的程序或者网页时,需要查找某些复杂规则的字符串。
正则表达式: 描述这些规则的工具

####Python 中正则的使用

查看更多

分享到 评论

相册效果页面

7.27晚上花了半个小时 百度google没解决

7.28上午stack overflow, python3.5操作注册表库_winreg改变winreg,一次性解决


结论:百度不靠谱,Google大法好

分享到 评论

Android避免OOM(内存优化)

Android内存优化是性能优化很重要的一部分,而如何避免OOM又是内存优化的核心。

Android内存管理机制

android官网有一篇文章

Android是如何管理应用的进程与内存分配
Android系统的Dalvik虚拟机扮演了内存垃圾自动回收的角色。

OOM介绍(out of memory 内存溢出)

Android和java中都会出现由于不良代码引起的内存泄露,为了使Android应用程序能够快速高效的运行,Android每个应用程序都会有专门Dalvik虚拟机实例来运行,也就是每个程序都在属于自己的进程中运行。
这样,某个应用程序内存泄露仅仅只会使自己进程被kill掉不会影响其他进程(如果是system_process等系统进程出现问题,就会造成系统重启),另一方面,系统为每一个应用程序分配了不同的内存上限,如果超过这个上限被视为内存泄露,从而被kill掉。
Dalvik Heap size因不同设备的RAM不同而有所差异,应用占用内存接近这个阀值,在尝试分配内存就会引起outofmemoryError的错误。

出现OOM有几种情况:

  1. 加载对象过大
  2. 相应资源过多,来不及加载。

解决这些问题,有:

  1. 内存引用上做一些处理,常用的有软引用。
  2. 内存中加载图片直接在内存中做处理(如边界压缩)
    这个Glide\Fresco 图片框架可能封装好了
    3.动态回收内存
    4.优化Delivk虚拟机的堆内存分配
    5.自定义堆内存大小

    共享内存

    Android应用程序的进程都是从Zygote的进程fork出来的。Zygote进程在系统启动并载入通用的framework代码和资源后启动。一个新的应用程序启动,系统就会从Zygote中fork出来一个新的进程,在新的进程中加载并允许应用程序的代码。这使得大多数RAM pages被分配给framework的代码,并且RAM资源能够在应用的所有进程之间共享。

大多数static 数据被mmapped到一个进程中,这样使得同样的数据在进程之间能够共享,而且在需要的时候能paged out.常见static 数据包括Dalvik code ,app resourecs,so 文件等。

大多数情况下,Android通过显示的方式分配共享内存区域(例如ashmem或gralloc)来实现动态RAM区域能够在不同进程之间进行共享的机制。比如,Window Surface在APP和Screen Composition之间使用共享的内存,
Cursor Buffers在Content Provider与Clients之间共享内存。

分配与回收内存

  • 每个进程的Dalvik heap都反应了使用内存的占用范围,(Dalvik Heap Size),他可以根据需要进行增长,但是系统有一个上限。
  • HeapSize跟实际的物理内存大小是不对等的,PSS(proportional Set Size)记录了应用程序自身占用以及和其他进程共享的内容。
  • Android不会对heap空闲区域进行做碎片整理。系统仅仅在新的内存分配之前判断Heap的尾端剩余空间是否足够,不够就会触发gc操作,从而腾出更多空闲的内存空间。gc操作(garbage collection)也就是所谓的垃圾回收,Android在适当时候触发gc操作,将一些不再使用的对象回收,在Android高级系统针对Heap空间有一个Generational Heap Memory的模型,最近分配的对象在放在young generation区域,当停留一段时间,这个对象会被移动到old generation中,最后在移动到permanent generation区域中。系统会根据内存中不同的内存数据类型进行gc操作,young generation区域的对象更容易被销毁,而且gc操作的速度比old generation的速度要快,时间更短。
    每个generation的内存区域都有固定的大小,随着新的对象陆续被分配到此区域,当这些对象的大小快达到阀门值时,就会触发gc操作。通常情况下,gc操作发生时,所有线程都是暂停的。
    如何查看本机heap size:
    ActivityManager manager=(Activity)getSystemService(Context.ACTIVITY_SERVICE); int heapsize=manager.getMemoryClass();

应用切换操作

Android系统不会再用户切换应用的时候进行交换内存的操作,而是把不包含Foreground组件的应用进程放到LRUCache中,比如用户启动一个应用,系统会为它创建一个进程,但是当用户离开这个应用,此进程不会背立即销毁而是会放到一个Cache中,当用户切换回来够快速的恢复。

发生OOM的条件

通过不同的内存分配方式对不同的对象(bitmap,etc)进行操作因Android版本差异发生变化。
4.0以上,废除了external的计数器,类似bitmap的分配改到dalvik的Java heap(堆)中申请,只要allocated+新分配的内存>=getMemoryClass()就会发生OOM。(在AS memory monitor查看内存中Dalvik Heap的实时变化)

如何避免OOM

减少OOM的第一步就是要尽量减少新分配出来的对象占用内存的大小,尽量使用更加轻量的对象。

查看更多

分享到 评论

美团大众点评大咖秀(2016.6.19)

我去听了半天课

###git add详解
git add. 添加所有文件
git add -u 将所有修改或删除的文件添加到索引库
git add -i 查看所有修改或者删除但是没有被提交的文件

美团IOS工程师(北航)
建议

查看更多

分享到 评论