健康,home? [java的内存浅析]

健康,home? [java的内存浅析]

摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 但愿转载,保留摘要,谢谢!html

乐观上上,how can other kno u,u r yourself!I must be strong and carry on. -泥沙砖瓦浆木匠

一.闲谈下

201407月记着那时候身体垮了下来,呵呵。想说,对本身的说,也是对你们的负责吧。那时候胸疼胸闷,而后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊。彻底不能看代码,看代码就晕。一直想睡想睡。胸口会间接的疼一下。直到29号那晚饭后,我胸很闷。去旁边附一三甲医院检查,作了可怕的心电图。医院也是为人好,可是后面发生彻底不可理喻。那时候的心情就像下面的图,当听到一个急诊不负责阿姨全科医生说“心电图有个波略高,赶忙24小时监护,当即联系家长”(她是不知道,我爸爸那时候也是 冠心病 发生期,他是不知道我根本没大碍被她这么折腾。个人心情会怎么样?医生为何这么不会作人?虽然我在医科大学读书。)java

image

如今慢慢的康复,其实没什么大病,熬夜熬多了,身子垮了。目前仍是带着血药。stay with me 不少不少。我记着,我会感激。最大的是Home and 亲人。数组

告诉你们:安全

  1. 健康第一,革命的本钱。说说容易,作作难。(尽可能规律点,无论你熬不熬夜)dom

  2. 还有保持乐观,这对本身对身体都很好函数

  3. 适量的运动学习

  4. 有些细节注意并尝试:泡脚….google

二.正文

我想结合本身的故事,说实在有点伤感。可是我也不当心故意的,我只是想把这个故事传下去,我想大家会喜欢。在这里先谢谢了。就像每一个在外的人,每一个流浪在外学习也好,工做也好。家就像计算机里面的硬盘,想内存,有着你的家,家的地址。spa

 

image

穿越在城市的人呀,有时候驻足看看本身呀。操作系统

 

就像java,他是个人好朋友同样。java也有家,也有归宿。在java中,java程序,java虚拟机,操做系统。哪里都是它的归宿。它在其中彼此交互着。

下面一段话来自JAVA Bible 《Think in java》:

复制代码

在JAVA中,有六个不一样的地方能够存储数据:1. 寄存器(register)。这是最快的存储区,由于它位于不一样于其余存储区的地方——处理器内部。可是寄存器的数量极其有限,因此寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感受到寄存器存在的任何迹象。2. 堆栈(stack)。位于通用RAM中,但经过它的“堆栈指针”能够从处理器哪里得到支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。建立程序时候,JAVA编译器必须知道存储在堆栈内全部数据的确切大小和生命周期,由于它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,因此虽然某些JAVA数据存储在堆栈中——特别是对象引用,可是JAVA对象不存储其中。海王星娱乐http://bct5453.com/3. 堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放因此的JAVA对象。堆不一样于堆栈的好处是:编译器不须要知道要从堆里分配多少存储区域,也没必要知道存储的数据在堆里存活多长时间。所以,在堆里分配存储有很大的灵活性。当你须要建立一个对象的时候,只须要new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。固然,为这种灵活性必需要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储须要更多的时间。4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象自己历来不会存放在静态存储空间里。5. 常量存储(constant storage)。常量值一般直接存放在程序代码内部,这样作是安全的,由于它们永远不会被改变。有时,在嵌入式系统中,常量自己会和其余部分分割离开,因此在这种状况下,能够选择将其放在ROM中6. 非RAM存储。若是数据彻底存活于程序以外,那么它能够不受程序的任何控制,在程序没有运行时也能够存在。

复制代码

 

在我看来,我想分析的那块总结以下:

在java中,内存分析可分为Stack-栈 , Heap-堆(里面包含着方法区)等。栈灵活性很差,自动连续分配内存,后进先出。堆动态分配,灵活。因此java的家有这么些地方。

 

家是一把伞,帮咱们遮风挡雨;家是心灵绿洲,带给咱们快乐,排遣咱们的烦恼;家是一盏灯,帮咱们照亮前行之路。

image

一个洞也好,什么也好不如家的狗窝。善于电话打回家,一生也就这么短。

三.浅浅分析java内存

从一个小的代码里面提及吧。从小到大,慢慢让本身明白。

MainClass 程序的入口,像生活的道路同样。

复制代码

public class MainClass
{    public static void main(String[] args)
    {
        People dad = new People();
        dad.name = "Jeff Father";
        
        People mum = new People();
        mum.name = "Jeff Mum";
        
        Home home = new Home();
        home.address = "Place of freedom";
        
        home.dad = dad;
        home.mum = mum;
        
        home.mum.giveLove();
    }
}

复制代码

下面对应的两个类 Home People

复制代码

public class Home
{
    String address;
    
    People dad;
    
    People mum;
}public class People
{
    String name;    int age;    
    public void giveLove()
    {
        System.out.println("give Love But Say Nothing!");
    }
}

复制代码

 

Home family 写到这个类我想到了。那时候,24小时监护让我担忧着。不敢跟父母说,由于那时候老爸还病着。就打给了在外地的姐姐,那时候真心苦笑着ing。但一直告诉本身“一切都会过去的。”

image

我很喜欢看动物世界,那里充满着love的瞬间。我也喜欢摄影。

 

运行后你们能够看到:(这是父母的爱)

“give Love But Say Nothing!”

 

首先要说的当着三个类被类加载器,类的代码信息放到了方法区。好比代码的属性,无参数或者带着参数的方法…以下图所示:

image

 

而后根据代码咱们就把内存理一理。前面四句话,那是家里面可爱的爸爸妈妈,但愿他们健健康康。当小的时候爸爸妈妈年轻,你也充满活力。我想到了《Tears in heaven》的那首歌:

People dad = new People();
dad.name = "Jeff Father";

People mum = new People();
mum.name = "Jeff Mum";

第一句话,首先new People()就在非方法区的堆里面,创造了属于这个new People的块,其方法giveLove指向了People类信息里面的具体方法。而后栈里面有对这个new出来的块一个引用 。

第二句话,首先 “Jeff Father”在MainClass类信息里面的常量池里面。上面new出来的块里面name对其常量一个引用。

 

家也是这样子的。家里面的地址是这辈子从小到大记得最清楚的地址。

Home home new Home();

home.address = "Place of freedom";

以上代码和前面的一致。你们慢慢体会,待会给一张图会明白不少。

 

home.dad = dad;

home.mum = mum;

home里面的出现了一个people属性,它引用了dad那个块的id。就这样,家里面有了dad 有了mum才是家。家有什么好留恋。是个house,不是是亲人。 总结的图以下:

  QQ Photo20140821212057

 

如今的本身,天天喝着中药。渐渐地进入了养生,健身的行列。发现了直到你靠近死亡的时候,你会感觉到生命的价值,你就不会把价值往那些没用的地方去。

image

小的喂食,大的给食。无私是他们的天使职责。

 

下面有个小的练习题:若是在上面的MainClass main函数里加入以下的代码:
image

答案就不说了。哈哈

注意: == 表示数据引用相同是返回 true。

 

若是还不懂得话,能够根据个人图,和我下面的总结体会。

 

生命在于弄出点东西。我开始记备忘录,开始享受生活。开始新的一切。有时候和禅师说的很对,放下一些,去实践感觉一下。受伤了就学会放下了。加油,你们。加油,我本身。最近我喜欢上了 C++ Java ,有本身的目标和理想。我以为活的很踏实。姐姐的订婚日子也快到了,祝贺。我要学会smile。

image

 

四.感谢知识来源和小结

堆是一个运行时数据区,类的对象从中分配空间。这些对象经过new创建,它们不须要程序代码来显式的释放。java中的对象和数组都存放在堆中。堆是由垃圾回收来负责的,堆的优点是能够动态地分配内存大小,生存期也没必要事先告诉编译器,由于它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些再也不使用的数据。

方法区也是堆,存放着类的代码信息,static变量,常量池

栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象引用。

 

参考资料:

google和本身的体会。

如以上文章或连接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也能够点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

相关文章
相关标签/搜索