视窗
loading...
您现在的位置:首页 > IT认证 > JAVA >

优秀的Java程序员必须了解GC的工作原理


  一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能。本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能。

  GC的基本原理

  Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。

  对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为\"不可达的\".GC将负责回收所有\"不可达\"对象的内存空间。

  对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象(详见 参考资料1 )。通过这种方式确定哪些对象是\"可达的\",哪些对象是\"不可达的\".当GC确定一些对象为\"不可达\"时,GC就有责任回收这些内存空间。但是,为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法。这也给Java程序员的开发带来行多不确定性。本文研究了几个与GC工作相关的问题,努力减少这种不确定性给Java程序带来的负面影响。

  增量式GC( Incremental GC )

  GC在JVM中通常是由一个或一组进程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CPU.当GC进程运行时,应用程序停止运行。因此,当GC运行时间较长时,用户能够感到Java程序的停顿,另外一方面,如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,仍然占用大量内存。因此,在设计GC的时候,就必须在停顿时间和回收率之间进行权衡。一个好的GC实现允许用户定义自己所需要的设置,例如有些内存有限有设备,对内存的使用量非常敏感,希望GC能够准确的回收内存,它并不在意程序速度的放慢。另外一些实时网络游戏,就不能够允许程序有长时间的中断。增量式GC就是通过一定的回收算法,把一个长时间的中断,划分为很多个小的中断,通过这种方式减少GC对用户程序的影响。虽然,增量式GC在整体性能上可能不如普通GC的效率高,但是它能够减少程序的最长停顿时间。

  Sun JDK提供的HotSpot JVM就能支持增量式GC.HotSpot JVM缺省GC方式为不使用增量GC,为了启动增量GC,我们必须在运行Java程序时增加-Xincgc的参数。HotSpot JVM增量式GC的实现是采用Train GC算法。它的基本想法就是,将堆中的所有对象按照创建和使用情况进行分组(分层),将使用频繁高和具有相关性的对象放在一队中,随着程序的运行,不断对组进行调整。当GC运行时,它总是先回收最老的(最近很少访问的)的对象,如果整组都为可回收对象,GC将整组回收。这样,每次GC运行只回收一定比例的不可达对象,保证程序的顺畅运行。

  详解finalize函数

  finalize是位于Object类的一个方法,该方法的访问修饰符为protected,由于所有类为Object的子类,因此用户类很容易访问到这个方法。由于,finalize函数没有自动实现链式调用,我们必须手动的实现,因此finalize函数的最后一个语句通常是super.finalize()。通过这种方式,我们可以实现从下到上实现finalize的调用,即先释放自己的资源,然后再释放父类的资源。

  根据Java语言规范,JVM保证调用finalize函数之前,这个对象是不可达的,但是JVM不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次。

  很多Java初学者会认为这个方法类似与C++中的析构函数,将很多对象、资源的释放都放在这一函数里面。其实,这不是一种很好的方式。原因有三,其一,GC为了能够支持finalize函数,要对覆盖这个函数的对象作很多附加的工作。其二,在finalize运行完成之后,该对象可能变成可达的,GC还要再检查一次该对象是否是可达的。因此,使用finalize会降低GC的运行性能。其三,由于GC调用finalize的时间是不确定的,因此通过这种方式释放资源也是不确定的。

  通常,finalize用于一些不容易控制、并且非常重要资源的释放,例如一些I/O的操作,数据的连接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理(包括释放)这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源。

  下面给出一个例子说明,finalize函数被调用以后,仍然可能是可达的,同时也可说明一个对象的finalize只可能运行一次。

  class MyObject{

  Test main; //记录Test对象,在finalize中时用于恢复可达性

  public MyObject(Test t)

  {

  main=t; //保存Test 对象

  }

  protected void finalize()

  {

  main.ref=this;// 恢复本对象,让本对象可达

  System.out.println(\"This is finalize\");//用于测试finalize只运行一次

  }

  }

  class Test {

  MyObject ref;

  public static void main(String[] args) {

  Test test=new Test();

  test.ref=new MyObject(test);

  test.ref=null; //MyObject对象为不可达对象,finalize将被调用

  System.gc();

  if (test.ref!=null) System.out.println(\"My Object还活着\");

  }

  }

  运行结果:

  This is finalize

  MyObject还活着

  此例子中,需要注意的是虽然MyObject对象在finalize中变成可达对象,但是下次回收时候,finalize却不再被调用,因为finalize函数最多只调用一次。

  程序如何与GC进行交互

  Java2增强了内存管理功能, 增加了一个java.lang.ref包,其中定义了三种引用类。这三种引用类分别为SoftReference、WeakReference和PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。这些引用类的引用强度介于可达对象和不可达对象之间。

  创建一个引用对象也非常容易,例如如果你需要创建一个Soft Reference对象,那么首先创建一个对象,并采用普通引用方式(可达对象);然后再创建一个SoftReference引用该对象;最后将普通引用设置为null.通过这种方式,这个对象就只有一个Soft Reference引用。同时,我们称这个对象为Soft Reference 对象。

  Soft Reference的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null.它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory.以下给出这种引用类型的使用伪代码;

  //申请一个图像对象

  Image image=new Image();//创建Image对象

  …

  //使用 image

  …

  //使用完了image,将它设置为soft 引用类型,并且释放强引用;

  SoftReference sr=new SoftReference(image);

  image=null;

  …

  //下次使用时

  if (sr!=null) image=sr.get();

  else{

  //由于GC由于低内存,已释放image,因此需要重新装载;

  image=new Image();

  sr=new SoftReference(image);

  }

  Weak引用对象与Soft引用对象的最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收。Weak引用对象更容易、更快被GC回收。虽然,GC在运行时一定回收Weak对象,但是复杂关系的Weak对象群常常需要好几次GC的运行才能完成。Weak引用对象常常用于Map结构中,引用数据量较大的对象,一旦该对象的强引用为null时,GC能够快速地回收该对象空间。

  Phantom引用的用途较少,主要用于辅助finalize函数的使用。Phantom对象指一些对象,它们执行完了finalize函数,并为不可达对象,但是它们还没有被GC回收。这种对象可以辅助finalize进行一些后期的回收工作,我们通过覆盖Reference的clear()方法,增强资源回收机制的灵活性。

  一些Java编码的建议

  根据GC的工作原理,我们可以通过一些技巧和方式,让GC运行更加有效率,更加符合应用程序的要求。以下就是一些程序设计的几点建议。

  1.最基本的建议就是尽早释放无用对象的引用。大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null.我们在使用这种方式时候,必须特别注意一些复杂的对象图,例如数组,队列,树,图等,这些对象之间有相互引用关系较为复杂。对于这类对象,GC回收它们一般效率较低。如果程序允许,尽早将不用的引用对象赋为null.这样可以加速GC的工作。

  2.尽量少用finalize函数。finalize函数是Java提供给程序员一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。

  3.如果需要使用经常使用的图片,可以使用soft应用类型。它可以尽可能将图片保存在内存中,供程序调用,而不引起OutOfMemory.

  4.注意集合数据类型,包括数组,树,图,链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象(dangling reference),造成内存浪费。

  5.当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。使用增量式GC可以缩短Java程序的暂停时间。

闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梺璇查閸樻粓宕戦幘缁樼厱闁哄洢鍔屾禍鐐烘煥濞戞瑧娲存慨濠呮閹瑰嫰濡搁妷锔惧綒闂備胶鎳撻崵鏍箯閿燂拷

闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梺璇查閸樻粓宕戦幘缁樼厱闁哄洢鍔屾禍鐐烘煥濞戞瑧娲存慨濠呮閹瑰嫰濡搁妷锔惧綒闂備胶鎳撻崵鏍箯閿燂拷

闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曞┑鐘垫暩閸嬫稑螞濞嗘挸绠伴柛婵勫劤閻棗顭块懜闈涘闁绘挻鐩弻娑㈠Ψ閿濆懎濮庨梺璇茬箚閺呯娀寮诲☉姘勃閻犲洦褰冮~鍥⒑閸濆嫭婀版繛鑼枎閻g兘鎮℃惔妯绘杸闂佹悶鍎滅仦鎷樼喖姊绘担绛嬪殭閻庢稈鏅犻幊婵囥偅閸愶絺鍋撻敃鍌涘€婚柦妯侯槼閹芥洟姊洪棃娴ㄥ綊宕曢鈧銊︾鐎n偆鍘遍梺鏂ユ櫅閸橀箖顢旈崼鐔蜂户闂佸搫鍟崐鑽ゅ閽樺褰掓晲閸ャ劌娈岄梺杞扮婢х晫妲愰幘鎰佸悑闁告洦鍘鹃悰銏ゆ倵濞堝灝鏋涙い顓犲厴瀵偊骞樼紒妯轰汗闂佽偐鈷堥崜锕€危鐟欏嫪绻嗛柣鎰典簻閳ь剚鐗犲畷婵婎槾闁逞屽墴濞佳囨儗閸岀偛鏄ラ柍褜鍓氶妵鍕箳瀹ュ洩绐楀┑鐐茬墛缁捇寮婚垾宕囨殕闁逞屽墴瀹曚即寮介鐐殿啈闁瑰吋鐣崝宀€澹曢崗鍏煎弿婵妫楁晶浼存煏閸偄娅嶆慨濠勭帛閹峰懐绮电€n亝鐣伴梻浣告憸閸c儵宕戞繝鍌滄殾闁诡垶鍋婂Ο鍕⒑閸濄儱浠滈柣鏍帶椤繘鎼归崷顓狅紲濠碘槅鍨靛畷鐢稿矗閸℃稒鈷戠痪顓炴噹琚氱紓渚囧枛濞寸兘宕氶幒妤€绫嶉柛顐亝閺呫垽姊洪崨濠冨闁告挻鐩畷銏$鐎n偀鎷虹紓鍌欑劍閳笺倝顢旈崟闈涙闂佸壊鍋呭ú鏍不瑜版帗鐓欓柟娈垮枛椤eジ鏌i幘璺烘灈妤犵偞甯¢獮搴ㄦ寠婢跺矈妲烽梺璇茬箳閸嬬姴螞閸曨厾鐭堟い鎰堕檮閳锋帒霉閿濆嫯顒熼柡鈧导瀛樼厵婵炶尪顔婄花鐣岀磼椤旂⒈鐓兼鐐差儔閺佹劙宕堕埡濠傛櫖闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊瑜夐弸鏍煛閸ャ儱鐏╅梻鍌ゅ灦閺屻劑寮撮悙娴嬪亾閸濄儳涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹
闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋為悧鐘汇€侀弴銏℃櫆闁芥ê顦純鏇熺節閻㈤潧孝闁挎洏鍊濋幃褔宕卞▎鎴犵劶闂佸壊鍋嗛崰鎾剁不妤e啯鐓欓悗娑欋缚閹冲啴鏌h箛锝勯偗闁哄本绋撻埀顒婄秵閸撴瑩寮搁幋锔界厪闁搞儜鍐句純閻庢鍠曠划娆撱€侀弴顫稏妞ゆ挾鍠庢刊浼存⒒閸屾瑨鍏岀紒顕呭灣閺侇噣鏁嶉崟顓濈瑝闂佸搫绋侀崢濂告嫅閻斿吋鐓涢柛銉㈡櫅閺嬫梻绱掗悩鑽ょ暫闁哄本鐩垾锕傚箣濠靛洨浜┑鐘愁問閸犳牠鏌婇敐鍜佹綎闁惧繗顫夌€氭岸鏌涘▎蹇fЦ闁衡偓椤撶儐娓婚柕鍫濇閼茬娀鏌涢埄鍐炬畼闁稿﹥甯″濠氬磼濞嗘垵濡介梺璇″枛閻栫厧鐣烽弴銏″殥闁靛牆鎳愮粵蹇涙⒑閸忛棿鑸柛搴㈠絻閳诲秹鎮╃紒妯煎幍缂傚倷鐒﹂敋缁绢厸鍋撻柣鐔哥矌婢ф鏁Δ鍛;闁稿瞼鍋涚粻瑙勭箾閿濆骸澧柣蹇婃櫆缁绘盯宕奸悤浣圭杹闂佽鍠楅〃鍛村煝閹捐鍨傛い鏃傛櫕娴滎亪姊绘担铏瑰笡闁绘娲熷畷銉р偓锝庡亞閳瑰秴鈹戦悩鍙夊闁稿﹤顭烽弻銈夊箒閹烘垵濮曞┑鐐叉噹濡繂顫忓ú顏勫窛濠电姴鍟惁鐑芥⒑閸涘﹤濮﹀ù婊勭矌閺侇喖螖閳ь剟鍩為幋锔藉亹闁割煈鍋呭В鍕⒑缁嬫鍎愰柣鈺婂灦楠炲啫煤椤忓嫀鈺冩喐瀹ュ鍨傛繝闈涚墐閸嬫捇宕楁径濠佸闂備線鈧偛鑻晶鎾煙瀹曞洤浠遍柡灞芥椤撳ジ宕卞Δ浣烘殶闂傚倷绀侀崯鍧楀箹椤愩倐鍋撳鐓庡闁活煈鍓氱换婵嬫偨闂堟稐绮跺銈嗘处閸欏啫鐣烽姀锝庢▌闂佽鍠楀鑺ヤ繆閹间礁鐓涘ù锝呮啞閸庮亪姊绘担鍛靛綊鎯夋總绋跨;闁绘劗鍎ら崑鍌涚箾閹存瑥鐏柣鎾存礋閺岀喖骞嶉搹顐g彅婵犵鈧偨鍋㈤柡灞界Х椤т線鏌涢幘瀵哥畵闁伙絿鍏橀幃浠嬫濞戞ḿ浜伴梻浣告惈閸燁偄煤閵忥紕顩茬憸鐗堝笚閻撴瑩鏌i幋鐐嗘垹浜搁悽鍛婄厱婵炲棗绻戦ˉ婊堟煃鐟欏嫬鐏撮柟顔界懇瀵爼骞嬮悩杈╃濠电姷鏁搁崑娑㈠箠韫囨拋鍝勨堪閸繄鍔﹀銈嗗笂閼冲爼宕弻銉︾厵闁告垯鍊栫€氾拷闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪Ч濠€渚€姊虹紒妯虹伇婵☆偄瀚板鍛婄瑹閳ь剟寮婚悢鍏尖拻闁圭虎鍠楅鏍⒑闁偛鑻崢鎼佹煟閹虹偛顩柟骞垮灩閳规垹鈧綆浜為敍娑橆渻閵堝棛澧慨妯稿妿缁棃鎼归崗澶婁壕閻熸瑥瀚粈鈧悗瑙勬处閸撴繈鎮橀幒妤佺厽闁绘ê寮堕幖鎰繆椤栨熬宸ュ畝锝呮健椤㈡盯鎮欑划瑙勫濠电偠鎻紞渚€藟閹惧鈻旈柤纰卞墰绾惧ジ妫呴顐㈠箻闁活厽鐟ч埀顒侇問閸犳岸寮繝姘モ偓浣肝旈崨顓狀槹濡炪倖宸婚崑鎾趁归悩灞傚仮婵﹥妞藉畷銊︾節鎼淬垻鏆梻浣呵归敃銉╁垂閸洖绠氶柡鍐ㄧ墕鎯熼梺闈涳紡閸愶絽浜鹃柣鎰劋閳锋垿鏌熺粙鎸庢崳缂佺姵鎹囬弻鐔煎礃閺屻儱寮伴梺绯曟櫆缁嬫帒顕ラ崟顓涘亾閿濆骸澧版い鏃€娲熼弻锝嗘償閿濆棙姣勯柡瀣典邯閹粙顢涘鍗炵厽闂佸搫鐬奸崰鏍箹瑜版帩鏁冩い鎺戝暊閸嬫捇宕稿Δ浣哄幗濠电偞鍨靛畷顒勫几閵堝鐓冪憸婊堝礈閵娧呯闁糕剝绋戠粣妤呮煛瀹ュ骸浜炲☉鎾崇Ч閺屻劌鈹戦崱姗嗘¥缂備讲妾ч崑鎾斥攽閻樺灚鏆╁┑顔芥尦瀹曟劙骞栨笟鍥ㄦ櫆濡炪倖鍔ч梽鍕偂濞嗘挻鐓涢悗锝夋涧娴滄粌鈹戦鐓庘偓褰掑箞閵婏妇绡€闁告劏鏂傛禒銏ゆ倵鐟欏嫭纾搁柛鏂跨Ф閹广垹鈹戠€n亞顦ㄩ梺鎸庣箓濡顢旈崫銉х=闁稿本鑹鹃埀顒勵棑缁牊绗熼埀顒勩€侀弽顓炲耿婵炲棙鍔栧▓浼存⒑鐠恒劌鏋斿┑顔碱嚟缁顫濋懜鐢靛幈闂侀潧顧€缁茶姤淇婇崗绗轰簻闁哄浂婢€閹查箖鏌$仦绋垮⒉鐎垫澘瀚埀顒婄秵娴滅偞绂掗幘顔解拺闁告縿鍎辨禍濂告煕閺冣偓閸ㄧ敻锝炶箛鎾佹椽顢旈崟顓у晣闂備胶绮崝鏍亹閸愨晜鍙忕€光偓閸曨兘鎷洪梺鍛婄☉閿曘儵鎮¢妷褏纾煎璺猴功缁夋椽鏌℃担鐟板闁诡喗鐟╁畷顐﹀礋椤愩垺鏆忓┑锛勫亼閸娿倝宕楀▎鎾崇?闂侇剙绉甸悡鈧梺鎸庣箓閹虫劙寮抽敃鍌涚厱妞ゆ劧绲剧粈鍐煛閸涱喚鍙€闁哄本绋戦埥澶愬础閻愯尙顔囬梻浣筋潐閻忔岸宕愰弴銏犵厴闁硅揪闄勯崐椋庘偓鐟板閸犳牕鈻撻崼鏇熲拺闁告稑饪撮悞濂告煕閵夋垵鎳愰弸鍐╃節濞堝灝鏋熼柕鍥ㄧ洴瀹曟垿骞橀幖顓燁啍闂佺粯鍔曞鍫曀夐姀鈶╁亾鐟欏嫭绀冮柨鏇樺灲閵嗕礁鈻庨幘鏉戞異闂佸啿鎼敃銉︽櫏濠电姷顣槐鏇㈠磻閹达箑纾归柡宥庡幖缁€澶愭煙鏉堝墽鐣遍柛銊ュ€圭换娑橆啅椤旇崵鍑归梺绋块閿曨亪寮婚敓鐘茬闁挎繂鎳嶆竟鏇犵磽閸屾瑨鍏岀紒顕呭灣閹广垽宕奸悢绋垮伎闂侀€炲苯澧撮柡灞诲妼閳规垿宕卞鍡橈骏闂備線娼уΛ娆撳礉濞嗘挸钃熼柨婵嗘閸庣喖鏌曡箛銉у埌妞ゃ儲绻堝铏规兜閸涱厜鎾剁磼椤旇壈瀚扮€规挸瀚板铏规喆閸曨偒妫嗘繝鈷€鍕垫疁鐎殿喗鐓¢獮鏍ㄦ媴閸︻厼寮抽梻浣虹帛濞叉牠宕愰崷顓涘亾濮樼偓瀚�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌涢锝嗙缂佺姷濞€閺岀喖宕滆鐢盯鏌涚€c劌鈧繈寮婚弴鐔虹闁绘劦鍓氶悵鏃堟⒑閹肩偛濡奸柛濠傛健瀵鈽夐姀鐘电杸濡炪倖鎸炬慨浼村磻閻愮儤鈷戦柛鎾村絻娴滆棄霉濠婂簼閭€殿喖顭烽幃銏㈡偘閳ュ厖澹曢梺姹囧灮濞呫儵鎮烽幍顔界槗闂傚倸鍊烽懗鍓佸垝椤栨粍鏆滈柟鐑橆殕閺呮繈鏌曢崼婵愭Ц闁绘挻锕㈤弻鐔告綇妤e啯顎嶉梺绋款儐閸旀瑩寮诲☉妯锋瀻闊浄绲炬晥闂備浇顕栭崰妤呮偡閵夆晛鐓橀柟杈鹃檮閸婄兘鏌涘▎蹇fЦ婵炲拑绻濆娲箹閻愭彃顬堢紓鍌氱Т閿曘倝鏁冮姀锛勭懝闁逞屽墮椤繐煤椤忓嫮顔囬柟鑹版彧缁插潡鎮鹃棃娑掓斀闁宠棄妫楁禍婵嬫煟閳哄﹤鐏︽鐐叉娴狅箓鎮欓鈧崝鍛存⒑闂堟稈搴峰┑鈥虫喘瀹曘垽骞樼紒妯轰画濠电姴锕ょ€氼噣鎯岄幒鏂哄亾鐟欏嫭绀冪紒顔肩焸閸┿垺鎯旈妸銉ь啋閻庤娲栧ú銊╁几閸愵喗鈷掑ù锝呮憸缁夋椽鏌涚€n亷韬€规洘顨呴~婊堝焵椤掆偓椤曪綁骞栨担鍝ョ潉闂佸壊鍋嗛崰鎾诲储閻㈠憡鐓涘璺猴功婢э妇绱掗悩宕囧ⅹ妞ゎ剙锕、姘跺焵椤掑嫬钃熸繛鎴炲焹閸嬫捇鏁愭惔婵囧枤闂佺ǹ瀛╁Λ鍐蓟閿涘嫪娌柛鎾楀嫬鍨辨俊鐐€戦崹鍝劽洪悢闀愮箚闁割偅娲栧婵囥亜閺冨牊鏆滈柛瀣崌瀹曟粏顦寸痪鍙ョ矙閺屾稓浠﹂悙顒傛閻炴熬绠撳铏圭矙濞嗘儳鍓遍梺鍦嚀濞层倝锝炶箛鏇犵<婵☆垵顕ч鎾绘⒑閼姐倕鏋戝鐟版缁傚秵瀵肩€涙ǚ鎷虹紓鍌欑劍閿氶梺鍙夌矌缁辨帡鎮╅搹顐㈤瀺婵烇絽娲ら敃顏堝箖娴犲宸濆┑鐘插€甸崑鎾绘倻閼恒儳鍘介梺闈涚箞閸ㄦ椽寮抽埡鍌樹簻闁挎棁顕ч悘锔芥叏婵犲啯銇濈€规洦鍋婂畷鐔碱敃閿濆棭鍞查梻鍌欒兌缁垶銆冮崨顓囨稑鈽夐姀鈥冲墻濡炪倕绻愬ù鍌毼熼崟顖涒拺闁告繂瀚﹢浼存煟閳哄﹤鐏﹂柣娑卞櫍瀹曞爼顢楁径瀣珫婵犵數鍋為崹鍫曞传鎼淬劌鐒垫い鎺嗗亾闁挎洩濡囧Σ鎰板箻鐎涙ê顎撻梺鍦帛鐢﹥绔熼弴銏♀拻濞达綀濮ょ涵鍫曟煕閿濆繒鐣垫鐐茬箻閺佹捇鏁撻敓锟�闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪箻閹崇偤鏌嗗鍡楁異闂佸疇妗ㄩ懗鍓佺驳韫囨梻绡€闁汇垽娼ф牎闂佺粯妫忛崜娑氭閻愬搫鍐€鐟滄粓鎮㈤崱娑欑厾闁归棿鐒﹀☉褍鈹戦鍏煎枠闁哄本鐩俊鎼佸Ψ閵夈垹浜鹃柛锔诲幗瀹曞弶绻濋棃娑欏窛缂佲檧鍋撻梻浣呵归張顒勫礄鐟欏嫬顕遍柍褜鍓氭穱濠囨倷椤忓嫧鍋撻幇鏉跨柧闁绘ǹ顕х紒鈺呮⒑椤掆偓缁夊瓨顢婇梻浣告啞濞诧箓宕归幍顔句笉闁规儼濮ら悡娆撴倵濞戞瑡缂氱紒鐘崇墬缁绘盯宕奸敐鍛缂備浇椴搁幐濠氬箯閸涱噮妲归幖娣€楅悰銉╂⒒娓氣偓濞艰崵绱為崶鈺佺筏濞寸姴顑愰弫瀣煥濠靛棭妲搁梺鍗炴喘閺岋繝宕堕埡浣圭€婚梺閫炲苯澧伴柛蹇旓耿瀵鈽夐埗鈹惧亾閿曞倸绠f繝闈涙噽閸戝綊姊绘担铏瑰笡缂佽绉电粋宥呪堪閸繄鍘撮梺纭呮彧闂勫嫰宕愰悜鑺ョ厾缁炬澘宕晶顔姐亜閵堝倸浜鹃梻鍌氬€烽悞锕傚箖閸洖绀夐悘鐐靛亾濞呯娀骞栨潏鍓у埌闁搞劍绻冮幈銊ノ熼崹顔惧帿闂佺粯甯熼崑鎰板焵椤掆偓缁犲秹宕曢柆宥呯疇闁圭増婢樼粈澶愭煙缂併垹鏋熼柍閿嬪灴閺屾稑鈽夊鍫濅紣婵犮垻鎳撻崯鎾蓟濞戞ǚ妲堥柛妤冨仧娴煎洤鈹戦垾铏枙闁告挻姘ㄩ幑銏犫攽鐎n偄浠洪梻鍌氱墛閸掆偓闁靛璐熸禍婊堟煥濠靛棗顏柣顓熺懇閺屾盯鍩為幆褌澹曞┑锛勫亼閸婃牕顔忔繝姘;闁瑰墽绮悡鏇㈡煟閺冨牊鏁遍柛瀣ㄥ劦閺屾盯鍩為幆褌澹曞┑锛勫亼閸婃牜鏁幒妤€纾圭憸鐗堝笒閸氬綊鏌嶈閸撶喎顫忓ú顏勭閹兼番鍨婚敍姗€姊洪幖鐐插婵$偘绮欓悰顔跨疀濞戞ê绐涢梺鍝勵槹閸ㄥ綊藝椤撱垺鈷戦柛锔诲幘鐢盯鎮介娑辨疁妞ゃ垺锕㈠畷绋课旀担鍙夊濠电偠鎻徊浠嬪箠濞嗘帇浜归柟鐑樺灥閻濇ê顪冮妶鍡楃瑨闁稿﹦鎳撻悾鐑芥嚑椤戣棄浜炬鐐茬仢閸旀碍銇勯敂璇茬仸闁硅櫕绮忛妵鎰板箳閹捐泛骞嶇紓鍌氬€烽梽宥夊垂瑜版帒鍑犻柣鏂垮悑閻撶喖鏌熼幆褜鍤熼柟鍐叉喘閺岀喖顢欑粵瀣暥闂佸疇妫勯ˇ顖炲煝鎼达絺鍋撻敐搴″缂佹劖顨呴埞鎴︽偐椤愶絽顎忛柣蹇曞仩濡嫰锝為鍡欑=濞达綀娅g敮娑氱磼鐠囪尙澧︾€规洘妞介崺鈧い鎺嶉檷娴滄粓鏌熼崫鍕ら柛鏂跨Т閳规垿顢涘☉娆忓攭闂佸搫鏈惄顖炲极閸屾粍瀚氶柟缁樺笧椤旀帡姊绘担渚敯婵炲懏娲滈幑銏ゅ醇濠垫劖缍庡┑鐐叉▕娴滄粎绮堥崼銉︾厾缁炬澘宕晶顕€鎮介妯哄姦婵﹨娅g划娆忊枎閹冨闂備胶顢婂▍鏇㈠礉濡も偓鍗遍柟鎵閸婄兘鏌涘┑鍡楊伀闁告棑绠戦—鍐Χ閸℃鐟ㄩ柣搴㈠嚬閸欏啴宕哄☉銏犵闁挎梻鏅崢浠嬫⒑缂佹ɑ鈷掗弸顏呫亜閵夈儺鍎旈柡宀€鍠栭幃鍓т沪鐟欙絾鐎伴梻浣告惈閻寰婇崐鐔轰簷闂備礁鎲¢崝鎴﹀礉鐎n喖绠i柣鎴eГ閳锋垿鏌i悢绋款棆闁伙綆鍙冮弻娑㈠Ω閵壯呅ㄩ梺鎸庣箘閸嬫盯鍩為幋鐘亾閿濆懐浠涢柡鍛仱濮婃椽宕楅梻纾嬪焻闂佺ǹ姘﹀▍鏇犵矉瀹ュ應鏋庨柟鍓цˉ閹风粯绻涙潏鍓у埌闁硅绻濋獮鍡涘醇閻旇櫣顔曢柣鐘叉厂閸涱垱娈奸梻浣筋嚃閸ㄤ即鎯岄崒鐐偓浣糕枎閹炬潙鈧攱銇勯幒鍡椾壕闁瑰吋娼欓敃顏勵潖閾忕懓瀵查柡鍥╁仜閳峰绱撴担鍓插剱閻㈩垽绻濋獮鍐灳閺傘儲鐎婚梺瑙勫閺呮瑧鑺辨繝姘拺闁革富鍘兼禍鐐亜閵娿儲鍤囩€规洦鍨堕幃褔宕奸姀鈺傜カ闂備礁鎼ˇ浼村春閸縿鈧帗绻濆顓犲帾闂佸壊鍋呯换鍐夐悙宸唵閻犲搫鎼顓㈡煛鐏炲墽娲存鐐瘁缚閹瑰嫰鎮滃Ο灏栧亾婵犳碍鈷戝ù鍏肩懅閹ジ鏌涜箛鏃撹€跨€殿噮鍋婇獮鍥级閸喛鈧灝鈹戦悙鍙夘棡闁搞劎鎳撳嵄闁搞儺鍓氶埛鎺懨归敐鍛暈闁哥喓鍋ら弻娑㈠棘鐠恒劎顔掗悗娈垮枟閻擄繝宕洪埄鍐╁闁告洖澧庣粔顔姐亜閵忥紕娲撮柟顔界懅閸掓帞鎲撮崟顐紪闂傚倸鍊风粈渚€濡堕幖浣哥劦妞ゆ帊鑳堕埥澶屸偓瑙勬尭濡繈寮诲☉妯锋斀闁割偅绻傛俊娲⒑闁稓鈹掗柛鏂跨Ф閹广垹鈹戠€n亞锛滈梺闈涚墕濞层倝骞冮幋锔解拻濞达絽鎲¢幆鍫ユ煠濞茶鐏﹂柟顔ㄥ洤绠婚柤濮愬€曠粊锕€鈹戦濮愪粶闁稿鎸婚妵鍕閿涘嫭鍣伴梺纭呮珪閻楃娀宕洪埄鍐瘈闁稿本绋戦埀顒佺洴濮婂宕掑顑藉亾閻戣姤鍤勯柛顐f礀缁犵娀鏌熼崜褏甯涢柛瀣ㄥ€濋弻鏇熺箾瑜嶉崯顐︽倶婵犲洦鍊垫鐐茬仢閸旀碍绻涚仦鍌氣偓婵嗙暦閻熸壋鏀介悗锝庡亞閸欏棝姊洪崫鍕窛闁稿鐩崺鈧い鎺嗗亾缂傚秴锕獮鍐晸閻樺弬銊╂煥閺傚灝鈷旀い鏃€娲熷娲偡闁箑娈堕梺绋匡攻閻楃娀鐛€n亖鏀介柟鎯у帨閸嬫捇宕稿Δ浣哄幗濠德板€愰崑鎾绘煟濡も偓缁绘帒顕h閸┾偓妞ゆ帒瀚埛鎴︽⒑椤愩倕浠滈柤娲诲灡閺呭墎鈧稒锕╁▓浠嬫煟閹邦垰鐨洪弫鍫濐渻閵堝啫鐏柣鐔叉櫊閻涱噣宕卞鍏夹╅梺鑽ゅ枑閻熼亶姊介崟顓熷床婵犻潧顑嗛崑銊╂⒒閸喓鈼ョ紒顔挎硾閳规垿鍩ラ崱妞剧凹濡炪們鍔岄幊妯猴耿娴i€涚箚闁绘劕妯婇崕蹇旂箾鐎电ǹ鍘撮柟顔肩-缁辨帒螣閸︻厾鐣鹃梻渚€娼ч悧鍡涘箠鎼淬劌姹查柣鏃囨濡垶鏌熼鍡曠娴狀噣姊洪崫鍕効缂佺粯绻傞悾鐑藉箳閹存梹顫嶉梺鍛婎殘閸嬫稒淇婃總鍛娾拻濞达絽鎳欑憴鍕垫闁告縿鍎插畷鏌ユ煙閻戞﹩娈旈柣鎺戠仛閵囧嫰骞掗幋婵囩亾濠电偛鍚嬮崝娆撳蓟閻旂厧浼犻柕澶婃川椤㈠﹪鎮樼€n亖鏀介柣妯肩帛濞懷勪繆椤愶絿娲寸€殿喗濞婇弫鍌炴嚍閵夈儱浼庢繝纰樻閸ㄤ即鎮樺┑瀣亗闁规壆澧楅悡鏇㈡倵閿濆骸浜滃┑顔碱槺缁辨帗娼忛妸锕€闉嶉梺鐟板槻閹虫劙骞忚ぐ鎺濇晬婵犲﹤鎳愰悰銉╂⒑閼姐倕鏋戠紒顔煎閺呰泛螖閸涱厼鐎梺鍓茬厛閸n喖岣块弽銊х鐎瑰壊鍠曠花鑽ょ磼閻樺崬宓嗘鐐寸墱閸掓帡宕楁径濠佸闂佹儳娴氶崑鍡樼閻愮儤鈷掗柛灞剧懆閸忓矂鏌熼搹顐e磳鐎规洜鏁诲浠嬵敇閻愭鍞甸梻浣芥硶閸o箓骞忛敓锟�闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪Ч濠€渚€姊虹紒妯虹伇婵☆偄瀚板鍛婄瑹閳ь剟寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磽娴e搫啸濠电偐鍋撻梺鍝勭灱閸犳牠鐛幋锕€绠涙い鎺戝€哥敮鍧楁⒒娴e憡鎯堟俊顐g懅閸掓帒顓兼径濞箓鏌涢弴銊ョ仩缂佺姵鐩弻娑㈠箻閼艰泛鍘¢梺鍝勬婵妲愰幘瀛樺闁圭粯甯婃竟鏇㈡⒒娴h櫣銆婇柛鎾寸箓閻滆崵鎹勯妸褌绗夋俊銈忕到閸燁垶鎮″▎鎾村€甸柣銏犳啞濞呮粎绱掓潏顐g彧闁靛洤瀚粻娑㈠箻鐠轰警鏆梻浣告惈椤戝嫮娆㈠璺鸿摕婵炴垯鍩勯弫鍐煥濠靛棙顥犳い锔哄姂濮婅櫣绮欓崠鈥冲闂佽桨鐒﹂幃鍌炲箚閳ь剚銇勮箛鎾跺⒈闁轰礁娲弻锝夊箛椤撶喓绋囧銈呭缁嬫垿鍩為幋锔藉€烽柟缁樺笚閸婎垶姊洪崨濠冣拹闁荤啿鏅涢锝囨嫚濞村顫嶉梺闈涚箳婵牓鍩¢崨顔惧弳闂佸搫鍊搁悘婵嬪煕閺冨牊鐓熼柟鎹愬蔼閸忓瞼绱掓潏銊﹀鞍闁瑰嘲鎳愮划娆愭償閹惧厖澹曢梺闈╁瘜閸樹粙寮冲⿰鍫熺叆闁绘柨鎼ⅷ闂侀€炲苯鍘哥紒鈧担鐣屼簷濠电偠鎻徊鍧楀箠閹炬椿鏁侀柟鎯у绾捐棄霉閿濆懎顥忛柛搴$箻閺岋繝宕ㄩ鍓х杽濡炪們鍨哄ú鐔煎极閸屾粍鍠嗛柨婵嗘椤忓綊姊绘担钘夊惞闁哥姵鍔欓幃鐑藉Ψ瑜夐崑鎾愁潩閻撳骸绠诲┑鐐叉閸ㄤ粙骞婇悩娲绘晢闁稿本绮g槐鑼磽閸屾艾鈧兘鎮為敃鍌涙櫔闂備浇顕х换鎰邦敋椤撱垹鐒垫い鎺嶇贰閸熷繘鏌涢敐搴℃珝鐎规洘鍨剁换婵嬪炊閵夈垹浜惧ù锝囩《閺嬪酣鏌熼悙顒佺稇濞寸姴銈搁幃妤呭礂婢跺﹣澹曞┑鐘垫暩婵挳宕导鏉懳фい鎰ㄦ噰閺€浠嬫煟濡澧柛鐔风箻閺屾盯鎮╅幇浣圭杹婵犵绻濆ḿ褔鍩ユ径鎰潊闁绘ḿ顣槐閬嶆⒒娴g儤鍤€濠⒀呮櫕閸掓帡顢涢悙鏉戜簵闂佸憡鍔︽禍婵嬪窗閹邦厾绡€濠电姴鍊绘晶鏇犵磼閳ь剟宕奸悢铏诡啎闂佺硶鍓濊摫閻忓浚鍘鹃惀顏堝箚瑜忕粔娲煛鐏炲墽鈽夐柍瑙勫灴瀹曠喖顢曢姀鐘樻垹绱撻崒娆掝唹闁稿鎸搁埞鎴︽偐閸欏顦╅梺绋匡功閺佸寮婚妸銉㈡斀闁糕剝渚楅埀顒侇殜閺岋紕鈧綆鍓欓弸娑㈡煛鐏炲墽鈯曢柟顖涙閺佸秹宕熼幊宄版处閻撴盯鎮橀悙鎻掆挃婵炴彃顕埀顒侇問閸犳骞愰搹顐$箚闁归棿绀佸敮闂侀潧锛忛崨顔兼灕闂傚倷娴囧畷鐢稿窗閹邦喖鍨濋幖娣灪濞呯姵淇婇妶鍛殲闁哄棙绮嶆穱濠囧Χ閸涱喖娅ら梺绋款儏閸婂潡寮诲鍫闂佸憡鎸婚悷鈺呭灳閺冨牆绀冩い鏂挎瑜旈弻娑㈠焺閸愮偓鐣奸梺鑽ゅ枂閸旀垵顫忓ú顏勭閹兼番鍨婚埞娑欑節绾版ǚ鍋撻搹顐㈢獩闂佸憡甯楃敮鈥崇暦婵傜ǹ唯闁挎棁濮ら鐔兼⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞闁靛ě鍛獎闂備礁澹婇崑鍡涘窗閸℃ḿ顩烽柛顐犲灮绾惧ジ鎮楅敐搴′航闁稿簺鍎茬换娑㈠礂閼测晛鈪归梺瀹狀潐閸ㄥ潡骞冮埡浣烘殾闁搞儴鍩栧▓褰掓⒒娴h櫣甯涢悽顖ょ磿缁寮介鐐舵憰闂佺粯妫佸▍锝囧婵傚憡鐓忛煫鍥ㄦ礀鏍¢梺璇茬箰閻楀棝鍩為幋锕€鐓¢柛鈩冦仦缁ㄥジ姊洪幐搴㈢8闁搞劏妫勯锝嗙節濮橆厽娅滄繝銏f硾椤戝懏绂嶅⿰鍛=濞达絽澹婇崕鎰亜閹寸偟鎳冮摶鐐烘煕閳╁啰鎳呯痪鎹愬亹缁辨挻鎷呴棃娑氫患濡ょ姷鍋為崝娆撳蓟濞戞埃鍋撻敐搴′簼鐎规洖鏈幈銊︾節閸曨厼绗¢梺鐟板槻閹虫﹢骞冮悜鑺ョ劷闁挎洍鍋撴繛鍫熺箘缁辨捇宕掑▎鎴М濡炪倖鍨靛Λ娑㈠极椤曗偓楠炴帒螖娴i晲鎮f繝鐢靛█濞佳囶敄閸涱垳涓嶉柣鐔稿櫞瑜版帗鏅查柛娑卞枟閸犳劙姊洪幐搴b姇闁烩晩鍨伴~蹇撁洪鍕炊闂佸憡娲﹂崢婊堟偐缂佹ḿ鍘遍梺鍝勫€稿ḿ锟犲矗閸曨垱鐓忛柛鈩冾殕閸ゅ洭鏌熼鐣岀煉闁瑰磭鍋ゆ俊鐤槻鐎殿喗濞婂缁樻媴閾忕懓绗″┑鐐插级閻楃姴鐣烽幇鏉挎嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹:webmaster@jscj.com闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梺璇查閸樻粓宕戦幘缁樼厱闁哄洢鍔屾禍鐐烘煥濞戞瑧娲存慨濠冩そ閹兘寮舵惔鎾村瘱缂傚倷绶¢崳顕€宕归崼鏇炵畺闁跨喓濮甸崑鍕煙閼测晛浠掔紒銊嚙椤啴濡堕崱妤€袝闂佺ǹ顑呯€氫即鎮伴鍢夌喖鎳栭埡鍐跨床濠电偠鎻徊浠嬪箹椤愶箑鍌ㄩ柟缁㈠枟閻撴稓鈧厜鍋撻悗锝庡墰琚﹂梻浣芥〃缁€渚€宕愭繝姘闁告洦鍨版儫閻熸粌绻樺畷銏ゎ敍閻愮补鎷绘繛杈剧秬婵倝濡撮崘顏嗙<闁逞屽墯閹峰懘鎼归崷顓犲帬闁荤喐绮庢晶妤冩暜閹烘鍑犲〒姘e亾闁哄瞼鍠栧畷婊嗩槾閻㈩垱鐩弻锟犲川椤旇棄鈧劙鏌$仦璇插闁诡喓鍊濆畷鎺戔槈濮楀棔绱�4008816886

相关文章

无相关信息
更新时间2022-03-13 10:53:43【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻鐔兼⒒鐎靛壊妲紒鐐劤濞硷繝寮婚悢琛″亾閻㈢櫥鐟版毄缂傚倷璁查崑鎾斥攽閻樺弶澶勯柣鎾冲暟閹茬ǹ饪伴崼婵堫槶濠殿喗枪濞夋稒顢婇梻浣告啞濞诧箓宕规导鏉戠闁规儼濮ら悡鏇㈡煃閳轰礁鏋ゆ繛鍫熸⒐閵囧嫯绠涢敐鍕仐闂佸搫鏈粙鎴﹀煝鎼淬倗鐤€闁哄洨濯崯瀣⒒娴e憡鎯堥柣顓烆槺缁辩偞绗熼埀顒勬偘椤曗偓瀹曞爼顢楁径瀣珨闂備礁鎲℃笟妤呭窗濡ゅ懏鍎婃繝濠傜墛閳锋帒霉閿濆懏鍤堢憸鐗堝俯閺佸嫰鏌涢埄鍐槈缂佺姵鐓¢弻娑㈠Ψ椤旂厧顫梺绋款儐钃遍柕鍥у瀵潙螖閳ь剚绂嶆ィ鍐╁€甸悷娆忓缁€鈧紓鍌氱Т閿曨亪濡存担绯曟瀻闁规儳纾悡鎴︽⒑闂堟冻绱¢柛鏇炲绾偓濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻戦妵鍕箻閸楃偟浠肩紒鐐劤椤兘寮婚悢鐓庣鐟滃繒鏁☉銏$厽闁规儳鐡ㄧ粈瀣煛鐏炵偓绀冪€垫澘瀚埀顒婄秵娴滅偞绂掗幘顔解拺闁稿繐鍚嬮妵鐔兼煕閵娿倕宓嗛柛鈹垮灲楠炴ê煤缂佹ɑ娅囬梻渚€娼х换鍡涘疾濠婂應鍋撻棃娑氱劯婵﹥妞藉Λ鍐ㄢ槈濮橆剦鏆繝纰樻閸嬪懘鎮烽埡鍕紓闂備胶纭堕崜婵婂綘婵炲瓨绮嶇划鎾诲蓟閿熺姴纾兼慨姗嗗墰濞堝綊姊洪崨濠冣拻闁哥姵鐗犲濠氭偄閼测晛绁﹂梺鍓茬厛閸犳碍瀵奸崼銉︹拺閺夌偞澹嗛崝宥夋煙閻熺増鍠樼€殿噮鍋婇獮妯肩磼濡粯顏熼梻浣芥硶閸o箓骞忛敓锟�

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话: