小编Ama*_*ora的帖子

为什么以及何时在JAXB中需要JAXBElement?

我刚刚学习JAXB(用于XML绑定的Java体系结构).通过一些消息来源,我想到了一个疑问JAXBElement.

Oracle文档说:

When XML element information can not be inferred by the derived Java representation of the XML content, a JAXBElement object is provided. This object has methods for getting and setting the object name and object value. 链接在这里

这是否意味着JAXBElement在Schema定义的数据类型和Java数据类型之间没有直接映射时需要使用?

此外,在下面列出的一个代码示例中.我从这里跟随:

 ObjectFactory factory = new ObjectFactory();

    UserT user = factory.createUserT();
    user.setUserName("Sanaulla");
    ItemT item = factory.createItemT();
    item.setItemName("Seagate External HDD");
    item.setPurchasedOn("August 24, 2010");
    item.setAmount(new BigDecimal("6776.5"));

    ItemListT itemList = factory.createItemListT();
    itemList.getItem().add(item);

    ExpenseT expense = factory.createExpenseT();// we get …
Run Code Online (Sandbox Code Playgroud)

java xml oracle xsd jaxb

13
推荐指数
1
解决办法
1万
查看次数

Java 6和Java 7中的字符串文字的垃圾收集(Oracle Jdk)

根据著名本书深入浅出Java页面661:

" Garbage Collector doesn't go inside String pool."

在阅读了关于SO的类似问题后,我发现了如下混合答案:

  1. 字符串文字的垃圾收集与普通对象相同. 读这个
  2. 一些答案反过来说.在这里阅读答案.

我的问题是:

  1. 如何在Java 6及之前收集字符串文字垃圾?

  2. 因为在Java 7中,将在堆上创建字符串文字,与Java 6相比,Java 7中字符串文字的垃圾收集将如何不同?

java string garbage-collection

11
推荐指数
1
解决办法
555
查看次数

StackOverflowError何时发生?

据Oracle称,StackOverflowError是:

在发生堆栈溢出时抛出,因为应用程序过于严重.

我知道递归是什么,通常递归函数,如果没有正确终止,会导致StackOverflowError.为了检查StackOverflowError抛出之前发生的递归调用的数量,我写了这段代码:

package ErrorCases;

public class StackOverFlowError {
static int i=0;
void a()
{

    //System.out.println("called "+(++i));
    try{
        ++i;
    a();
    }catch(Error e)
    {
        System.out.println(e.getClass());
        System.out.println(i);
    }
}

public static void main(String[] args) {

       new StackOverFlowError().a();

   }

}
Run Code Online (Sandbox Code Playgroud)

在JVM抛出StackOverflowError之前,i给出递归调用计数的值a().每次运行
的价值i都不同,如:

output 1: class java.lang.StackOverflowError
           10466
Output 2: class java.lang.StackOverflowError
           10470
Run Code Online (Sandbox Code Playgroud)

我的疑问是?

  1. 在JVM抛出之前递归有多深 StackOverflowError

  2. 一旦StackOverflowError投掷,我们可以恢复吗?

java stack-overflow recursion stack

8
推荐指数
1
解决办法
3573
查看次数

为什么我们不考虑堆栈帧大小而计算递归过程的空间复杂度?

考虑的情况下,Merge Sort对一个int Array含有n元素,我们需要大小的附加阵列n,以便执行merges.We丢弃到底附加阵列though.So归并排序的空间复杂度出来是O(n).但是如果你看看递归mergeSort过程,在每次递归调用时都会将mergeSort(something)一个堆栈帧添加到堆栈中.它确实占用了一些空间,对吧?

public static void mergeSort(int[] a,int low,int high)
{
    if(low<high)
    {
        int mid=(low+high)/2;
        mergeSort(a,low,mid);
        mergeSort(a,mid+1,high);
        merge(a,mid,low,high);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 在计算合并排序复杂度时,为什么不考虑堆栈帧的大小?
  2. 是因为堆栈只包含几个整数变量和一个引用,它们不占用太多内存?
  3. 如果我的递归函数创建一个新的局部数组(假设int a[]=new int [n];),那该怎么办呢.那么在计算空间复杂度时会考虑它吗?

java arrays algorithm recursion space-complexity

5
推荐指数
1
解决办法
441
查看次数

根据内存使用情况比较String和StringBuilder操作

根据KathySierra的SCJP学习指南:

必须对字符串进行修改时,应使用java.lang.StringBuffer和java.lang.StringBuilder类.正如我们所讨论的,String对象是不可变的,所以如果你选择对String对象进行大量的操作,你最终会在String池中放弃很多被抛弃的String对象

为了清除这一点,我在这里完成了String类和StringBuilder 源代码.

String的simplfied代码如下所示:

public final class String(){
     private final char [] value; //Final helps in immutability, I guess.
     public String (String original){
         value = original.value;
      }
}
Run Code Online (Sandbox Code Playgroud)

StringBuilder的简化版本是这样的:

public final class StringBuilder{
    char [] value;
    public StringBuilder(String str) {
        value = new Char[(str.length() + 16)]; // 16 here is implementation dependent.
    append(str);
}

public StringBuilder append(String str){

            //Add 'str' characters in value array if its size allows,
        else
            // Create new array of size newCapacity …
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder

4
推荐指数
1
解决办法
1147
查看次数

使用OpenJDK编译的java代码是否总是在Oracle的Hotspot上运行,反之亦然?

我来到这个文档,其中相同的Java代码在Oracle JDK中编译,但在OpenJDK上编译.SO上也提到了一些针对相同问题的参考文献.这是否意味着"javac"特定于供应商?

如果答案是肯定的?然后他们有可能产生不同的字节码.请参考这里.

因此,如果字节码不同,Oracle的JVM将如何处理OpenJDK的javac生成的字节码?

是否安全地说:"Java是"一次写入并在任何地方运行,只要javac编译器和JVM来自同一个供应商?"

java openjdk jvm javac

1
推荐指数
1
解决办法
3618
查看次数