• 广州市肯麦家具有限公司“火锅桌椅,电动餐桌,餐厅桌椅”
  • 餐厅桌椅 返回首页 加入收藏
  • 产品名称:
    餐厅桌椅热门搜索:



      自动称重包装机 0.574652 0.36567
      粉末包装机 0.574879 0.444708
      自动定量颗粒包装机 0.714374 0.859528
      包装秤 0.65288 0.512335
      定量称重包装机 0.155777 0.708212
      定量包装秤 0.931699 0.831177
      自动上袋包装机 0.614035 0.252931
      定量包装机 0.664589 0.288553
      大袋包装机 0.55883 0.911242
      颗粒包装秤 0.919672 0.395473
      自动包装线 0.123992 0.292429
      自动定量包装秤 0.069932 0.739509
      大型给袋式全自动包装机 0.480092 0.459975
      自动包装秤 0.782436 0.298588
      25公斤自动称重包装机 0.334613 0.974449
      电子定量包装秤 0.430803 0.494486
      定量包装称 0.419155 0.360263
      粉料包装秤 0.798705 0.183562
      25公斤粉体自动包装机 0.119223 0.101676
      打包秤 0.071554 0.79064
      自动定量称重包装秤 0.664459 0.614922
      颗粒定量包装秤 0.573482 0.47733
      自动打包秤 0.026178 0.978513
      电子包装秤 0.046909 0.483295
      全自动化包装机 0.874582 0.268877
      电子打包秤 0.582883 0.285714
      粉末包装秤 0.836956 0.338046
      全自动包装线 0.433081 0.61217
      全自动袋包装机 0.739629 0.769404
      全自动连续包装机 0.116337 0.042062
      双斗定量包装秤 0.513055 0.066752
      自动粉末定量包装机 0.688091 0.629247
      在线称重仪 0.384874 0.506274
      称重仪表 0.141485 0.617323
      称重计量器 0.718244 0.900445
      称重变送器 0.329422 0.784051
      称重仪 0.541442 0.351245
      称重控制器 0.354671 0.527706
      称重显示控制器 0.281657 0.301604
      皮带秤仪表 0.60096 0.430391
      配料称重仪表 0.535815 0.473167
      包装机控制器 0.441949 0.46872
      称重配料仪表 0.818518 0.416531
      称重控制仪表 0.090221 0.068373
      包装秤仪表 0.192663 0.637955
      触摸屏称重仪表 0.82213 0.823677
      失重秤仪表 0.514479 0.325783
      配料控制器 0.735683 0.849017
      配料仪表 0.235297 0.877465
      重量控制器 0.485216 0.503456
      智能重量变送器 0.414703 0.3494
      皮带秤称重仪表 0.919836 0.17011
      灌装机控制器 0.936358 0.603092
      失重称控制器 0.853671 0.533149
      全自动包装生产线 0.576109 0.733748
      plc称重 0.573059 0.255581

      0.932088 0.957741

      0.347782 0.854167

      0.960791 0.364209

      0.774104 0.990756
      次要的: 0.993716 0.740312
      化肥自动包装秤 0.414772 0.72487
      复合肥定量包装秤 0.178234 0.722092
      颗粒自动包装秤 0.045553 0.239642
      种子包装秤 0.517515 0.413048
      粉末自动包装秤 0.698655 0.217681
      活性炭包装秤 0.139991 0.64408
      饲料打包秤 0.886324 0.649897
      双斗包装秤 0.292821 0.154397
      单斗包装秤 0.048495 0.194093
      全自动颗粒包装秤 0.72672 0.095331
      粉体定量包装秤 0.493134 0.711809
      小麦包装秤 0.0492 0.420669
      粉状包装秤 0.465724 0.560674
      化工粉剂包装秤 0.759666 0.26978
      自动称重包装秤 0.374356 0.559628
      大袋包装秤 0.159838 0.93555
      化肥包装秤 0.879633 0.833822
      称重包装秤 0.360303 0.151446
      粉剂包装秤 0.863512 0.793268
      粉体包装秤 0.298931 0.532985
      饲料包装秤 0.306472 0.203843
      饲料定量包装秤 0.922304 0.263351
      电子秤包装机 0.064967 0.620944
      粮食定量包装秤 0.507977 0.94274
      有机肥包装秤 0.940645 0.957276
      面粉打包秤 0.414182 0.18087
      螺旋包装秤 0.959625 0.205704
      电子称重包装秤 0.981999 0.700949
      玉米包装秤 0.508144 0.661722
      颗粒自动定量包装秤 0.143745 0.424132
      肥料包装秤 0.018505 0.417078
      粮食包装秤 0.176315 0.252486
      粉末定量包装秤 0.199957 0.798712
      肥料定量包装秤 0.796189 0.420723
      面粉定量包装秤 0.514914 0.446052
      淀粉包装秤 0.833956 0.497307
      粮食自动定量包装秤 0.485325 0.872199
      玉米定量包装秤 0.005466 0.738265
      包装称 0.71223 0.601501
      自动包装称 0.586372 0.893585
      全自动包装秤 0.274806 0.197857
      自动套袋包装秤 0.262986 0.306198
      全自动定量包装秤 0.559505 0.267765
      化工包装秤 0.682889 0.678353
      粉剂自动包装秤 0.112097 0.50789
      吨包装秤 0.22844 0.223908
      面粉包装秤 0.584416 0.695562
      粉料打包秤 0.135837 0.912123
      自动称量包装秤 0.301622 0.423208
      定量打包秤 0.079973 0.486042
      吨袋包装秤 0.188563 0.637199
      包装电子秤 0.58338 0.721995
      化肥颗粒包装秤 0.847363 0.391383
      大米电子包装秤 0.937245 0.393702
      大米包装秤 0.568648 0.175654
      电动包装秤 0.907437 0.996158
      电子秤颗粒包装机 0.31863 0.772755
      大米定量包装秤 0.994728 0.091073
      电动定量包装秤 0.589517 0.132858
      全自动包装称 0.248067 0.721125
      饲料包装称 0.231684 0.646173
      粮食包装称 0.756644 0.538038
      电子定量包装称 0.872319 0.304734
      计量包装称 0.761597 0.03544
      玉米自动包装称 0.255825 0.476025
      自动电子计量包装称 0.595608 0.207294
      包装计量称 0.652069 0.325504
      包装机 0.509045 0.15433
      全自动打包机 0.249498 0.094856
      自动打包机 0.468062 0.559118
      有机肥打包机 0.028969 0.50286
      称重式包装机 0.106902 0.25615
      给袋式全自动粉末包装机 0.016464 0.316992
      自动袋子包装机 0.725475 0.880139
      饲料包装机 0.131981 0.805986
      电子打包机 0.431131 0.968496
      粉剂肥料全自动包装机 0.148448 0.310599
      自动装袋包装机 0.79733 0.665868
      定量自动包装机 0.412179 0.351196
      粉料自动计量包装机 0.057642 0.727934
      粉料全自动称重包装机 0.422748 0.62
      复合肥包装机 0.316444 0.602263
      粉状包装机 0.353511 0.110341
      塑料包装机 0.074078 0.098467
      有机肥颗粒包装机 0.774003 0.917995
      粉末计量包装机 0.249723 0.441881
      肥料打包机 0.610274 0.252935
      生物有机肥包装机 0.61794 0.750879
      称重包装一体机 0.672903 0.575359
      25公斤粉末自动包装机 0.521927 0.893075
      25kg粉末包装机 0.280593 0.111326
      有机肥定量包装机 0.125749 0.471371
      自动定量打包机 0.952373 0.879172
      自动称重定量包装机 0.07838 0.278917
      电子称重包装机 0.626648 0.72518
      自动袋式包装机 0.69356 0.132398
      称重颗粒包装机 0.185482 0.319536
      塑料颗粒自动称重包装机 0.859099 0.264292
      全自动称重打包一体机 0.039704 0.630778
      颗粒包装机颗粒 0.245915 0.304363
      塑料颗粒包装机 0.528175 0.452068
      塑料颗粒自动包装机 0.403624 0.639635
      自动称重包装机一体机 0.826773 0.537139
      给袋自动包装机 0.907697 0.938613
      全自动种子包装机 0.878056 0.707339
      淀粉包装机 0.815069 0.299715
      称重颗粒自动包装机 0.221155 0.39165
      颗粒计量包装机 0.480404 0.789158
      全自动化肥包装机 0.885752 0.469435
      有机肥料包装有机肥 0.996143 0.757635
      称重包装机全自动包装机 0.74651 0.987709
      全自动颗粒计量包装机 0.557902 0.226134
      饲料自动包装机 0.198065 0.865373
      全自动分装包装机 0.953631 0.093448
      重袋包装机 0.672395 0.683361
      螺旋定量包装机 0.99872 0.267047
      包装机全自动 0.174887 0.936922
      称重打包机 0.86522 0.325828
      全自动包装一体机 0.300738 0.010679
      袋装粉末包装机 0.557373 0.190632
      饲料全自动包装机 0.099569 0.643648
      自动称重打包机 0.439763 0.309932
      粮食打包机 0.616738 0.481496
      饲料颗粒包装机 0.054636 0.937638
      颗粒料包装机 0.659007 0.253683
      有机肥全自动包装机 0.203418 0.865739
      水溶肥自动包装机 0.734679 0.570813
      大型颗粒包装机 0.815253 0.725848
      粉料自动称量包装机 0.925518 0.070539
      大包装颗粒包装机 0.101239 0.407752
      粉剂称重包装机 0.069475 0.013287
      肥料颗粒包装机 0.119669 0.821386
      广东全自动包装机 0.94735 0.561199
      种子定量包装机 0.066839 0.401391
      有机肥包装称 0.630639 0.200235
      自动粉体定量包装机 0.900181 0.466038
      粉末袋装包装机 0.910788 0.465617
      粉剂颗粒包装机 0.335441 0.130443
      25公斤粉体包装机 0.261663 0.373533
      称重计数包装机 0.576524 0.918687
      粉体自动定量包装机 0.850487 0.635857
      颗粒饲料包装机 0.66881 0.685114
      大米称重包装机 0.659187 0.072808
      定量颗粒包装机 0.415412 0.93735
      25公斤全自动包装机 0.572885 0.454496
      肥料全自动包装机 0.108586 0.651965
      颗粒包装秤厂家 0.525947 0.777655
      畜牧称重 0.246615 0.357783
      自动称重给料机 0.373902 0.346516
      包装秤厂家 0.24233 0.549158
      自动包装生产线 0.668509 0.387543
      全自动袋式包装机 0.745715 0.534455
      自动颗粒包装机 0.277356 0.502339
      颗粒自动包装机 0.974122 0.775238
      粉剂自动包装机 0.313118 0.20968
      计量包装机 0.549703 0.881769
      袋式自动包装机 0.985492 0.924364
      广东包装机 0.393061 0.766657
      自动定量称重包装机 0.638253 0.479947
      自动计量包装机 0.56652 0.122728
      给袋包装机 0.985398 0.458693
      自动包装机 0.404687 0.548083
      包装机自动 0.621674 0.095692
      粉料定量包装机 0.949813 0.017822
      颗粒包装机 0.764462 0.951932
      自动包装机颗粒 0.486822 0.724268
      颗粒定量包装机 0.803619 0.758283
      称重式颗粒包装机 0.626212 0.841887
      颗粒粉剂包装机 0.237958 0.509281
      玉米包装机 0.340626 0.436098
      自动粉末包装机 0.569935 0.170268
      粉末称重包装机 0.411429 0.615423
      自动定量包装机 0.839424 0.231313
      粉剂粉末包装机 0.721653 0.610115
      全自动定量包装机 0.547613 0.010074
      粉体自动包装机 0.192457 0.341445
      自动颗粒称重包装机 0.150132 0.737848
      智能包装机 0.199217 0.941326
      粉剂包装机 0.024979 0.500072
      粉料称重包装机 0.631453 0.81914
      自动给袋式包装机 0.60507 0.862155
      罐装包装机 0.537764 0.515966
      袋式包装机 0.938132 0.421476
      颗粒称重包装机 0.478685 0.574861
      定量粉剂包装机 0.770589 0.76798
      玉米颗粒包装机 0.858648 0.873779
      粮食颗粒包装机 0.322352 0.926672
      粉料包装机 0.905781 0.615799
      粉末颗粒包装机 0.262387 0.488769
      粮食包装机 0.743332 0.599127
      自动制袋包装机 0.094693 0.408015
      面粉包装机 0.720608 0.646081
      自动给袋包装机 0.840642 0.971231
      粉体包装机 0.376659 0.911143
      自动粉剂颗粒包装机 0.232761 0.996308
      粉末定量包装机 0.96563 0.793189
      玉米粒包装机 0.955919 0.381719
      粉料自动包装机 0.213001 0.11775
      给袋式包装机 0.901688 0.244277
      称重包装机 0.913958 0.047817
      粮食定量包装机 0.009211 0.06129
      给袋式自动包装机 0.448645 0.27086
      种子包装机 0.245867 0.162566
      粉剂定量包装机 0.871271 0.337119
      自动定量粉剂包装机 0.15526 0.666818
      肥料包装机 0.719533 0.558575
      自动计数包装机 0.987585 0.217472
      有机肥包装机 0.270934 0.090128
      给袋式颗粒包装机 0.508459 0.426929
      称量包装机 0.535621 0.911848
      自动称量包装机 0.848403 0.576089
      化肥自动包装机 0.402969 0.311242
      化工粉剂包装机 0.251738 0.52115
      颗粒肥料包装机 0.667033 0.7825
      全自动计数包装机 0.046191 0.141041
      玉米自动包装机 0.747091 0.375542
      全自动25kg包装机 0.108041 0.885367
      25公斤自动包装机 0.24264 0.080138
      25公斤包装机 0.396436 0.169715
      25kg包装机 0.902813 0.444911
      肥料自动包装机 0.102669 0.522137
      粮食自动包装机 0.00551 0.129999
      25公斤大袋包装机 0.37631 0.81718
      称重计量包装机 0.52966 0.331358
      大型自动包装机 0.551117 0.615184
      玉米定量包装机 0.840189 0.485025
      定量粉体包装机 0.877579 0.791825
      计数包装机 0.662021 0.598788
      粉体定量包装机 0.601694 0.23836
      有机肥自动包装机 0.630514 0.890688
      粉末自动计量包装机 0.832766 0.111062
      水溶肥包装机 0.792606 0.455769
      颗粒自动计量包装机 0.530469 0.997298
      粉末自动包装机 0.563914 0.867539
      大米定量包装机 0.056828 0.081353
      细粉包装机 0.935849 0.479448
      25kg自动包装机 0.750499 0.595214
      自动粉料包装机 0.125707 0.601801
      广东自动包装机 0.683017 0.054838
      面粉定量包装机 0.47403 0.189559
      颗粒肥料自动包装机 0.585004 0.782735
      粉剂自动定量包装机 0.43873 0.185201
      粉料自动称重包装机 0.777798 0.334749
      定量粉末包装机 0.429565 0.142428
      粉体自动称重包装机 0.082096 0.45313
      化肥包装机 0.190572 0.013101
      大包装全自动包装机 0.604803 0.970778
      全自动给袋包装机 0.315428 0.230441
      全自动包装机 0.349908 0.724938
      包装机颗粒 0.148298 0.448538
      高速全自动包装机 0.638298 0.634429
      自动粉剂包装机 0.055964 0.872705
      吨包装机 0.173514 0.900393
      全自动粉末包装机 0.592119 0.812242
      颗粒自动定量包装机 0.623677 0.326269
      颗粒包装机全自动 0.889685 0.185336
      全自动粉剂包装机 0.830171 0.070831
      粉剂包装机全自动 0.278105 0.290133
      化工颗粒包装机 0.42627 0.791442
      粉末全自动包装机 0.565452 0.08892
      全自动大袋包装机 0.945566 0.650985
      颗粒全自动包装机 0.25089 0.588837
      制袋包装机 0.025666 0.05156
      大袋颗粒包装机 0.850853 0.357253
      套袋包装机 0.431744 0.12349
      粉剂全自动包装机 0.697275 0.357122
      颗粒自动称重包装机 0.454774 0.742011
      全自动颗粒包装机 0.052099 0.47184
      全自动称重包装机 0.607445 0.069276
      吨包包装机 0.059513 0.933637
      全自动套袋包装机 0.779855 0.853305
      给袋式全自动包装机 0.236009 0.698338
      大米包装机 0.844826 0.095279
      给袋全自动包装机 0.278778 0.368456
      全自动制袋包装机 0.307573 0.095942
      水泥自动包装机 0.054588 0.528898
      粉状自动包装机 0.07907 0.134907
      超细粉包装机 0.650547 0.10227
      全自动水泥包装机 0.691212 0.525703
      自动粉体包装机 0.272148 0.866125
      粉体全自动包装机 0.628872 0.475725
      化工包装机 0.354276 0.438975
      自动粉剂称重包装机 0.570642 0.030346
      粉状物料包装机 0.144825 0.00929
      自动码垛机自动包装机 0.751902 0.113396
      玉米粒子包装机 0.160831 0.244533
      吨袋全自动包装机 0.11714 0.762135
      自动放料包装机 0.68231 0.356841
      编织袋包装机 0.01861 0.204438
      全自动粉剂定量包装机 0.501304 0.747812
      全自动给袋式包装机 0.80083 0.363559
      水泥包装机 0.801111 0.963491
      袋装粉剂包装机 0.969731 0.997278
      全自动粉体包装机 0.975443 0.384335
      装袋包装机 0.487965 0.340749
      码垛包装机 0.168607 0.433519
      尿素包装机 0.257563 0.441085
      5公斤自动包装机 0.944423 0.514424
      花生包装机 0.706325 0.042963
      大包装自动包装机 0.681317 0.679626
      颗粒式包装机 0.280501 0.581603
      自动点数包装机 0.591641 0.007669
      广东粉剂包装机 0.085989 0.114294
      制袋式包装机 0.707308 0.228664
      全自动称量包装机 0.894332 0.176637
      电子定量包装机 0.846323 0.980288
      全自动玉米包装机 0.81834 0.87246
      大米自动包装机 0.583075 0.978105
      杂粮粉剂包装机 0.291295 0.757207
      全自动智能包装机 0.009229 0.58434
      电子自动包装机 0.954628 0.639508
      自动粒包装机 0.423871 0.698268
      大米包装机包装机 0.693934 0.44696
      包装机码垛机 0.126125 0.958171
      给袋式粉剂包装机 0.38776 0.686153
      全自动粉状包装机 0.249757 0.134286
      高精度包装机 0.519582 0.812329
      大米全自动包装机 0.726979 0.047458
      称重定量包装机 0.268876 0.648247
      缝包定量包装机 0.575933 0.193034
      全自动吨袋包装机 0.654062 0.451917
      深圳粉末包装机 0.311765 0.458715
      粉状定量包装机 0.433799 0.795468
      稻谷包装机 0.320632 0.84245
      全自动面粉包装机 0.379902 0.51068
      面粉全自动包装机 0.289785 0.202494
      包装机和包装机 0.227221 0.736094
      粉沫定量包装机 0.141493 0.481546
      电子称包装机 0.957611 0.84627
      给袋机包装机 0.14766 0.585201
      打包包装机 0.002939 0.105796
      杂粮颗粒包装机 0.377496 0.566707
      大豆包装机 0.851598 0.775209
      水泥粉包装机 0.708126 0.252972
      化工粉体包装机 0.739898 0.665834
      广东粉体包装机 0.93555 0.824261
      全自动干粉包装机 0.987528 0.143676
      石灰包装机 0.774969 0.972169
      粉粒包装机 0.482374 0.343038
      预制袋包装机 0.880045 0.618949
      颗粒物包装机 0.838152 0.404129
      自给袋包装机 0.53083 0.078021
      颗粒称重式包装机 0.173073 0.416982
      深圳自动给袋式包装机 0.993285 0.860027
      米粉自动包装机 0.023516 0.259522
      全自动大米包装机 0.899822 0.632846
      全自动袋装包装机 0.696416 0.709085
      螺旋式包装机 0.811651 0.720084
      饲料颗粒物包装机 0.193329 0.922607
      干粉沙浆包装机 0.726066 0.753205
      颗粒剂自动包装机 0.361184 0.896227
      大豆定量包装机 0.948168 0.345737
      杂粮包装机 0.490361 0.848831
      杂粮定量包装机 0.451669 0.622466
      花生全自动包装机 0.219756 0.750625
      称量粉剂包装机 0.447212 0.784835
      粉剂包装机资讯 0.406436 0.060864
      全自动粉料包装机 0.091019 0.778895
      淀粉自动包装机 0.318022 0.167418
      粉未包装机 0.324202 0.387537
      大袋吨袋包装机 0.845337 0.818807
      大袋种子包装机 0.98962 0.501112
      化肥定量包装机 0.001137 0.109156
      饲料定量包装机 0.43638 0.555293
      全自动粉体称重包装机 0.900009 0.840214
      全自动粮食包装机 0.082296 0.428436
      玉米粉包装机 0.339342 0.779593
      粉粒料包装机 0.426696 0.538003
      活性炭自动包装机 0.59603 0.246083
      淀粉自动定量包装机 0.745673 0.225931
      高速自动包装机 0.237039 0.278561
      水泥粉体包装机 0.299758 0.860084
      尿素定量包装机 0.889576 0.431715
      编织袋自动包装机 0.183439 0.133985
      全自动计量包装机 0.107275 0.516429
      全自动饲料包装机 0.759105 0.123344
      全自动套袋包装秤 0.607061 0.254836
      双螺旋包装机 0.833342 0.228907
      有机肥料包装机 0.053585 0.289523
      袋装水泥包装机 0.742431 0.134865
      大包装包装机 0.36845 0.122275
      粉状物包装机 0.391806 0.396205
      种子颗粒包装机 0.207706 0.512796
      煤炭定量包装机 0.163953 0.512869
      散料包装机 0.57225 0.594849
      25kg颗粒包装机 0.707942 0.229949
      称重显示器 0.039884 0.893071
      称重显示仪表 0.897966 0.497543
      数字式称重仪表 0.154404 0.412987
      数字式称重显示器 0.811526 0.37779
      电子称重模块 0.986153 0.029634
      配料称重模块 0.394529 0.890796
      多功能称重仪表 0.43127 0.705895
      定量控制仪 0.558253 0.286837
      称重控制显示器 0.315756 0.865756
      数字称重显示器 0.424751 0.99624
      重量变送器 0.308063 0.799514
      米重控制器 0.520589 0.122451
      智能定量控制仪 0.201729 0.643494
      称重plc模块 0.15763 0.550221
      多通道称重仪表 0.024075 0.897849
      电子称重仪 0.837979 0.146595
      称重控制仪 0.952152 0.839679
      称重显示仪 0.6024 0.303467
      称重显示控制仪 0.846591 0.814
      定量控制器 0.69198 0.297205
      定量称重控制器 0.840508 0.005471
      自动称重控制器 0.575276 0.708571
      智能称重控制器 0.603232 0.909495
      称重配料控制器 0.799123 0.336579
      配料称重控制器 0.739679 0.707826
      数显称重仪 0.082972 0.496793
      动态称重控制器 0.338897 0.54421
      称重信号变送器 0.094517 0.384559
      智能称重变送器 0.902674 0.110961
      高精度称重变送器 0.925313 0.477797
      数字称重变送器 0.071613 0.763053
      皮带称重控制器 0.639475 0.554396
      智能称重显示仪 0.0633 0.094587
      自动称重控制仪 0.136313 0.90864
      称重定量控制器 0.72472 0.374952
      配料显示控制器 0.395115 0.740992
      自动称重仪 0.182738 0.80876
      工业称重仪 0.210689 0.901355
      数字称重仪 0.275814 0.329582
      配料机控制器 0.727059 0.133736
      动态称重仪 0.361603 0.293063
      智能称重仪 0.534454 0.107593
      称重配料控制仪 0.664291 0.141767
      定量包装秤仪表 0.262888 0.005496
      自动定量包装秤仪表 0.217656 0.659798
      多通道称重变送器 0.78423 0.255221
      高精度称重仪 0.941888 0.501961
      称重仪表控制器 0.768322 0.318946
      皮带秤称重控制仪表 0.715205 0.433656
      称重压力变送器 0.422434 0.266566
      搅拌站配料控制器 0.532041 0.380205
      防爆称重仪 0.098403 0.63598
      精密称重仪 0.447324 0.414249
      称重显示器控制器 0.115633 0.795268
      配料定量控制器 0.142529 0.37442
      灌装机称重控制器 0.293412 0.855589
      液体定量流量控制器 0.447356 0.062879
      流量定量控制器 0.587997 0.873891

      产品分类
      常见问题
      行业新闻 当前位置:网站首页 >> 技术中心 >> 行业新闻
        作者:网站管理员 来源:本站原创 日期:2019/8/28 14:21:37 点击:678 属于:行业新闻

        一、为什么需要垃圾回收

        如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。

        二、哪些内存需要回收?

        哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?

        1、引用计数法

        这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数值为0的对象就是不可能再被使用的。这种算法使用场景很多,但是,Java中却没有使用这种算法,因为这种算法很难解决对象之间相互引用的情况。看一段代码:

        Java垃圾回收(GC)机制详解

        看下运行结果:

        GC 4417K->288K(61440K), 0.0013498 secs]
        [Full GC 288K->194K(61440K), 0.0094790 secs]
        


        看到,两个对象相互引用着,但是虚拟机还是把这两个对象回收掉了,这也说明虚拟机并不是通过引用计数法来判定对象是否存活的。

        2、可达性分析法

        这个算法的基本思想是通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。

        那么问题又来了,如何选取GCRoots对象呢?在Java语言中,可以作为GCRoots的对象包括下面几种:

        (1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。

        (2). 方法区中的类静态属性引用的对象。

        (3). 方法区中常量引用的对象。

        (4). 本地方法栈中JNI(Native方法)引用的对象。

        下面给出一个GCRoots的例子,如下图,为GCRoots的引用链。

        Java垃圾回收(GC)机制详解


        由图可知,obj8、obj9、obj10都没有到GCRoots对象的引用链,即便obj9和obj10之间有引用链,他们还是会被当成垃圾处理,可以进行回收。

        三、四种引用状态

        在JDK1.2之前,Java中引用的定义很传统:如果引用类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过于狭隘,一个对象只有被引用或者没被引用两种状态。我们希望描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用4种,这4种引用强度依次减弱。

        1、强引用

        代码中普遍存在的类似"Object obj = new Object()"这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。

        2、软引用

        描述有些还有用但并非必需的对象。在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。Java中的类SoftReference表示软引用。

        3、弱引用

        描述非必需对象。被弱引用关联的对象只能生存到下一次垃圾回收之前,垃圾收集器工作之后,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。Java中的类WeakReference表示弱引用。

        4、虚引用

        这个引用存在的唯一目的就是在这个对象被收集器回收时收到一个系统通知,被虚引用关联的对象,和其生存时间完全没关系。Java中的类PhantomReference表示虚引用。

        Java垃圾回收(GC)机制详解


        对于可达性分析算法而言,未到达的对象并非是“非死不可”的,若要宣判一个对象死亡,至少需要经历两次标记阶段。

        1. 如果对象在进行可达性分析后发现没有与GCRoots相连的引用链,则该对象被第一次标记并进行一次筛选,筛选条件为是否有必要执行该对象的finalize方法,若对象没有覆盖finalize方法或者该finalize方法是否已经被虚拟机执行过了,则均视作不必要执行该对象的finalize方法,即该对象将会被回收。反之,若对象覆盖了finalize方法并且该finalize方法并没有被执行过,那么,这个对象会被放置在一个叫F-Queue的队列中,之后会由虚拟机自动建立的、优先级低的Finalizer线程去执行,而虚拟机不必要等待该线程执行结束,即虚拟机只负责建立线程,其他的事情交给此线程去处理。

        2.对F-Queue中对象进行第二次标记,如果对象在finalize方法中拯救了自己,即关联上了GCRoots引用链,如把this关键字赋值给其他变量,那么在第二次标记的时候该对象将从“即将回收”的集合中移除,如果对象还是没有拯救自己,那就会被回收。如下代码演示了一个对象如何在finalize方法中拯救了自己,然而,它只能拯救自己一次,第二次就被回收了。具体代码如下:

        Java垃圾回收(GC)机制详解
        Java垃圾回收(GC)机制详解

        运行结果如下:

        leesfnullfinalize method executed!leesf
        yes, i am still alive :)
        no, i am dead : (
        


        由结果可知,该对象拯救了自己一次,第二次没有拯救成功,因为对象的finalize方法最多被虚拟机调用一次。此外,从结果我们可以得知,一个堆对象的this(放在局部变量表中的第一项)引用会永远存在,在方法体内可以将this引用赋值给其他变量,这样堆中对象就可以被其他变量所引用,即不会被回收。

        四、方法区的垃圾回收

        方法区的垃圾回收主要回收两部分内容:1. 废弃常量。2. 无用的类。既然进行垃圾回收,就需要判断哪些是废弃常量,哪些是无用的类。

        如何判断废弃常量呢?以字面量回收为例,如果一个字符串“abc”已经进入常量池,但是当前系统没有任何一个String对象引用了叫做“abc”的字面量,那么,如果发生垃圾回收并且有必要时,“abc”就会被系统移出常量池。常量池中的其他类(接口)、方法、字段的符号引用也与此类似。

        如何判断无用的类呢?需要满足以下三个条件

        1. 该类的所有实例都已经被回收,即Java堆中不存在该类的任何实例。

        2. 加载该类的ClassLoader已经被回收。

        3. 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

        满足以上三个条件的类可以进行垃圾回收,但是并不是无用就被回收,虚拟机提供了一些参数供我们配置。

        五、垃圾收集算法

        1、标记-清除(Mark-Sweep)算法

        这是最基础的算法,标记-清除算法就如同它的名字样,分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。这种算法的不足主要体现在效率和空间,从效率的角度讲,标记和清除两个过程的效率都不高;从空间的角度讲,标记清除后会产生大量不连续的内存碎片, 内存碎片太多可能会导致以后程序运行过程中在需要分配较大对象时,无法找到足够的连续内存而不得不提前触发一次垃圾收集动作。标记-清除算法执行过程如图:

        Java垃圾回收(GC)机制详解


        2、复制(Copying)算法

        复制算法是为了解决效率问题而出现的,它将可用的内存分为两块,每次只用其中一块,当这一块内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已经使用过的内存空间一次性清理掉。这样每次只需要对整个半区进行内存回收,内存分配时也不需要考虑内存碎片等复杂情况,只需要移动指针,按照顺序分配即可。复制算法的执行过程如图:

        Java垃圾回收(GC)机制详解


        不过这种算法有个缺点,内存缩小为了原来的一半,这样代价太高了。现在的商用虚拟机都采用这种算法来回收新生代,不过研究表明1:1的比例非常不科学,因此新生代的内存被划分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor。每次回收时,将Eden和Survivor中还存活着的对象一次性复制到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Survivor空间。

        HotSpot虚拟机默认Eden区和Survivor区的比例为8:1,意思是每次新生代中可用内存空间为整个新生代容量的90%。当然,我们没有办法保证每次回收都只有不多于10%的对象存活,当Survivor空间不够用时,需要依赖老年代进行分配担保(Handle Promotion)。

        3、标记-整理(Mark-Compact)算法

        复制算法在对象存活率较高的场景下要进行大量的复制操作,效率很低。万一对象100%存活,那么需要有额外的空间进行分配担保。老年代都是不易被回收的对象,对象存活率高,因此一般不能直接选用复制算法。根据老年代的特点,有人提出了另外一种标记-整理算法,过程与标记-清除算法一样,不过不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉边界以外的内存。标记-整理算法的工作过程如图:

        Java垃圾回收(GC)机制详解


        4、分代收集算法

        根据上面的内容,用一张图概括一下堆内存的布局

        Java垃圾回收(GC)机制详解


        现代商用虚拟机基本都采用分代收集算法来进行垃圾回收。这种算法没什么特别的,无非是上面内容的结合罢了,根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法。大批对象死去、少量对象存活的(新生代),使用复制算法,复制成本低;对象存活率高、没有额外空间进行分配担保的(老年代),采用标记-清理算法或者标记-整理算法。

        六、垃圾收集器

        垃圾收集器就是上面讲的理论知识的具体实现了。不同虚拟机所提供的垃圾收集器可能会有很大差别,我们使用的是HotSpot,HotSpot这个虚拟机所包含的所有收集器如图:

        Java垃圾回收(GC)机制详解


        上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,那说明它们可以搭配使用。虚拟机所处的区域说明它是属于新生代收集器还是老年代收集器。

        多说一句,我们必须明确一个观点:没有最好的垃圾收集器,更加没有万能的收集器,只能选择对具体应用最合适的收集器。这也是HotSpot为什么要实现这么多收集器的原因。OK,下面一个一个看一下收集器。

        1、Serial收集器

        最基本、发展历史最久的收集器,这个收集器是一个采用复制算法的单线程的收集器,单线程一方面意味着它只会使用一个CPU或一条线程去完成垃圾收集工作,另一方面也意味着它进行垃圾收集时必须暂停其他线程的所有工作,直到它收集结束为止。后者意味着,在用户不可见的情况下要把用户正常工作的线程全部停掉,这对很多应用是难以接受的。不过实际上到目前为止,Serial收集器依然是虚拟机运行在Client模式下的默认新生代收集器,因为它简单而高效。用户桌面应用场景中,分配给虚拟机管理的内存一般来说不会很大,收集几十兆甚至一两百兆的新生代停顿时间在几十毫秒最多一百毫秒,只要不是频繁发生,这点停顿是完全可以接受的。Serial收集器运行过程如下图所示:

        Java垃圾回收(GC)机制详解


        说明:1. 需要STW(Stop The World),停顿时间长。2. 简单高效,对于单个CPU环境而言,Serial收集器由于没有线程交互开销,可以获取最高的单线程收集效率。

        2、ParNew收集器

        ParNew收集器其实就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集外,其余行为和Serial收集器完全一样,包括使用的也是复制算法。ParNew收集器除了多线程以外和Serial收集器并没有太多创新的地方,但是它却是Server模式下的虚拟机首选的新生代收集器,其中有一个很重要的和性能无关的原因是,除了Serial收集器外,目前只有它能与CMS收集器配合工作(看图)。

        CMS收集器是一款几乎可以认为有划时代意义的垃圾收集器,因为它第一次实现了让垃圾收集线程与用户线程基本上同时工作。ParNew收集器在单CPU的环境中绝对不会有比Serial收集器更好的效果,甚至由于线程交互的开销,该收集器在两个CPU的环境中都不能百分之百保证可以超越Serial收集器。当然,随着可用CPU数量的增加,它对于GC时系统资源的有效利用还是很有好处的。它默认开启的收集线程数与CPU数量相同,在CPU数量非常多的情况下,可以使用-XX:ParallelGCThreads参数来限制垃圾收集的线程数。ParNew收集器运行过程如下图所示:

        Java垃圾回收(GC)机制详解


        3、Parallel Scavenge收集器

        Parallel Scavenge收集器也是一个新生代收集器,也是用复制算法的收集器,也是并行的多线程收集器,但是它的特点是它的关注点和其他收集器不同。介绍这个收集器主要还是介绍吞吐量的概念。CMS等收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是打到一个可控制的吞吐量。所谓吞吐量的意思就是CPU用于运行用户代码时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间),虚拟机总运行100分钟,垃圾收集1分钟,那吞吐量就是99%。另外,Parallel Scavenge收集器是虚拟机运行在Server模式下的默认垃圾收集器。

        停顿时间短适合需要与用户交互的程序,良好的响应速度能提升用户体验;高吞吐量则可以高效率利用CPU时间,尽快完成运算任务,主要适合在后台运算而不需要太多交互的任务。

        虚拟机提供了-XX:MaxGCPauseMillis和-XX:GCTimeRatio两个参数来精确控制最大垃圾收集停顿时间和吞吐量大小。不过不要以为前者越小越好,GC停顿时间的缩短是以牺牲吞吐量和新生代空间换取的。由于与吞吐量关系密切,Parallel Scavenge收集器也被称为“吞吐量优先收集器”。Parallel Scavenge收集器有一个-XX:+UseAdaptiveSizePolicy参数,这是一个开关参数,这个参数打开之后,就不需要手动指定新生代大小、Eden区和Survivor参数等细节参数了,虚拟机会根据当前系统的运行情况手机性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。如果对于垃圾收集器运作原理不太了解,以至于在优化比较困难的时候,使用Parallel Scavenge收集器配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成将是一个不错的选择。

        4、Serial Old收集器

        Serial收集器的老年代版本,同样是一个单线程收集器,使用“标记-整理算法”,这个收集器的主要意义也是在于给Client模式下的虚拟机使用。

        5、Parallel Old收集器

        Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器在JDK 1.6之后的出现,“吞吐量优先收集器”终于有了比较名副其实的应用组合,在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge收集器+Parallel Old收集器的组合。运行过程如下图所示:

        Java垃圾回收(GC)机制详解


        6、CMS收集器

        CMS(Conrrurent Mark Sweep)收集器是以获取最短回收停顿时间为目标的收集器。使用标记 - 清除算法,收集过程分为如下四步:

        (1). 初始标记,标记GCRoots能直接关联到的对象,时间很短。

        (2). 并发标记,进行GCRoots Tracing(可达性分析)过程,时间很长。

        (3). 重新标记,修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,时间较长。

        (4). 并发清除,回收内存空间,时间很长。

        其中,并发标记与并发清除两个阶段耗时最长,但是可以与用户线程并发执行。运行过程如下图所示:


      常见问题