堆、栈、静态代码块

栈:
当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。
即,所有在方法中定义的局部变量都是放在栈内存中的;
堆:
在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用,这个运行时数据区就是堆内存。
堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用,则这个对象依然不会被销毁。
只有当一个对象没有任何引用变量引用他时,系统的垃圾回收器才会在合适的时候回收它。

静态代码块:
执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。


Java 虚拟机栈
    Java 虚拟机栈是线程私有的
    每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作数栈、动态链接、方法出口等信息。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
    局部变量表存放各种基本数据类型 boolean、byte、char、short 等

本地方法栈

与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的 java 方法服务,而本地方法栈则是为 Native 方法服务。

Java 堆
    GC 堆是 java 虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域,在 JVM 启动时创建。
    其大小通过 -Xms (最小值)和 -Xmx (最大值)参数设置,-Xms 为 JVM 启动时申请的最小内存,-Xmx 为 JVM 可申请的最大内存。
    由于现在收集器都是采用分代收集算法,堆被划分为新生代和老年代。新生代由 S0 和 S1 构成,可通过 -Xmn 参数来指定新生代的大小。
    所有对象实例以及数组都在堆上分配。
    Class 文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。

方法区
    也称”永久代” ,它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。可以通过 -XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。
    运行时常量池:是方法区的一部分,其中的主要内容来自于 JVM 对 Class 的加载。
    Class 文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值