黑马程序员_关于JAVA中栈和堆,以及由此引发的一些思考

来源:互联网 发布:户型优化设计合同 编辑:程序博客网 时间:2024/05/20 03:07

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
关于JAVA中栈和堆,以及由此引发的一些思考 

       先是我对于JAVA的栈和堆有一些疑问,开始在网上查阅一些资料,这一查,竟然发现很多以前看到的了解到的东西都是错误的。首先介绍一篇博文从“关于Java堆与栈的思考”一帖看错误信息的传播。我觉得关于底层的一些知识,是需要了解深层的JVM原理以及JAVA编译原理的情况下才能有结构化的了解。但是关于一些基础的原理性的东西,不理解心中始终有个疙瘩,学上层的知识的时候也是有些心不在焉。现在居然发现,一些错误的知识却像真理一样广泛传播,一时竟有些不知道该相信谁的感觉,恨不得打开JVM的源码研究个透。不过,即使如此,这些错误的知识却不至于造成什么大的错误,照样编程。这也算不幸中的万幸了。另外的一点感想是,要好好锻炼一下英文了,英文原版书的可信度还是比较高的。

       对于栈中的数据可以共享,当int i = 3; int j = 3;执行后一句语句的时候编译器先在栈中寻找有没有3这个值 ,有就让j指向这个值。3是放在常量池中的,但当程序运行时,如果有j++;的语句,那JVM难道要重新开辟个空间放j++;的结果?那i++;呢?i与j地址是一样的,JVM还要记录是谁先指向这个值的呢?还有,为什么i要放指向值的引用呢?直接放值不是更节省空间吗,诸如此类模棱两可的概念困扰了我很久,知道看到了那篇博文才醍醐灌顶,有这样才合理的感觉。如果能了解这些底层的机制,对于上层的那些实现,一定有不过如此、了然于心的感觉。也才能明白那些设计JAVA、更新JAVA的工程师们的智慧与苦衷。他们比谁都想提高JAVA的效率,增强JAVA的功能,让JAVA更好用。JAVA原理的深处里面一定有很多的奇思妙想,这也是我喜欢的。想想也真是了不起,即使不懂JAVA的底层,照样可以写出JAVA程序。这不就是面向对象吗。JAVA设计者们把底层的实现都封装成对象,我们只需要使用他们提供的规则和工具类就行。Eclipse的编写者们把基础的一些规则、操作,集成、封装成对象,我们可以更方便的编写和调试程序,不懂命令行都没关系。而我们把软件功能都封装成对象,用图形界面来体现给客户,客户不需要了解这些功能是怎么实现的,直接用就行了。客户生产出产品,把所有的成本、工艺、制造都封装成产品这个对象。出售给消费者,消费者只需要使用就行。整个世界就是一层一层的封装。我们不需要知道电子是怎样运动的,不需要知道地球是如何绕着太阳转的,也不需要知道DNA的复制与表达。我们所面对的任何一个对象,是经历了怎样一个传奇的旅程,是经过了多少人的智慧封装之后,才成为这样一个对象。我们体内的每个细胞,是怎样努力的成长,怎样英勇的对抗病菌。这一切,我们都无需知道,我们只需要怀着感恩的心好好活着就行了。

       不知不觉有点扯远了呢。最后再扯一下吧。把一些对象集成起来,然后封装为一个对象,这是这个世界发展的一个趋势。因为人们不需要去关注那么多对象的复杂细节,只需了解少数的对象就行了。这对人们的生活提供了方便,目的是为了让人们更好的生活。但人们却往往没有更关注生活本身,而是更关注对象了,使得人们过于的依赖对象,甚至把对象当成生活本身。举个例子,人们创造汽车是为了更便捷的交通,如今,汽车却往往成了攀比的工具,身份地位的象征。科技一直在进步,人类呢?


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击