Java 程序内存分析
java程序内存主要分为了2个部分,包括 stack segment(栈内存)、heap segment(堆内存)。
在分析Java程序内存分配情况时,我们从下面这个经常被使用的例子开始吧。
下面程序将打印什么呢?
Java代码
String s1 = new String("abc");
String s2 = new String("abc");
System.out.print(s1.equals(s2)); // 1
System.out.print(s1 == s2); // 2
String s1 = new String("abc");
String s2 = new String("abc");
System.out.print(s1.equals(s2)); // 1
System.out.print(s1 == s2); // 2
可能大家心中已经有答案了,第1条语句打印的是true,第二条语句打印的false,没错,正如大家所想,打印结果就是这样。那么,大家是否知道为什么第2条语句打印的是false呢?让我们来看看这个程序中的数据在内存中分配的情况吧。
首先,我们分析第一条语句String s1=new String("abc");
其实这条语句是下面两条语句的缩写,
String s1; //1
s1=new String(“abc”); //2
1. 在栈内存中定义一个名为s1的对String类的对像引用变量
2. 在堆内存开辟了一块空间用于存放字符串“abc”,将1定义的引用变量s1指向该空间。
同理,第二条语句String s2=new String("abc");也做了同样的事情,定义引用变量,指向新开辟出来的空间。说到这里大家可能心中已经有答案了,为什么s1!=s2呢?因为它们指向的是两块不同的堆内存空间。
其实,在java中new过程分配内存情况都和上面类似,先在栈内存中定义引用,然后在堆内存中开辟空间,存放数据,最后让引用指向该空间,如果一个引用没有指向任何空间,那么在使用这个引用变量时,程序将抛出著名的NullPointerException,其实从这个异常名字我们也能清晰知道产生该异常的原因,不是吗
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
//由于JAVA语言的数据类型都是有符号类型,而C# C++一般数据类型都是分有符号和无符号,
//因此在通信过程中传递的Byte[]无法直接转换成C#需要的类型,
//以前倒是没注意这些细节,因为一般用一种语言编程,
//大都有内置的转换方法。跨语言环境的转换就的自己动手想办法了。
1、java的Byte[]转换成c#的Int32
private i ......
下载地址:
http://www.andykhan.com/jexcelapi/ 当前的最高版本是2.6。
真实下载地址:
http://www.andykhan.com/jexcelapi/download.html
作者的网站上对它的特征有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字 ......
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要
了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主
要 ......
1.因为两者的用途不同,所以Annotation与XML应该并存
Anootation vs XML 到了现在,在Spring和EJB3各占一边的持续演示下,各自的用途已清晰。
虽然两者之间完全可以相互替代,没有绝对不能做的事情,但却存在好不好的问题,两者的用途不同,应该并用:
"size=10, ......