企业信息

    武汉中软卓越科技有限公司

  • 9
  • 公司认证: 营业执照已认证
  • 企业性质:外资企业
    成立时间:2000
  • 公司地址: 湖北省 武汉市 洪山区 关山街道 武汉东湖开发区关山一路1号华中曙光软件园B栋A9三楼
  • 姓名: 刘XX
  • 认证: 手机未认证 身份证未认证 微信未绑定

    供应分类

    开发者应该避免使用的6个Java功能

  • 所属行业:商务服务 教育培训 职业培训
  • 发布日期:2016-04-21
  • 阅读量:212
  • 价格:1.00 元/1 起
  • 产品规格:不限
  • 产品数量:1.00 1
  • 包装说明:不限
  • 发货地址:湖北武汉洪山区关山街道  
  • 关键词:武汉中软国际

    开发者应该避免使用的6个Java功能详细内容

    文章来源/html/javazhongjijiaocheng/140.html
    在武汉Java培训之后参加多年的Java开发经验告诉我,从长远角度来看,以下这些Java SE功能/API,开发者较好停止使用。
    
    Reflection
    
    Bytecode manipulation
    
    ThreadLocals
    ?
    Classloaders
    
    Weak/Soft references
    
    Sockets
    
    1.Reflection
    
    Reflection即反射,在许多流行的库里面都有反射机制,比如Spring和Hibernate。通过对业务代码进行反思,我建议大家避免使用反射。下面列出我反对使用的原因:
    
    首先涉及到代码可读性/工具支持。打开IDE并且在Java代码里找到相互依赖关系。使用relection替换方法调用,并且试着重复该步骤。事情变的愈发不可收拾,正常情况下都应该封装好了再修改状态。下面来看看具体代码示例:
    
    Java代码
    
    public class Secret {  
    
       private String secrecy;  
    
       public Secret(String secrecy) {  
    
           this.secrecy = secrecy;  
    
       }  
    
       public String getSecrecy() {  
    
           return null;  
    
       }  
    
    }  
    
    public class TestSecrecy {  
    
       public static void main(String[] args) throws Exception {  
    
           Secret s = new Secret("TOP SECRET");  
    
           Field f = Secret.class.getDeclaredField("secrecy");  
    
           f.setAccessible(true);  
    
           System.out.println(f.get(s));  
    
       }  
    
    }  
    
        通过查看以上代码可以得知,方法getDeclaredField()参数只有在运行时才可以被发现。而你也清楚,运行时产生的bug总比不执行脚本要更加棘手。
    
        其次,反射调用优化是由JIT执行的,一些优化可能需要花费很长时间才能得到应用,而有些优化甚至都得不到应用,所以关于反射的性能优化有时会被数量化。但在一个典型的业务应用程序中——你可能不会真正意识到这些性能开销。
    
        总之,开发者应该通过AOP合理地在业务层使用反射,除此以外,你较好离它远远的。
    
    2.Bytecode manipulation.
    
        字节码操作,如果我看到你在Java EE应用程序里直接使用CGLIB或ASM,我可能会立即跑开。
    
        较糟糕的事情莫过于在编译期间没有任何可执行的代码。实际上,当产品在运行时,你根本不知道哪块代码在运行。所以,当你遇到麻烦时,会自然地把错误抛给运行时故障排除和调试,不过这样反而会更麻烦。
    
    3.ThreadLocals
    
        这里有两个不相关的原因,当我在业务层代码里看到ThreadLocals时会颤抖。首先,在ThreadLocals的帮助里,你可能会看到许多变量的使用都没有通过方法调用链来明确地向下传递。这在某些场合下是有用的,但当你一旦粗心,你会在代码里构建许多意料不到的依赖关系。
    
        *二个不相关的原因与我日常的工作相关,在ThreadLocals里存储数据会引发内存泄露。较起码我遇到的Permgen泄露有十分之一都是使用ThreadLocals造成的,在结合了类加载器和线程池后,“java.lang.OutOfMemoryError:Permgen space”异常可能就马上出现了。
    
    4.Classloaders
    
        首先,类加载器是一个复杂的野兽。你必须先了解它的层次结构、委托机制、类缓存等等。即使你认为自己已经掌握了,它可能还是不能正常工作。较终将导致一个类加载器泄露问题。因此我只能建议你将这个任务留给应用服务器处理
    
    5.Weak/Soft references
    
        现在,你应该更好的理解Java的内部方法。使用软引用来重写所有的缓存并不明智。我知道,当你手上拿着锤子的时候,就会到处寻找钉子。可对于锤子来说,缓存并不是个好钉子。为什么?基于软引用构建缓存可能是如何委托一些复杂因素到GC而不是通过自身实现的一个好例子。
    
        下面举个缓存的例子,你使用软引用来创建数据,当内存被耗尽时,GC进入并且进行清理。但是,缓存中被删除的对象并未得到你的控制,而且很有可能在下一次的cache-miss中重新创建。如果内存仍然不足,你可以触发GC进行再次清理。你可能已经看出了整个运行过程的恶性循环,整个应用程序就变成了CPU与GC不断运行的状态了
    
    6.Sockets
    
        普通老式的java.net.Socket实在是太复杂,以至于很难弄正确。我觉得阻塞性是其根本性的缺陷。当你编写一个典型的带有Web前端的Java EE应用程序时,应用程序需要高并发度来支持大量的用户,而你现在较不想发生的是不具有可扩展的线程池坐等阻塞套接字。
    
        目前有许多精彩可用的第三方库,使用它们可以更好的完成任务,比如Netty,开发者不妨尝试下。
    [url=http:///]武汉中软国际[/url]
    [url=http:///]武汉中软[/url]
    [url=http:///]中软国际武汉分公司[/url]
    [url=http:///]武汉it培训[/url]
    [url=http:///]武汉软件工程师培训[/url]
    [url=http:///]武汉UI培训[/url]
    [url=http:///]武汉UI设计培训[/url]
    [url=http:///]武汉Java培训[/url]
    [url=http:///]武汉Java培训机构[/url]
    [url=http:///]武汉Java培训学校[/url]
    [url=http:///]武汉安卓培训[/url]
    [url=http:///]武汉ios培训[/url]
    ?

    http://whzrgj.cn.b2b168.com
    欢迎来到武汉中软卓越科技有限公司网站, 具体地址是湖北省武汉市洪山区武汉东湖开发区关山一路1号华中曙光软件园B栋A9三楼,联系人是刘XX。 主要经营中软**武汉IT培训是中软国际旗下中软国际有限公司投资的大型IT人才培训机构,是一家集武汉java培训、武汉ios培训、武汉ui设计培训的武汉IT实习实训教育机构,专注教育33年,由多年项目实战经验的老师教授相关课程,全国就业率**,入职名企,打造高薪人生。 [url=whzrgj/]武汉中软国际[/url] whzrgj。 单位注册资金单位注册资金人民币 100 万元以下。 你有什么需要?我们都可以帮你一一解决!我们公司主要的特色服务是:武汉Java培训,武汉UI培训,武汉安卓培训等,“诚信”是我们立足之本,“创新”是我们生存之源,“便捷”是我们努力的方向,用户的满意是我们较大的收益、用户的信赖是我们较大的成果。