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表示降序排列
......
/**
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年 ......
//由于JAVA语言的数据类型都是有符号类型,而C# C++一般数据类型都是分有符号和无符号,
//因此在通信过程中传递的Byte[]无法直接转换成C#需要的类型,
//以前倒是没注意这些细节,因为一般用一种语言编程,
//大都有内置的转换方法。跨语言环境的转换就的自己动手想办法了。
1、java的Byte[]转换成c#的Int32
private i ......
在你的代码里调用了一些资源文件,如图片,音乐等,在调试环境或单独运行的时候可以正常显示或播放,而一旦打包到jar文件中,这些东东就再也出不来了,除非把这个jar放到原来未打包以前的目录下,但通常jar是单独发布的。
[关键字] java jar文件包 资源
可能有不少初学者会有这样的困惑:在你的代码里调用了 ......
使用JAVA开发系统托盘程序
@for&ever 2009-11-27
参考文章《New System Tray Functionality in Java SE 6》,网址 http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ 。
JDK必须要在 1.6 版本。
最近项目中要实现定时任务常驻系统,能够同时有一个比较友好的操作方式提供给 ......