首页 文章 精选 留言 我的

精选列表

搜索[智能推荐],共10009篇文章
优秀的个人博客,低调大师

ios实例开发精品文章推荐(8.14)

1、iOS源码:俄罗斯方块 实现简单的俄罗斯方块游戏。 <ignore_js_op> 下载地址:http://www.apkbus.com/android-124628-1-1.html2、iOS源码:公交查询系统 一个简单的公交查询系统。可分线路查询、站站查询,也有收藏、地图信息、系统设置几大功能。 <ignore_js_op> 下载地址:http://www.apkbus.com/android-123467-1-1.html3、iOS源码:日历--Popup Calendar 在界面各个位置的弹出视图中加入日历。 <ignore_js_op> 下载地址:http://www.apkbus.com/android-123397-1-1.html4、iOS源码:弹出视图--UIAlerVIew 管理模块 发一个项目当中管理UIAlerView,相当好用的模块。 可以无缝整合到当前项目中,不需要其他依赖。 <ignore_js_op> 下载地址:http://www.apkbus.com/android-125359-1-1.html5、自定义UISegmentedControl 效果图: <ignore_js_op> 下载地址:http://www.apkbus.com/android-137920-1-1.html6、自定义标签栏 以前写过一篇文章:自定义标签栏,这篇文章提供了另一种自定义标签栏的方式。 <ignore_js_op> 下载地址:http://www.apkbus.com/android-137934-1-1.html7、自定义多行多列视图 <ignore_js_op> 下载地址:http://www.apkbus.com/android-137967-1-1.html8、利用ReMail构建iOS上的邮件收发软件 运行后的首页截图: <ignore_js_op> 下载地址:http://www.apkbus.com/android-137963-1-1.html------------------------------------------------------------------------------------------------------------------------------------- iphone 获取手机当前内存大小 http://www.apkbus.com/android-137918-1-1.html UIAlertView的使用方法 http://www.apkbus.com/android-137919-1-1.html 自定义UISegmentedControl http://www.apkbus.com/android-137920-1-1.html 介绍NSLog的使用 http://www.apkbus.com/android-137922-1-1.html Xcode 4.3+ NSLog中文不输出Bug及解决方法 http://www.apkbus.com/android-137923-1-1.html 动态调整UITableViewCell高度的实现方法 http://www.apkbus.com/android-137925-1-1.html 邮件发送异常信息 http://www.apkbus.com/android-137927-1-1.html 给iPhone程序添加欢迎界面 http://www.apkbus.com/android-137928-1-1.html 解析JSON http://www.apkbus.com/android-137932-1-1.html 将AdMob加入iOS应用中 http://www.apkbus.com/android-137933-1-1.html 自定义标签栏 http://www.apkbus.com/android-137934-1-1.html ios 设置图片为背景(小图片铺满) http://www.apkbus.com/android-137936-1-1.html Objective-C中常量的定义和retainCount管理 http://www.apkbus.com/android-137937-1-1.html IOS 气泡视图的方式 http://www.apkbus.com/android-137940-1-1.html ios开发self的用法 http://www.apkbus.com/android-137942-1-1.html viewDidUnload 和 dealloc 的区别 http://www.apkbus.com/android-137944-1-1.html loadView和viewDidLoad,即view的生命周期浅析 http://www.apkbus.com/android-137945-1-1.html 简单作图 http://www.apkbus.com/android-137946-1-1.html 读取照片的Exif信息 http://www.apkbus.com/android-137948-1-1.html UIScrollView的简单例子 http://www.apkbus.com/android-137950-1-1.html iPhone系统常用文件夹位置 http://www.apkbus.com/android-137952-1-1.html iOS开发中常用的几个功能代码 http://www.apkbus.com/android-137955-1-1.html iOS工程中的info.plist文件的完整研究 http://www.apkbus.com/android-137956-1-1.html NSRange用法简介 http://www.apkbus.com/android-137957-1-1.html 限制UITextField的输入只为数字的方法 http://www.apkbus.com/android-137962-1-1.html 利用ReMail构建iOS上的邮件收发软件 http://www.apkbus.com/android-137963-1-1.html 字符串加密 http://www.apkbus.com/android-137964-1-1.html rss解析 http://www.apkbus.com/android-137965-1-1.html inputAccessoryView的使用 http://www.apkbus.com/android-137966-1-1.html 自定义多行多列视图 http://www.apkbus.com/android-137967-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3257370.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios实例开发精品文章推荐(7.23)

---------------------------------------------------------------------------------------------------------------------------------------------------------------iOS 开发小技巧(一) http://www.apkbus.com/android-128081-1-1.htmliOS 开发小技巧(二) http://www.apkbus.com/android-128083-1-1.htmliOS 开发小技巧(三) http://www.apkbus.com/android-128091-1-1.html对比iOS中的四种数据存储 http://www.apkbus.com/android-128086-1-1.htmlIOS导航栏的创建方法 http://www.apkbus.com/android-128087-1-1.htmliOS 绘制UIImage的方式 http://www.apkbus.com/android-128088-1-1.htmlobject-c 单例模式(包括ARC) http://www.apkbus.com/android-128097-1-1.htmliOS中 在ARC环境下使用NSException要注意的问题 http://www.apkbus.com/android-128106-1-1.html关于在IOS环境下进行视频通讯开发 http://www.apkbus.com/android-128107-1-1.htmlbundle programing guide http://www.apkbus.com/android-128110-1-1.html一个app应用视图载入、卸载过程 http://www.apkbus.com/android-128113-1-1.htmlUIApplication http://www.apkbus.com/android-128118-1-1.htmliOS开发注意细节 http://www.apkbus.com/android-128120-1-1.htmlBlock开发浅谈 http://www.apkbus.com/android-128123-1-1.htmltableView 选中时的背景颜色设置 http://www.apkbus.com/android-128129-1-1.htmlXcode初始化设置 http://www.apkbus.com/android-128134-1-1.html多态和动态绑定、多态和异常 http://www.apkbus.com/android-128135-1-1.htmliOS的一些系统信息 手机的型号,系统版本,软件名称,软件版本 http://www.apkbus.com/android-128136-1-1.html浅谈ios中的json解析(转载) http://www.apkbus.com/android-128138-1-1.htmlUITableView 下拉刷新demo http://www.apkbus.com/android-128139-1-1.html类的声明和对象的创建、@property属性和点语法、类的继承 http://www.apkbus.com/android-128141-1-1.htmlif条件和for循环语句、while、do..while、switch语法 http://www.apkbus.com/android-128144-1-1.htmlOC变量和基本数据类型、数据类型转换、运算符与表达式 http://www.apkbus.com/android-128145-1-1.htmlios NSObject延迟执行某个方法 http://www.apkbus.com/android-128148-1-1.htmlios Crash Log 分析汇总 http://www.apkbus.com/android-128149-1-1.htmlASIHTTPRequest类库的简单介绍 http://www.apkbus.com/android-128153-1-1.htmlNSAutoReleasePool使用中drain和release的区别 http://www.apkbus.com/android-128154-1-1.htmlWEBAPP开发技巧总结 http://www.apkbus.com/android-128155-1-1.htmlios NSString 常用方法 http://www.apkbus.com/android-128156-1-1.htmlUITextField抖动效果 http://www.apkbus.com/android-128160-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3209027.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios实例开发精品文章推荐(8.5)

IOS基础知识记录 IOS基础知识记录一 http://www.apkbus.com/android-131902-1-1.html IOS基础知识记录二 http://www.apkbus.com/android-131903-1-1.html IOS基础知识记录三(modal模态切换) http://www.apkbus.com/android-131905-1-1.html IOS基础知识记录四(Master-Detail Application) http://www.apkbus.com/android-131906-1-1.html IOS基础知识记录五(简单手电筒) http://www.apkbus.com/android-131907-1-1.html IOS基础知识记录六(读写文件) http://www.apkbus.com/android-131908-1-1.html IOS基础知识记录七(iphone手机横屏、竖屏) http://www.apkbus.com/android-131910-1-1.html IOS基础知识记录八(手机相机或者图片库) http://www.apkbus.com/android-131914-1-1.html IOS基础知识记录九(调用AddressBook地址博信息) http://www.apkbus.com/android-131916-1-1.html IOS基础知识记录十(调用Google Map) http://www.apkbus.com/android-131918-1-1.html --------------------------------------------------------------------------------------------------------------- Android、iPhone和Java三个平台一致的加密工具 http://www.apkbus.com/android-131888-1-1.html NSString的扩展类 http://www.apkbus.com/android-131889-1-1.html iOS切图 http://www.apkbus.com/android-131890-1-1.html 关于Object-C 底层实现self isa 的理解 http://www.apkbus.com/android-131893-1-1.html Git忽略文件 http://www.apkbus.com/android-131894-1-1.html 输出UIView的详细信息 http://www.apkbus.com/android-131895-1-1.html 自定义UIProgressBar http://www.apkbus.com/android-131897-1-1.html Urban Airship在iOS中的应用 http://www.apkbus.com/android-131899-1-1.html Xcode4中快速进行Doxygen文档注释 http://www.apkbus.com/android-131900-1-1.html 分享一个文档完整的超棒iOS开发框架(Frameworks) - NimbusKit http://www.apkbus.com/android-131931-1-1.html iphone晃动检测的两种方式 http://www.apkbus.com/android-131938-1-1.html IOS开发之百度地图API应用 http://www.apkbus.com/android-131939-1-1.html MHLazyTableImages异步下载图片 http://www.apkbus.com/android-131940-1-1.html EGOImageView异步下载图片 http://www.apkbus.com/android-131942-1-1.html 自定义UIImagePickerController的拍照页面 http://www.apkbus.com/android-131943-1-1.html 文件异步下载 http://www.apkbus.com/android-131944-1-1.html 将图片放大缩小的想要的尺寸 http://www.apkbus.com/android-131945-1-1.html iOS开发细节记录汇总 http://www.apkbus.com/android-131946-1-1.html ios 增加对点击图片的响应 http://www.apkbus.com/android-131947-1-1.html UIScrollView(滚动控件)的详细讲解 http://www.apkbus.com/android-131950-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3238358.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios实例开发精品文章推荐(8.13)

提示用户对产品进行评价http://www.apkbus.com/android-137752-1-1.html 设置UILabel和UITextField的Insetshttp://www.apkbus.com/android-137753-1-1.html ios 类似于android Toasthttp://www.apkbus.com/android-137754-1-1.html Objective-C MD5加密字符串http://www.apkbus.com/android-137755-1-1.html ios开发小知识http://www.apkbus.com/android-137769-1-1.html 可伸缩的表视图http://www.apkbus.com/android-137771-1-1.html iphone手机push小应用http://www.apkbus.com/android-137773-1-1.html iOS中的堆(heap)和栈(stack)的理解http://www.apkbus.com/android-137774-1-1.html UIView常用方法http://www.apkbus.com/android-137775-1-1.html 定制自己的风格的 UIBarButtonItemhttp://www.apkbus.com/android-137777-1-1.html iphone中 CoreData 框架的简单解释http://www.apkbus.com/android-137782-1-1.html ios delegate你必须知道的事情http://www.apkbus.com/android-137785-1-1.html iOS中引用计数内存管理机制分析http://www.apkbus.com/android-137788-1-1.html 下拉刷新以及上拉加载更多http://www.apkbus.com/android-137789-1-1.html 下拉刷新的实现http://www.apkbus.com/android-137790-1-1.html iOS中的Soap请求http://www.apkbus.com/android-137792-1-1.html Facebook like button功能的实现http://www.apkbus.com/android-137794-1-1.html NSXMLParser解析XMLhttp://www.apkbus.com/android-137795-1-1.html iOS中创建XMLhttp://www.apkbus.com/android-137796-1-1.html 屏幕旋转,屏幕自适应方向变化http://www.apkbus.com/android-137797-1-1.html ios 数据持久化的三种方式http://www.apkbus.com/android-137799-1-1.html Appcelerator Cloud Push Notification in iPhonehttp://www.apkbus.com/android-137800-1-1.html sliderhttp://www.apkbus.com/android-137801-1-1.html 上拉显示更多数据http://www.apkbus.com/android-137802-1-1.html Xcode4.3.2 SVN配置http://www.apkbus.com/android-137825-1-1.html 浏览器判断http://www.apkbus.com/android-137829-1-1.html UIview需要知道的一些事情:setNeedsDisplay、setNeedsLayouthttp://www.apkbus.com/android-137830-1-1.html iphone消息推送java后台证书生成及测试代码http://www.apkbus.com/android-137832-1-1.html iOS base64http://www.apkbus.com/android-137833-1-1.html 获取当前手机的运营商等信息http://www.apkbus.com/android-137835-1-1.html 分类: ios开发/iphone开发 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3255546.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ios实例开发精品文章推荐(7.22)

UIView 基本方法 UIView的一些基本方法理解:loadView、viewDidLoad、viewDidUnload、viewWillAppear,viewWillDisappear init:方法 在init方法中实例化必要的对象 init方法中初始化ViewController本身 loadView:方法 只调用一次 这是当没有正在使用nib视图页面,子类将会创建自己的自定义视图层。绝不能直接调用。 如果手工维护view,必须重载重写该方法。 当view需要被展示而它却是nil时,viewController会调用该方法。详细》》》》 ---------------------------------------------------------------------------------------------------------------- iphone开源框架和类 http://www.apkbus.com/android-125917-1-1.html iPhone图片拉伸:resizableImageWithCapInsets http://www.apkbus.com/android-125921-1-1.html CGRectInset、CGRectOffset、等对比整理 http://www.apkbus.com/android-125922-1-1.html Git:代码冲突常见解决方法 http://www.apkbus.com/android-125923-1-1.html Object-C动态特性之protocol http://www.apkbus.com/android-125938-1-1.html UITableView分割线样式与颜色 http://www.apkbus.com/android-125945-1-1.html 自定义带下划线文本的UIButton Underlining text in UIButton http://www.apkbus.com/android-125946-1-1.html IOS自动布局XIB和CODE,附代码和PPT http://www.apkbus.com/android-125947-1-1.html IOS为view的隐藏添加动画 http://www.apkbus.com/android-125918-1-1.html 在简体中文键盘输入时出现ios6.0的bug http://www.apkbus.com/android-125948-1-1.html 要多简单有多简单的IOS自动化calabash-ios http://www.apkbus.com/android-125950-1-1.html new 与 alloc/init的区别 http://www.apkbus.com/android-125951-1-1.html iOS中读取照片库 http://www.apkbus.com/android-125928-1-1.html [iOS Dev] UIScrollView的touchesBegan和touchesEnd http://www.apkbus.com/android-125954-1-1.html 设置UITableView不允许滚动 http://www.apkbus.com/android-125956-1-1.html UIView的Animation效果 http://www.apkbus.com/android-125957-1-1.html UITableViewCell的选中时的颜色设置 http://www.apkbus.com/android-125958-1-1.html UITableView 基本使用方法总结 http://www.apkbus.com/android-125961-1-1.html ios uikeyboardtype http://www.apkbus.com/android-125962-1-1.html sqlite 实例教程 IOS下用sqlite打造词典 http://www.apkbus.com/android-125966-1-1.html 关于使用苹果官方地图的一些方法 http://www.apkbus.com/android-125967-1-1.html 自定义带下划线文本的UIButton Underlining text in UIButton http://www.apkbus.com/android-125971-1-1.html ios十六进制和字符串的相互转换 http://www.apkbus.com/android-125992-1-1.html iOS AES加密 PHP解密 http://www.apkbus.com/android-125995-1-1.html 自定义UITableViewCell上的delete按钮 http://www.apkbus.com/android-125996-1-1.html 判断是否是 emoji表情 http://www.apkbus.com/android-125998-1-1.html Object-C动态特性之protocol http://www.apkbus.com/android-126001-1-1.html 全局变量 http://www.apkbus.com/android-126002-1-1.html xcode打包framework http://www.apkbus.com/android-126003-1-1.html ios 单个ViewController支持横屏,其他的全部是竖屏的处理方法 http://www.apkbus.com/android-126004-1-1.html IOS 6 自动布局 入门 http://www.apkbus.com/android-126101-1-1.html 禁用UITabBarController双击事件 http://www.apkbus.com/android-126102-1-1.html IOS字体大小,字号的问题 UIFont http://www.apkbus.com/android-126103-1-1.html IOS 为整个APP设置一个字体,但是不指定字体大小 http://www.apkbus.com/android-126104-1-1.html ios中NSLog输出格式大全 http://www.apkbus.com/android-126105-1-1.html iphone开发图片字体等内容从别的App上面获取的方法 http://www.apkbus.com/android-126106-1-1.html IOS 去掉桌面的快捷方式的图标系统自带的高光效果 http://www.apkbus.com/android-126107-1-1.html file列表查看 http://www.apkbus.com/android-126108-1-1.html ios-时间设置和格式输出 http://www.apkbus.com/android-126109-1-1.html 在ios中对gbk进行base64解码 http://www.apkbus.com/android-126111-1-1.html IOS按钮拖动和点击 http://www.apkbus.com/android-126114-1-1.html iOS中的国际化 http://www.apkbus.com/android-126118-1-1.html Cocos2dx 横屏竖屏 http://www.apkbus.com/android-126119-1-1.html NSDate的常用用法总结 http://www.apkbus.com/android-126123-1-1.html iOS获取WIFI的名称 http://www.apkbus.com/android-126125-1-1.html ios开发-类的"生命周期 http://www.apkbus.com/android-126126-1-1.html BeeFramework 系列二 UISignal篇下 http://www.apkbus.com/android-126129-1-1.html ios FMDB 更新二进制图片数据 http://www.apkbus.com/android-126130-1-1.html BeeFramework 系列一 安装篇(Arc) http://www.apkbus.com/android-126136-1-1.html 设置UITextView的圆角 http://www.apkbus.com/android-126138-1-1.html cocos2d-x 第一个项目 http://www.apkbus.com/android-126139-1-1.html iOS正则表达式[NSScanner scannerWithString:greenString]scanHexInt:&green]; http://www.apkbus.com/android-126143-1-1.html 单例,NSTimer http://www.apkbus.com/android-126145-1-1.html iOS分组排序 http://www.apkbus.com/android-126147-1-1.html iOS中文排序 http://www.apkbus.com/android-126149-1-1.html mac上搭建svn服务器 http://www.apkbus.com/android-126152-1-1.html iOS笔记 http://www.apkbus.com/android-126153-1-1.html iOS中使用 Reachability 检测网络 http://www.apkbus.com/android-126154-1-1.html Creating an iOS and Android Cocos2D-x 2.1.1 hybrid project http://www.apkbus.com/android-126156-1-1.html IOS开发经验总结(二) http://www.apkbus.com/android-126158-1-1.html iOS开发经验总结(一) http://www.apkbus.com/android-126159-1-1.html iOS常用静态库操作命令 http://www.apkbus.com/android-127500-1-1.html ios语音识别功能 http://www.apkbus.com/android-127501-1-1.html IOS 多个tableview的方式 http://www.apkbus.com/android-127502-1-1.html ios 正则表达式 http://www.apkbus.com/android-127503-1-1.html layoutSubviews何时调用的问题 http://www.apkbus.com/android-127504-1-1.html iOS中提交JSON数据 http://www.apkbus.com/android-127505-1-1.html ZBarReaderView屏幕旋转问题 http://www.apkbus.com/android-127506-1-1.html 在iOS中使用ZBar扫描二维码 http://www.apkbus.com/android-127507-1-1.html ios 一些git用的 http://www.apkbus.com/android-127509-1-1.html ios判断程序第一次进入 http://www.apkbus.com/android-127511-1-1.html Objective-C 学习环境搭建Window 版 http://www.apkbus.com/android-127527-1-1.html iphone开源项目list http://www.apkbus.com/android-127528-1-1.html ios 自带的定位。 http://www.apkbus.com/android-127529-1-1.html UIView 基本方法 http://www.apkbus.com/android-127530-1-1.html MBProgressHUD http://www.apkbus.com/android-127531-1-1.html Iphone隐藏和显示TabBar的方法 http://www.apkbus.com/android-127532-1-1.html iOS网络编程-iCloud文档存储编程实例 http://www.apkbus.com/android-127533-1-1.html IOS 读取 .plist 文件 http://www.apkbus.com/android-127535-1-1.html IOS自动登录Demo http://www.apkbus.com/android-127537-1-1.html ios 应用内跳转到系统设置界面的最好写法 http://www.apkbus.com/android-127538-1-1.html UITableView使用 http://www.apkbus.com/android-127539-1-1.html Object-c中的单例模式 http://www.apkbus.com/android-127541-1-1.html IOS键盘监听 http://www.apkbus.com/android-127543-1-1.html ios UIImage缩放 http://www.apkbus.com/android-127544-1-1.html IOS中的UITextField使用大全 http://www.apkbus.com/android-127545-1-1.html AddressBook iOS读取通讯录信息 http://www.apkbus.com/android-127548-1-1.html UISegmentedControl 使用 http://www.apkbus.com/android-127549-1-1.html html5中的video标签在iphone,ipad中播放有何中不同? http://www.apkbus.com/android-127551-1-1.html IOS使用第三方工具(RegexKitLite)实现正则表达式 http://www.apkbus.com/android-127552-1-1.html iOS 绘制直线、矩形、文字的方式 http://www.apkbus.com/android-127554-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3205511.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

日常事件日志监控工具推荐

Windows事件日志文件可以说是一个信息宝库,包含了服务器性能和操作等重要信息。但是定期梳理是一件非常乏味的工作,尤其是当你的数据中心里有不少服务器需要维护的时候。 Windows Server将事件日志进行了分类,包括应用程序、安全和系统类,默认情况下,每台服务器的事件日志文件保存在本地。 市场上有大量的事件日志监控工具,包括免费的和付费的。你要根据自己的需求进行选择。不管选择哪种工具,肯定是希望能够尽可能多地清理和纠正日志文件中的错误。一款合适的,用来进行Windows服务器故障排除和维护的工具是非常有价值的。 这里是一些可供选择的日志文件监控工具,但由于产品规模不尽相同,这里仅作参考。 免费与付费日志监控工具 免费低端产品,可以订阅微软的Windows Event Viewer。你可以将从多台计算机那里搜集到的事件日志文件放到一个中心点以便阅读,你可以应用过滤器,如“错误和警告”。你可以每天检查文件,纠正错误。因为与日志监控一样简单,所以你可能会错过实时的错误报警,过于简单的结果可能会隐藏或者忽略掉某些错误。 Syslog和ELK stack也是免费的工具,但是功能更多更复杂。Syslog是一种工业标准的协议,可用来记录设备的日志。有多种变体,包括builds和add-ons。ELK stack工具包含Elasticsearch、Logstash和Kibana三个开源软件。这些工具都可以搜集和整理来自Windows Event Viewer等工具的日志。你可以从监控事件日志开始,然后收集IIS、SQL等应用日志。 在支付端,两个受欢迎的工具是SolarWinds Log & Event Manager和Splunk。这些产品都位于高端市场,不仅仅是即插即用。 支付或企业版本的事件日志监控工具提供了大量的各种各样的日志信息和提醒,包括Event Viewer日志。但因为过于复杂,通常由一个小型IT团队来维护。 还可以寻找供应商,如Splunk和SolarWinds,它们会为你提供合适的工具,为你的服务器环境提供帮助。 作者:Adam Fowler 翻译:杨旭 来源:51CTO

优秀的个人博客,低调大师

热点推荐:为什么JVM需要GC

社区内有人发起了一个讨论,关于JVM是否一定需要GC?他们认为应用程序的回收目标是构建一个仅用来处理内存分配,而不执行任何真正的内存回收操作的 GC。即仅当可用的 Java 堆耗尽的时候,才进行顺序的 JVM 停顿操作。 首先需要理解为什么需要GC。随着应用程序所应对的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。 社区的需求是尽量减少对应用程序的正常执行干扰,这也是业界目标。Oracle在JDK7时发布G1 GC的目的是为了减少应用程序停顿发生的可能性,让我们通过本文来了解G1 GC所做的工作。 JVM发展历史简介 还记得机器猫吗?他和康夫有一张书桌,书桌的抽屉其实是一个时空穿梭通道,让我们操作机器猫的时空机器,回到1998年。那年的12月8日,第二代Java平台的企业版J2EE正式对外发布。为了配合企业级应用落地,1999年4月27日,Java程序的舞台—Java HotSpot Virtual Machine(以下简称HotSpot )正式对外发布,并从这之后发布的JDK1.3版本开始,HotSpot成为Sun JDK的默认虚拟机。 GC发展历史简介 1999年随JDK1.3.1一起来的是串行方式的Serial GC ,它是第一款GC,并且这只是起点。此后,JDK1.4和J2SE1.3相继发布。2002年2月26日,J2SE1.4发布,Parallel GC 和Concurrent Mark Sweep (CMS)GC跟随JDK1.4.2一起发布,并且Parallel GC在JDK6之后成为HotSpot默认GC。 HotSpot有这么多的垃圾回收器,那么如果有人问,Serial GC、Parallel GC、Concurrent Mark Sweep GC这三个GC有什么不同呢?请记住以下口令: 如果你想要最小化地使用内存和并行开销,请选Serial GC; 如果你想要最大化应用程序的吞吐量,请选Parallel GC; 如果你想要最小化GC的中断或停顿时间,请选CMS GC。 那么问题来了,既然我们已经有了上面三个强大的GC,为什么还要发布Garbage First(G1)GC?原因就在于应用程序所应对的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序正常进行,而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。 为什么名字叫做Garbage First(G1)呢? 因为G1是一个并行回收器,它把堆内存分割为很多不相关的区间(Region),每个区间可以属于老年代或者年轻代,并且每个年龄代区间可以是物理上不连续的。 老年代区间这个设计理念本身是为了服务于并行后台线程,这些线程的主要工作是寻找未被引用的对象。而这样就会产生一种现象,即某些区间的垃圾(未被引用对象)多于其他的区间。 垃圾回收时实则都是需要停下应用程序的,不然就没有办法防治应用程序的干扰 ,然后G1 GC可以集中精力在垃圾最多的区间上,并且只会费一点点时间就可以清空这些区间里的垃圾,腾出完全空闲的区间。 绕来绕去终于明白了,由于这种方式的侧重点在于处理垃圾最多的区间,所以我们给G1一个名字:垃圾优先(Garbage First)。 G1 GC基本思想 G1 GC是一个压缩收集器,它基于回收最大量的垃圾原理进行设计。G1 GC利用递增、并行、独占暂停这些属性,通过拷贝方式完成压缩目标。此外,它也借助并行、多阶段并行标记这些方式来帮助减少标记、重标记、清除暂停的停顿时间,让停顿时间最小化是它的设计目标之一。 G1回收器是在JDK1.7中正式投入使用的全新的垃圾回收器,从长期目标来看,它是为了取代CMS 回收器。G1回收器拥有独特的垃圾回收策略,这和之前提到的回收器截然不同。从分代上看,G1依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden区和Survivor区,但从堆的结构上看,它并不要求整个Eden区、年轻代或者老年代在物理上都是连续。 综合来说,G1使用了全新的分区算法,其特点如下所示: 并行性:G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力; 并发性:G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况; 分代GC:G1依然是一个分代收集器,但是和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代; 空间整理:G1在回收过程中,会进行适当的对象移动,不像CMS只是简单地标记清理对象。在若干次GC后,CMS必须进行一次碎片整理。而G1不同,它每次回收都会有效地复制对象,减少空间碎片,进而提升内部循环速度。 可预见性:由于分区的原因,G1可以只选取部分区域进行内存回收,这样缩小了回收的范围,因此对于全局停顿情况的发生也能得到较好的控制。 随着G1 GC的出现,GC从传统的连续堆内存布局设计,逐渐走向不连续内存块,这是通过引入Region概念实现,也就是说,由一堆不连续的Region组成了堆内存。其实也不能说是不连续的,只是它从传统的物理连续逐渐改变为逻辑上的连续,这是通过Region的动态分配方式实现的,我们可以把一个Region分配给Eden、Survivor、老年代、大对象区间、空闲区间等的任意一个,而不是固定它的作用,因为越是固定,越是呆板。 G1 GC垃圾回收机制 通过市场的力量,不断淘汰旧的行业,把有限的资源让给那些竞争力更强、利润率更高的企业。类似地,硅谷也在不断淘汰过时的人员,从全世界吸收新鲜血液。经过半个多世纪的发展,在硅谷地区便形成只有卓越才能生存的文化。本着这样的理念,GC承担了淘汰垃圾、保存优良资产的任务。 G1 GC在回收暂停阶段会回收最大量的堆内区间(Region),这是它的设计目标,通过回收区间达到回收垃圾的目的。这里只有一个例外情况,这个例外发生在并行标记阶段的清除(Cleanup)步骤,如果G1 GC在清除步骤发现所有的区间都是由可回收垃圾组成的,那么它会立即回收这些区间,并且将这些区间插入到一个基于LinkedList实现的空闲区间队列里,以待后用。因此,释放这些区间并不需要等待下一个垃圾回收中断,它是实时执行的,即清除阶段起到了最后一道把控作用。这是G1 GC和之前的几代GC的一大差别。 G1 GC的垃圾回收循环由三个主要类型组成: 年轻代循环 多步骤并行标记循环 混合收集循环 Full GC 在年轻代回收期,G1 GC暂停应用程序线程,然后从年轻代区间移动存活对象到Survivor区间或者老年区间,也有可能是两个区间都会涉及。对于一个混合回收期,G1 GC从老年区间移动存活对象到空闲区间,这些空闲区间也就成为了老年代的一部分。 G1的区间设计灵感 为了加快GC的回收速度,HotSpot的历代GC都有自己的不同的设计方案,区间概念在软件设计、架构领域并不是一个新名词,关系型数据库、列式数据库最先使用这个概念提升数据存、取速度,软件架构设计时也广泛使用这样的分区概念加快数据交换、计算。 为什么会有区间这个设计想法?大家一定看过电视剧《大宅门》吧?大宅门所描述的北京知名医术世家白家是这本电视剧的主角。白家有三兄弟,没有分家之前,由老爷子一手掌管全家,老爷子看似是个精明人,实质是个糊涂的人,否则也不会弄得后来白家家破人散。白家的三兄弟在没有分家之前,老大一家很老实,老二很懦弱,性格像女人,虽然肚子里明白道理,但是不敢出来做主。老三年轻时混蛋一个,每次出外采购药材都要私吞家里的银两,造成账目混乱。老大为了家庭和睦,一直在私下倒贴银两,让老爷子能够看到一本正常的账目。这样的一家子聚在一起,迟早家庭内部会出现问题,倒不如分家,你也不用算计家里的钱了,分给你,分给你的钱有本事守住,没本事就一直拮据下去吧。这就是最原始的分区(Region)概念。 我们回到技术,看看HBase的RegionServer设计方式。在HBase内部,所有的用户数据以及元数据的请求,在经过Region的定位,最终会落在RegionServer上,并由RegionServer实现数据的读写操作。RegionServer是HBase集群运行在每个工作节点上的服务。它是整个HBase系统的关键所在,一方面它维护了Region的状态,提供了对于Region的管理和服务;另一方面,它与Master交互,上传Region的负载信息上传,参与Master的分布式协调管理。 HRegionServer与HMaster以及Client之间采用RPC协议进行通信。HRegionServer向HMaster定期汇报节点的负载状况,包括RS内存使用状态、在线状态的Region等信息。在该过程中HRegionServer扮演了RPC客户端的角色,而HMaster扮演了RPC服务器端的角色。HRegionServer内置的RpcServer实现了数据更新、读取、删除的操作,以及Region涉及到Flush、Compaction、Open、Close、Load文件等功能性操作。 Region是HBase数据存储和管理的基本单位。HBase使用RowKey将表水平切割成多个HRegion,从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS)。每个HRegionServer可以同时管理1000个左右的HRegion。 再来看看软件系统架构方面的分区设计。以任务调度为例,假设我们有一个中心调度服务,那么当数据量不断增多,这个中心调度服务一定会遇到性能瓶颈,因为所有的请求都会最终指向它。为了解决这个性能瓶颈,我们可以将任务调度拆分为多个服务,即这多个服务都可以处理任务调度工作,那么问题来了,每个任务调度服务处理的源数据是否需要完全一致? 根据华为公司发布的专利发明,显示他们对于每一个任务调度服务有数据来源区分的操作,即按照任务调度数量对源数据进行划分,比如3个任务调度服务,那么源数据按照行号对3取余的方式划分,如果运行了一段时间之后,任务调度服务出现了数量上的增减,那么这个取余划分需要重新进行,要按照那个时候的任务调度数量重新划分区间。 回到G1。在G1中,堆被平均分成若干个大小相等的区域(Region)。每个Region都有一个关联的Remembered Set(简称RS),RS的数据结构是Hash表,里面的数据是Card Table (堆中每512byte映射在card table 1byte)。 简单的说RS里面存在的是Region中存活对象的指针。当Region中数据发生变化时,首先反映到Card Table中的一个或多个Card上,RS通过扫描内部的Card Table得知Region中内存使用情况和存活对象。在使用Region过程中,如果Region被填满了,分配内存的线程会重新选择一个新的Region,空闲Region被组织到一个基于链表的数据结构(LinkedList)里面,这样可以快速找到新的Region。 总结 没有GC机制的JVM是不能想象的,我们只能通过不断优化它的使用、不断调整自己的应用程序,避免出现大量垃圾,而不是一味认为GC造成了应用程序问题。 G1GC优化参考文档 作者介绍 周明耀,2004年毕业于浙江大学,工学硕士,国外投资银行12年工作经验,4年分布式系统、物联网工作经验,10年技术团队管理经验。IBM开发者论坛专家作者、InfoQ专栏作者,著有《大话Java性能优化》、《深入理解JVM&G1 GC》,提交分布式计算领域发明专利超过15项。 来源:51CTO

优秀的个人博客,低调大师

为什么推荐使用 mybatis-mp 框架?

官方文档:http://mybatis-mp.cn 1 单表: //单条 SysUser sysUser=QueryChain.of(sysUserMapper) .like(SysUser::getName,"xx") .limit(1) .get() //list List<SysUser> list=QueryChain.of(sysUserMapper) .like(SysUser::getName,"xx") .list() //分页 Pager<SysUser> page=QueryChain.of(sysUserMapper) .like(SysUser::getName,"xx") .paging(Pager.of(1,20)) 2 连表: //VO @Data @ResultEntity(SysUser.class) public class SysUserRoleVo { private Integer id; private String userName; @ResultEntityField(target = SysUser.class, property = "password") private String pwd; @NestedResultEntity(target = SysRole.class) private SysRole role; } //单条 SysUserVO sysUserVO=QueryChain.of(sysUserMapper) .select(SysUserVO.class) .from(SysUser.class) .join(SysUser.class, SysRole.class, on -> on.eq(SysUser::getRoleId, SysRole::getId) .like(SysUser::getName,"xx") .limit(1) .returnType(SysUserVO.class) .get() //list List<SysUserVO> list=QueryChain.of(sysUserMapper) .select(SysUserVO.class) .from(SysUser.class) .join(SysUser.class, SysRole.class, on -> on.eq(SysUser::getRoleId, SysRole::getId) .like(SysUser::getName,"xx") .returnType(SysUserVO.class) .list() //分页 Pager<SysUserVO> page=QueryChain.of(sysUserMapper) .select(SysUserVO.class) .from(SysUser.class) .join(SysUser.class, SysRole.class, on -> on.eq(SysUser::getRoleId, SysRole::getId) .like(SysUser::getName,"xx") .returnType(SysUserVO.class) .paging(Pager.of(1,20)) 轻轻松松 简简单单 帮你迅速开发;还有很多很好的功能和特性,请前往官网查看 :http://mybatis-mp.c mybatis-mp 可以说 没有构建不出来的sql 欢迎体验:http://mybatis-mp.cn

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册