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,其实从这个异常名字我们也能清晰知道产生该异常的原因,不是吗
相关文档:
quartz是干啥的? 任务调度用的
任务调度是干啥的?就是在预定的时间做预定的事
1.在quart网站下最新的JAR包
2.建个项目,把quartz的JAR包加入到项目
3.新建一个任务
public class MyJob implements org.quartz.Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionExceptio ......
如何读取资源文件:
(一)
Properties props = new Properties();
props.load(new FileInputStream("db.properties"));
(二)
blog.properties文件如下
dbdriver=oracle.jdbc.driver.OracleDriver
dburl=jdbc:oracle:thin:@127.0.0.1:1521:ora92
dbuser=blog
dbpwd=blog
- ......
下载地址:
http://www.andykhan.com/jexcelapi/ 当前的最高版本是2.6。
真实下载地址:
http://www.andykhan.com/jexcelapi/download.html
作者的网站上对它的特征有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字 ......
最近的Devoxx大会上,Java 7将包含闭包的消息令很多人感到振奋——这将做为一个独立的JSR被实现。在众多Java 7新的语言特性中,有一些现在已经完成了。Devoxx大会的一位参会者在博客中报告了下面这些Java 7已经完成的7大新功能:
1)对集合类的语言支持;
2)自动资源管理;
3)改进的通用实例创建类型推断;
......