废品回收站该找谁?

首批向小学生发放1万件爱心荧光衣,各地市相继展开发放。
网罗山东各地名小吃,一起品味舌尖上的山东。
定于日至10月25日举行,主题:让生活走进自然。
2014年全国高考于6月7日-8日举行,山东55万考生参加高考。
5月中旬,国网山东茌平县供电公司人员,正在梨园村低压台区改造现场,拆除旧的地埋电缆,及时回收旧料,确保“颗粒归仓”。
  5月中旬,国网山东茌平县供电公司人员,正在梨园村低压台区改造现场,拆除旧的地埋电缆,及时回收旧料,确保“颗粒归仓”。  茌平县供电公司一直以来,高度重视废旧物资的回收管理工作,设置了统一的废旧物资回收和处理流程,加强了对废旧物资回收流程的全过程监督,建立了各流程阶段责任人制度,对废旧物资的最终处理,实行统一上报、统一处置,提高了废旧物资的整体管理水平,使废旧物资的管理工作更加规范化、精细化。  加强废旧物资管理是一个企业精益化管理的需要,也是保证企业资金安全、国有资产保值增值、提高资金使用效率的需要。茌平县供电公司向精细化管理要效益,以制度约束废旧物资管理,理顺管理流程,加强废旧物资各环节节点的管理,堵塞漏洞,修旧利废。在施工中,每个工程竣工结算时,要求各施工单位提供旧料回收的回执,建立旧料回收台账。将回收的可利用废旧物资分类进行整理,能利用的再利用,不能利用的按照相关规定统一处置,提高企业的经济效益,促进企业稳定、持续、健康的发展。(徐龙)
本文相关新闻
初审编辑:余梁
责任编辑:胡h姣
考场内,考生紧张的答卷,考场外,等待孩子归来的家长们看似...
由山东卫视传媒、海润影视、山东省宁津县人民政府联合制作,...
又到了一年凤凰花开的时候,用什么样的方式来纪念大学的青春...
昨天是农历腊月二十二,也是过年前倒数第二个李村集。春节临...
新闻热搜词
来源:360新闻
正在加载中
|||||||||||||
||||||||||||Go 的垃圾回收机制在实践中有哪些需要注意的地方?
按投票排序
============= 日,补充 ============= 之前回答问题的时候Go还处在1.1版本,到了1.2和1.3,Go的GC跟踪命令和GC内部实现已经有一些变化,并且根据评论中的反馈,这边一并做补充说明。Go 1.2之后的GC跟踪环境变量已经改为GODEBUG="gctrace=1",具体参数说明可以参考runtime包的文档。Go 1.3对GC做了优化,回收机制也改变了,从我的实验观测来看,用做内存存储时候产生的持久性的大量对象,一样是明显拖慢GC暂停时间的,但是函数内创建的局部对象一旦没被引用,是会被立即回收的,可以用runtime.SetFinalizer()观测到这个现象,我利用这个现象在v8.go项目做了一个engine实例销毁的单元测试。这里需要提醒大家,在平时开发或学习的时候gc是透明的,好像不存在一样,gc只在影响到业务的时候才会让人想起来有这样一个东西存在。gc什么时候才会影响到业务呢?举个例子,比如业务需求是延迟不得大于100ms,当gc暂停超过100ms时,就明显影响到业务了。而这篇回答针对的是gc影响的业务时的问题排查和优化方案,以及出问题前的提前自检。请不要因为这篇帖子就误以为gc是很恐怖的。接着补充一下我对技术分享的看法,有读者反馈一些描述比较容易误导新手,这当然不是我想看到的,技术分享本是好意,如果误导了新人就不好了。为避免误会,这里说明一下,这个帖子的问题是“Go 的垃圾回收机制在实践中有哪些需要注意的地方?”,所以你正在阅读的这个答案是针对Go语言回答的,其中的一些经验和思路可以用在其他语言,但肯定是不能照搬的。另外,语言表达的东西总是不那么严谨的,不同人可能产生不同理解,特别是对感受的描述,比如“多”、“少”、“大”、“小”、“长”、“短,这种没给出具体数值的描述,不同人可能有不同的理解,所以参考价值比较低。所以,对于分享的内容中,比较模糊,比较难以界定,没给出具体数据的部分,希望能抛砖引玉,大家也来实验一下,补充更多数据。对于已经给定数据的部分,也希望大家不要看一下就过了,最好也能实验一下证明数据给的是对的,自己也才有直观感受,万一数据给错了,也才能通过众人之力修订正确。我尽量在分享时提供方法,而不是纯感受或纯数据,希望可以众人拾柴火焰高,让后来者可以有更高的一个起点,不需要重新填坑,最后整个技术社区的水平能一起提升。============= 原文 ============= 不想看长篇大论的,这里先给个结论,go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。想知道如何提前预防和解决问题的,请耐心看下去。先介绍下我的情况,我们团队的项目《仙侠道》在7月15号第一次接受玩家测试,这个项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠memprof来定位问题,接着是进一步提高性能,主要靠cpuprof和自己做的一些统计信息来定位问题。调优性能的过程中我从cpuprof的结果发现发现gc的scanblock调用占用的cpu竟然有40%多,于是我开始搞各种对象重用和尽量避免不必要的对象创建,效果显著,CPU占用降到了10%多。但我还是挺不甘心的,想继续优化看看。网上找资料时看到GOGCTRACE这个环境变量可以开启gc调试信息的打印,于是我就在内网测试服开启了,每当go执行gc时就会打印一行信息,内容是gc执行时间和回收前后的对象数量变化。我惊奇的发现一次gc要20多毫秒,我们服务器请求处理时间平均才33微秒,差了一个量级别呢。于是我开始关心起gc执行时间这个数值,它到底是一个恒定值呢?还是更数据多少有关呢?我带着疑问在外网玩家测试的服务器也开启了gc追踪,结果更让我冒冷汗了,gc执行时间竟然达到300多毫秒。go的gc是固定每两分钟执行一次,每次执行都是暂停整个程序的,300多毫秒应该足以导致可感受到的响应延迟。所以缩短gc执行时间就变得非常必要。从哪里入手呢?首先,可以推断gc执行时间跟数据量是相关的,内网数据少外网数据多。其次,gc追踪信息把对象数量当成重点数据来输出,估计扫描是按对象扫描的,所以对象多扫描时间长,对象少扫描时间短。于是我便开始着手降低对象数量,一开始我尝试用cgo来解决问题,由c申请和释放内存,这部分c创建的对象就不会被gc扫描了。但是实践下来发现cgo会导致原有的内存数据操作出些诡异问题,例如一个对象明明初始化了,但还是读到非预期的数据。另外还会引起go运行时报申请内存死锁的错误,我反复读了go申请内存的代码,跟我直接用c的malloc完全都没关联,实在是很诡异。我只好暂时放弃cgo的方案,另外想了个法子。一个玩家有很多数据,如果把非活跃玩家的数据序列化成一个字节数组,就等于把多个对象压缩成了一个,这样就可以大量减少对象数量。我按这个思路用快速改了一版代码,放到外网实际测试,对象数量从几百万降至几十万,gc扫描时间降至二十几微秒。效果不错,但是要用玩家数据时要反序列化,这个消耗太大,还需要再想办法。于是我索性把内存数据都改为结构体和切片存放,之前用的是对象和单向链表,所以一条数据就会有一个对象对应,改为结构体和结构体切片,就等于把多个对象数据缩减下来。结果如预期的一样,内存多消耗了一些,但是对象数量少了一个量级。其实项目之初我就担心过这样的情况,那时候到处问人,对象多了会不会增加gc负担,导致gc时间过长,结果没得到答案。现在我填过这个坑了,可以确定的说,会。大家就不要再往这个坑跳了。如果go的gc聪明一点,把老对象和新对象区别处理,至少在我这个应用场景可以减少不必要的扫描,如果gc可以异步进行不暂停程序,我才不在乎那几百毫秒的执行时间呢。但是也不能完全怪go不完善,如果一开始我早点知道用GOGCTRACE来观测,就可以比较早点发现问题从而比较根本的解决问题。但是既然用了,项目也上了,没办法大改,只能见招拆招了。总结以下几点给打算用go开发项目或已经在用go开发项目的朋友:1、尽早的用memprof、cpuprof、GCTRACE来观察程序。2、关注请求处理时间,特别是开发新功能的时候,有助于发现设计上的问题。3、尽量避免频繁创建对象(&abc{}、new(abc{})、make()),在频繁调用的地方可以做对象重用。4、尽量不要用go管理大量对象,内存数据库可以完全用c实现好通过cgo来调用。手机回复打字好累,先写到这里,后面再来补充案例的数据。数据补充:图1,7月22日的一次cpuprof观测,采样3000多次调用,数据显示scanblock吃了43.3%的cpu。图2,7月23日,对修改后的程序做cpuprof,采样1万多次调用,数据显示cpu占用降至9.8%数据1,外网服务器的第一次gc trace结果,数据显示gc执行时间有400多ms,回收后对象数量1659922个:gc13(1): 308+92+1 ms , 156 -& 107 MB 3339834 -& 90323) objects, 0(0) handoff, 0(0) steal, 0/0/0 yields
数据2,程序做了优化后的外网服务器gc trace结果,数据显示gc执行时间30多ms,回收后对象数量126097个:gc14(6): 16+15+1 ms, 75 -& 37 MB 1409074 -& 09229) objects, 45(1913) handoff, 34(4823) steal, 455/283/52 yields
示例1,数据结构的重构过程:最初的数据结构类似这样// 玩家数据表的集合
type tables struct {
tableA *tableA
tableB *tableB
tableC *tableC
// ...... 此处省略一大堆表
// 每个玩家只会有一条tableA记录
type tableA struct {
fieldA int
fieldB string
// 每个玩家有多条tableB记录
type tableB struct {
next *tableB
// 指向下一条记录
// 每个玩家只有一条tableC记录
type tableC struct {
value int64
最初的设计会导致每个玩家有一个tables对象,每个tables对象里面有一堆类似tableA和tableC这样的一对一的数据,也有一堆类似tableB这样的一对多的数据。假设有1万个玩家,每个玩家都有一条tableA和一条tableC的数据,又各有10条tableB的数据,那么将总的产生1w (tables) + 1w (tableA) + 1w (tableC) + 10w (tableB)的对象。而实际项目中,表数量会有大几十,一对多和一对一的表参半,对象数量随玩家数量的增长倍数显而易见。为什么一开始这样设计?1、因为有的表可能没有记录,用对象的形式可以用 == nil 来判断是否有记录2、一对多的表可以动态增加和删除记录,所以设计成链表3、省内存,没数据就是没数据,有数据才有对象改造后的设计:// 玩家数据表的集合
type tables struct {
tableA tableA
tableB []tableB
tableC tableC
// ...... 此处省略一大堆表
// 每个玩家只会有一条tableA记录
type tableA struct {
_is_nil bool
fieldA int
fieldB string
// 每个玩家有多条tableB记录
type tableB struct {
_is_nil bool
// 每个玩家只有一条tableC记录
type tableC struct {
_is_nil bool
value int64
一对一表用结构体,一对多表用slice,每个表都加一个_is_nil的字段,用来表示当前的数据是否是有用的数据。这样修改的结果就是,一万个玩家,产生的对象总量是 1w (tables) + 1w ([]tablesB),跟之前的设计差别很明显。但是slice不会收缩,而结构体则是一开始就占了内存,所以修改后会导致内存消耗增大。参考链接:go的gc代码,scanblock等函数都在里面:go的runtime包文档有对GOGCTRACE等关键的几个环境变量做说明:如何使用cpuprof和memprof,请看《Profiling Go Programs》:我做的一些小试验代码,优化都是基于这些试验的数据的,可以参考下:
写得不错,实践经验,总结得很好。尽量不要创建大量对象,也尽量不要频繁创建对象我也说两点吧:1.每次垃圾回收耗时。2.垃圾回收频率。Go语言目前的垃圾回收是stop the world的,所以每次回收时耗时太长肯定是不可以接受的,像实时性要求高的网游服务器整个停止20多毫秒,用户应该是会有明显卡的感觉的,网页游戏也许无所谓:-) 。每次垃圾回收耗时是跟需要垃圾回收的对象数量相关的,垃圾回收时会扫描需要回收的内存区域,如果发现对象的内容中包含指针,则需要递归的进行扫描。所以大量使用对象指针确实会使垃圾回收耗时变长。达达的做法,内存数据都改为结构体和切片存放,也不失为一个临时解决方案。如果设计之初就考虑到这种问题,其实可以尽量自己手动管理对象,进行内存重用。这篇文章值得看下:然后就是垃圾回收的频率问题。Go的垃圾回收还没达到Java那么成熟,没有分代的垃圾回收,不区分新老对象。它的算法是按内存使用量变化来的。垃圾回收的触发是由一个gcpercent的变量控制,当新分配的内存占已在使用中的内存的比例超过gcprecent时就会触发。比如,gcpercent=100,当前使用了4M的内存,那么当内存分配到达8M时就会再次gc。如果回收完毕后,内存的使用量为5M,那么下次回收的时机则是内存分配达到10M的时候。垃圾回收的频率并不是正比于内存使用的数量,内存数量的变化的才会有影响,也就是尽量不要频繁创建对象。type A struct {
func f() {
// do something with v
func f() {
前一种写法,会加重垃圾回收的负担,后一种写法性能会更好。如果你对Go 的内存管理机制的实现也感兴趣的话,可以看看我的github:
从仅有的项目经验来说,对
的观点不能同意更多了如果要逼近有着同样良好设计的C/C++的高性能,需要严格注意频繁分配小块内存的情况。尤其是对于cpu密集型的应用来说,否则gc的运行会导致大量的cpu消耗在scanblock这个函数上。如果你是通过 make([]T, size)来分配slice,还会有相当一部分的cpu会消耗在 runtime.memclr函数上。因此,最好使用sync.Pool (since go1.3) 或者利用chan 来写一个对象池。这样能够有效减少gc的负担,将cpu更合理地利用起来。
首先在go里面临时对象都应该创建在一个有终止节点的goruntine中,如果是缓存在服务器中的玩家数据结构肯定不需要回收我在开发测试中数千个玩家做各种事情,还有怪物等等,我的方法是将所有对象全部打散和碎片化,每条消息每一条AI都是一个goruntine,这样临时对象在goruntine结束的时候就会被销毁掉,或者把这些对象放置在一个for中,在goruntine切换节点的时候也可以利用GC将其直接回收还有在struct中我倾向于于用标准写法,保存指针并不会带来明显的GC压力(关键看你的GC节点在哪里),我觉得大可不必担心其GC效率,go的结构体如果真的保存下来,也是在goruntine中会循环用到的类型(前提是你没写泄露),事实上我收发消息都是传一个*msg,从测试上来看也没有造成泄露,可以肯定的是当一个指针失去引用的时候必然会被GC回收
type tables struct {
tableA *tableA
// ...... 此处省略一大堆表
type tables struct {
tableA tableA
// ...... 此处省略一大堆表
这个在对象总量上 有很大变化
对象创建使用完以后赋值nil 对GC会好些吗?
我觉得这里描述有点不太合适,go的struct就是对象吧,从“tableC* tableC”,改成“tableC tableC”,对象数是没有变的,只是由于直接引用,对象一同分配内存,gc不需要关心下面的对象释放问题;这里说的对象总量,应该是gc关心的独立对象【图】- 东莞最大废品回收站在哪里?联系电话多少 - 东莞凤岗物品回收 - 百姓网
&&关注百姓微信公众号,尽享快捷刷新、信息推送、抽奖活动等众多微信功能您只需要:1 &用微信“扫一扫”右边的二维码2 &在微信中“关注”我们&|&||||||东莞最大废品回收站在哪里?联系电话多少&提示信息设置为“搞定了!”状态后,其他用户将无法查看您的联系方式。您确认搞定了这条信息吗?提示重新发布后可使用“刷新”将发布时间更新为最新时间,并将信息排到第一页。&&12月22日 12:22 &...次浏览 &信息编号: &服务内容:&公司名称:万景金属废料(东莞)回收有限分公司地区:1361265****号码归属地:东莞&&百姓网号码保护功能介绍&&拨打百姓400转呼电话绝不收取您任何额外费用,该信息发布人仍能看到您的来电号码。联系时,请一定说明在百姓网看到的,谢谢!见面最安全,发现问题请举报。回收热线:【136
&&本公司经营范围广,有专业性,多年来,在同行中获得较好的声誉。我公司在广东各市都建立分公司,业务遍及广东省内;本公司有庞大的专业回收队伍,现场估价经验丰富!我公司并拥有安装、拆卸、高空作业专业技术的施工队伍。我公司本着价格高,信誉好的理念。长期面向珠三角企业、写字楼、学校、银行、宾馆、酒楼、酒店、公司、工厂、码头、餐厅、网吧、休闲中心、超市等单位。
回收范围:
中央空调回收:螺杆式中央空调、溴化锂中央空调、10匹-800匹中央空调(冷水机组)等格力空调、海尔空调、美的空调、春兰空调、志高空调、科龙空调等.
整厂设备回收:回收各类结业工厂设备、搬迁工厂设备、关闭工厂设备工厂废品清理等.
变电设备回收:各种型号铜芯、铝芯变压器、低压配电柜、发电站设备、变电设备回收.
电线电缆回收:高压电缆回收、低压电缆回收、电缆回收、电力电缆、特种电缆回收等.
发电机组回收:柴油发电机组、汽油发电机组、燃煤发电机组、水力发电机组设备等.
酒店设备回收:灶具、炊具设备、厨具设备、厨房设备、洗涮设备回收、酒楼设备等.
机械设备回收:工厂机械、企业机械、工地机械 纺织机械、搬运、粉碎机械设备等.
废旧金属回收:废铁回收、废铜回收、废铝回收、废不锈钢回收等.
仓库积压回收:积压各类成品.半成品材料、电子元件、废旧电子、各种塑胶五金等.
办公设备回收:打印机、传真机、晒图机、绘图机、各式电脑、办公屏风、办公设备等
我们设有:
1.收购、转让、回收、设计、招标、拆迁。
2.新物品、半成品、旧物品、审理、检验、合格分级。
3.公司拆迁、工厂拆迁、酒店拆迁、二手设备拆迁。
4.物资转让、二手买卖,竞价拍卖,评估起价。
5.工厂、酒店、公司、超市、电缆电线.废旧钢材回收。
6.长期收购工厂设备、发电机、变压器,制冷设备回收等。该用户其他信息4月15日&高埗万景废料(东莞)回收有限分公司4月10日&高埗万景废料(东莞)回收有限分公司4月3日&厚街万景废料(东莞)回收有限分公司4月3日&桥头万景废料(东莞)回收有限分公司4月3日&黄江万景金属废料(东莞)回收有限分公司4月3日&万江万景金属废料(东莞)回收有限分公司4月3日&虎门万景金属废料(东莞)回收有限分公司14年1月16日&塘厦 - 塘厦元&/&精仿苹果13年12月1日&大岭山万景金属废料(东莞)回收有限分公司13年10月12日&虎门 - 虎门加油站万景金属废料(东莞)回收有限分公司
反馈建议描述:请填写描述手机号:请填写手机号请填写手机号询问废旧电池回收后该交什么部门?&兰州学生向市长发帖
&&&&来源:&&&&
&&&&&&字号
人民网北京3月28日电 &近期,有一名学生给甘肃省兰州市市长袁占亭发帖,询问废旧电池回收后该交什么部门。网友问道:“学校在学校设置电池回收箱获取的废旧电池应该交到哪里处理,我们回收的目的是要环保,我担心私人回收的处理能力有限还会造成污染”。兰州市工业和信息化委员会昨日作出回应,向网友介绍了2家有资质回收处置旧电池的企业机构。兰州市工业和信息化委员会表示,近年来,兰州市加快推进再生资源回收体系建设,2010年被列为全国再生资源回收体系建设试点城市。按照标准化社区回收站点总量控制、合理布局、方便回收,城区每2000户居民设置1个回收站(点),乡、镇每2500户居民设置1个回收站(点)的设立原则,切实加快城市再生资源回收体系建设。其中,兰州鑫源物资再生利用有限公司和甘肃省危险废物处置中心是专门负责处理废旧电池回收处理的企业。
【网友留言】
我是兰州市一名学生,我们在学校设置电池回收箱获取的废旧电池应该交到哪里处理,虽然可以联系到一些私人回收点,但是我们回收的目的是要环保,我担心他们的处理能力有限也会造成污染,想知道兰州政府部门有专门负责废旧电池处理的吗?
兰州市工业和信息化委员会回复意见:
您好,谢谢您对我市环保工作的关注和支持!现将您提出的有关问题答复如下:近年来,我市加快推进再生资源回收体系建设,2010年被列为全国再生资源回收体系建设试点城市。按照标准化社区回收站点总量控制、合理布局、方便回收,城区每2000户居民设置1个回收站(点),乡、镇每2500户居民设置1个回收站(点)的设立原则和“七统一、一规范”的要求,切实加快城市再生资源回收体系建设。其中,兰州鑫源物资再生利用有限公司和甘肃省危险废物处置中心是专门负责处理废旧电池回收处理的企业。
兰州鑫源物资再生利用有限公司是兰州市商务局确定的社区回收网点网络建设的承办企业,在七里河区、西固区、红古区及永登县建成社区绿色回收网点165个,在社区、学校、企事业单位、商场、超市等公共场所和人口密集区域设立废旧电池回收箱,由专用的电池中转箱和专用的全封闭运输车辆定期回收。联系人:何婧妍,电话:2582689。
甘肃省危险废物处置中心(甘肃金创绿丰环境技术有限公司)是根据国家环保部《关于全国危险废物和医疗废物处置设施建设规划》建设的甘肃省唯一的危险废物处置中心,负责全省危险废物、危险化学品等污染事故的应急处置、危险废物处置的技术支持、全省危险废物和省会城市兰州及周边医疗废物的收集与处置。该中心下设焚烧系统(采用美国汉克公司技术)、固化填埋系统、水处理及清洗消毒系统、仓储管理系统、天然气系统、应急与运输系统以及分析检验中心,配备GPS定位系统危险废物运输车9辆,用于回收处理危险废物。联系人:丁东,电话:。
今后,我们将继续完善再生资源回收体系,利用网络、报纸、电视等新闻媒体,进一步加强节能减排的宣传力度,引导广大市民牢固树立绿色消费和低碳生活的理念,大家共同关注节能减排工作,共同关心、爱护我们赖以生存的环境,建设资源节约型、环境友好型社会的目标就一定能实现。
【网友留言仅代表作者个人意见,不代表人民网观点】
  栏目动态
(责编:杨伊、韩月)
使用其他账号登录:
恭喜你,发表成功!
请牢记你的用户名:,密码:,立即进入修改密码。
s后自动返回
5s后自动返回
恭喜你,发表成功!
5s后自动返回
最新评论热门评论
特别关注|精彩博客
24小时排行&|&
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn all rights reserved
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn. all rights reserved我来说两句:验证码 &&请照此输入(点击图片刷新验证码)&&&&最多输入10000个字符其它答案:共1条谢谢帮忙!我很需要只答案。&&3人赞同
相关内容等待您来回答19636175642编辑推荐财税资讯会计中心税务中心财税问答政策法规共享中心产品服务会计人生互动交流论坛精华

我要回帖

更多关于 废品回收 的文章

 

随机推荐