java垃圾回收之Map

     <xs:complexType name="actions_type">

生成类名为ActionsType.java

若改成  <xs:complexType name="actions_type">则生成类名为Actionstype.java

所以——符号是用来作用类名中大小写的。

在hibernate - mapping.dtd转换成java类 全过程及解决办法:

1 、cmd后xjc  - dtd hibernate - mapping.dtd 

出现的现象为:

parsing a schema...
[ERROR] Property 
" Subselect "  is already defined.
  line 
275  of file: / D: / hibernate - mapping - 3.0 .dtd

[ERROR] The following location is relevant to the above error
  line 
268  of file: / D: / hibernate - mapping - 3.0 .dtd

[ERROR] Property 
" Column "  is already defined.
  line 
795  of file: / D: / hibernate - mapping - 3.0 .dtd

[ERROR] The following location is relevant to the above error
  line 
794  of file: / D: / hibernate - mapping - 3.0 .dtd


 

......................................................................

经查明:元素和属性 有共同的名称(如Column)故在产生的java类(get,set方法) 会产生冲突。

解决思路,

1 、更改元素或属性的名称,使其不一致。但在java类转化xml文件时 不能体现原来的dtd文件原意了。舍弃。

2 、通过在java类中生成标注区别。但dtd文件没有提供这样的解决办法,舍弃。

3 、将dtd通过spyxml转换成xsd文件

     
3.1 、cmd,D: > xjc hibernate - mapping.xsd  - p com.hibernatemapping.test 

    
3.2 、出现类似dtd文件转换过程的一样的问题,属性已经存在的问题。

    
3.2 . 1  对转化后的xsd文件内容修改:

将xs:schema xmlns:xs
= " http://www.w3.org/2001/XMLSchema "  elementFormDefault = " qualified "   >

修改为

xs:schema xmlns:xs
= " http://www.w3.org/2001/XMLSchema "  elementFormDefault = " qualified "  xmlns = " http://www.w3.org/1998/Math/MathML "  xmlns:xlink = " http://www.w3.org/1999/xlink "  targetNamespace = " http://www.w3.org/1998/Math/MathML "  xmlns:jaxb = " http://java.sun.com/xml/ns/jaxb "  jaxb:version = " 2.0 " >

 

同时对冲突的所有属性做修改,如

< xs:element ref = " column "  minOccurs = " 0 " />    
 改为:
 
< xs:element ref = " column "  minOccurs = " 0 " >
    
< xs:annotation >< xs:appinfo >
      
< jaxb:property name = " column-element "   />      <!-- 自定义 -->
    
</ xs:appinfo ></ xs:annotation >
</ xs:element >  
当然也可以对属性做出修改的
< xs:attribute name = " class "  type = " xs:NMTOKENS " >
    
< xs:annotation >< xs:appinfo >
      
< jaxb:property name = " clazz "   />
    
</ xs:appinfo ></ xs:annotation >
  
</ xs:attribute >

在重新cmd 后即可成功。
一直以来,都很喜欢用Map,在小规模应用中,用用Map也没什么,但是应用一大,内存应用方面就要注意了。
  几个月前,做项目的时候用到Map,在一篇文章中,我记得说过Map的回收有问题,一试,果然,当设置为null时,还是不能有效进行回收,找了些资料,最后发现了WeakHashMap,当没有指针指向value时,key会被回收,就用它做了个CacheMap,需要多加一个方法
package  org.ofbiz.payment.common;

import  java.util.Iterator;
import  java.util.WeakHashMap;

/**
 * 
@author  zxub 2006-3-22 10:03:22
 
*/
public   class  CacheMap  extends  WeakHashMap
{
    
public  Object getKeyByValue(Object value)
    {
        Object returnValue 
=   null ;
        Object key 
=   null ;
        
for  (Iterator iter  =   this .keySet().iterator(); iter.hasNext();)
        {
            key 
=  iter.next();
            
if  ( this .get(key).equals(value))
            {
                returnValue 
=  key;
                
break ;
            }
        }
        
return  returnValue;
    }
}
  这里的应用刚好与Map相反了,经测试,能有效释放内存。 
 

你可能感兴趣的:(java,Hibernate,JAXB,cmd,null,import)