浅析java(多方面解读)
来源:互联网 发布:58电话号码采集软件 编辑:程序博客网 时间:2024/06/05 18:04
昨天我简单的说了一下我的编程学习之路,如果你热爱编程,而不是仅为了赚钱,我想我的经历也许会给你带来一定的启发,如果你还没有看,请先慢慢读完我的编程学习之路,您肯定会有另一番体会的。。
好了,废话不多说了,进入今天的主题,我想先介绍一下java,重栈和堆的角度还有jvm,如果你不是很明白,那不要紧,在以后的文章中我还会提到,如何你学过c和c++,那么你肯定对栈,堆内存理解的比较好。我以前写过一篇文章 Java是一种什么语言,简单的介绍了一下java,今天这一块我就不多说了。。
我还是那helloworld举例吧。。
public class HelloWorld{public static void main(String[] args){System.out.println("hello world");}}
我想大家对着段代码是再熟悉不过了,今天我就来说一下它的存储。
变量就不多说了,大家看图一目了然,当new出来一个HelloWorld对象时,它就会存在堆区,先简单的说一下堆和栈吧。
栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事 先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较 慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一 些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
再来说一下加载helloworld的时候吧,我们首先得把原代码编译成字节码,然后有jvm加载到内存并运行得到输出结果。
关于jvm加载类的机理比较复杂,我会在以后的文章中再写的。。
欢迎关注我的微博 ,我的微博会实时更新文章。 交流群:
199326422
- 浅析java(多方面解读)
- ListView的优化(多方面)
- 学习java要从多方面入手!
- C#通讯编程(多方面收集并整理)
- SliverLight和Flex 技术的多方面比较(转载)
- Unity3D学习之(判断与循环的多方面练习)
- 多方面面试
- 多方面面试
- 解读设计模式(Java)
- java.lang.OutOfMemoryError: PermGen space 解决 自己多方面搜索整理的完整版
- Java JNI浅析(一)
- Java数组浅析(转)
- java Enum浅析(引用)
- 观察者模式(java)浅析
- 观察者模式(java)浅析
- JAVA线程浅析(一)
- JAVA线程浅析(二)
- Java NIO浅析(转)
- 怎么对数据库查询进行group by 和sum() 操作
- Hibernate中get()和load()的区别
- UNIX 编程艺术
- NOIP2008 双栈排序 染色+模拟
- QT Sn
- 浅析java(多方面解读)
- android sqlite
- 堆栈--程序的内存分配
- 无效的列索引
- iOS编译librtmp xcode5.1
- qmlcanvas,类Html5 canvas的组件
- 基于ndk_r7_windows编译实现ndk项目,不需要cygwin
- oracle中rownum和rowid的区别 .
- cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问题