A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tomson_tang 中级黑马   /  2015-2-3 08:47  /  805 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当我们调用java命令运行某个java程序时,该命令将会启动一个java虚拟机进程,不管该java程序有多么复杂,该程序启动了多少线程,他们都处于该java虚拟机进程里。同一个JVM的所有线程、所有变量都处于同一个进程里,它们都使用该JVM进程的内存区。当系统出现以下几种情况时,JVM进程将被终止:

1、程序运行到最后正常结束。
2、程序运行到使用System.exit()或Runtime.getRuntime().exit()代码结束程序。
3、程序执行过程中遇到未捕获的异常或错误而结束。
3、程序所在平台强制结束了JVM进程。
从以上介绍可以看出,当Java程序运行结束时,JVM进程结束,该进程在内存中状态将会丢失。
举例:
  1. public class Q
  2. {
  3.         // 定义该类的静态Field
  4.         public static int q = 6;
  5. }
  6. public class QTest1
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 // 创建Q类的实例
  11.                 Q q = new Q();
  12.                 // 让q实例的q Field的值自加
  13.                 q.q ++;
  14.                 System.out.println(q.q);
  15.         }
  16. }
  17. public class QTest2
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 // 创建A类的实例
  22.                 Q q2 = newQ();
  23.                 // 输出b实例的a Field的值
  24.                 System.out.println(q2.q);
  25.         }
  26. }
复制代码

这里有两个测试,当测试完第一个后在测试第二个,测试完第二个后结果q的值很多人以为是7实质为6,这是为什么呢,因为,两个测试为不同的JVM进程,第一次JVM进程结束后,数据将丢失,第二次测试又是一个新的JVM进程,这个进程又会重新初始化Q。



1 个回复

倒序浏览
这个例子太好了,谢谢楼主的分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马