|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。当一团体入手下手进修Java大概其他编程言语的时分,会打仗到堆和栈,因为一入手下手没有明白明晰的申明注释,良多人会发生良多疑问,甚么是堆,甚么是栈,堆和栈有甚么区分?更糟的是,Java中存在栈如许一个落后先出(LastInFirstOut)的按次的数据布局,这就是java.util.Stack。这类情形下,难免让良多人加倍隐晦后面的成绩。现实上,堆和栈都是内存中的一部分,有着分歧的感化,并且一个程序必要在这片地区上分派内存。尽人皆知,一切的Java程序都运转在JVM假造机外部,我们这里先容的天然是JVM(假造)内存中的堆和栈。
区分
java中堆和栈的区分天然是口试中的罕见成绩,上面几点就是其详细的区分
各司其职
最次要的区分就是栈内存用来存储部分变量和办法挪用。
而堆内存用来存储Java中的对象。不管是成员变量,部分变量,仍是类变量,它们指向的对象都存储在堆内存中。
独占仍是共享
栈内存回属于单个线程,每一个线程城市有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存能够了解成线程的公有内存。
而堆内存中的对象对一切线程可见。堆内存中的对象能够被一切线程会见。
非常毛病
假如栈内存没有可用的空间存储办法挪用和部分变量,JVM会抛出java.lang.StackOverFlowError。
而假如是堆内存没有可用的空间存储天生的对象,JVM会抛出java.lang.OutOfMemoryError。
空间巨细
栈的内存要远远小于堆内存,假如你利用递回的话,那末你的栈很快就会充斥。假如递回没有实时跳出,极可能产生StackOverFlowError成绩。
你能够经由过程-Xss选项设置栈内存的巨细。-Xms选项能够设置堆的入手下手时的巨细,-Xmx选项能够设置堆的最年夜值。
这就是Java中堆和栈的区分。了解好这个成绩的话,能够对你办理开辟中的成绩,剖析堆内存和栈内存利用,乃至功能调优都有匡助。
在性能方面,在windows平台下,.net网页编程可能是占强项,要是把.net网页编程放在sun开发的操作系统上去运行呢?根本就运行不了,.net网页编程对其它操作系统的支持也很弱,性能也可能比不上java。 |
|