jvm内存模型和内存分配

  在JVM中,是通过线程轮流切换时间来获得CPU,因此在同一刻时间,一个CPU只能执行一条线程命令

  1.java中内存的分布?

  JVM 执行的过程。①加载class文件 ②管理并分配内存 ③执行垃圾收集  

  内存结构图:

  

  栈

  java栈中,存放一个个栈帧,每一个栈帧对应一个被调用方法,在栈帧中包含局部变量表、操作数栈、指向运行时常量池的引用,方法的返回地址,和一些附加信息,

  方法执行完毕之后,便会将栈帧出栈。

  

  

  java中堆是用来存放对象本身和数组,堆被所有的线程共享,在JVM中,只有一个堆。就是存放对象实例的区域。

  方法区

  和堆一样,被所有的线程共享,在方法区中,存储每一个类的信息,包括方法名称、方法信息、静态变量、常量以及编译后的代码。

  在方法区中,有一个非常重要的部分,就是运行时常量池,它是每一个类和接口的常量运行时表示形式,在类和接口被加载到JVM后,

  对应的运行常量池就会被创建,当然并非class文件常量池的内容才能进入运行常量池,在运行期间,可将新的常量放入到常量池中。

  虚拟机中提供了参数,来控制堆和方法区的大小,剩下的就分配给栈,每个线程分配的栈越大,建立的线程数就越小,因此建立过多的

  线程会导致内存溢出,因此只能通过减少堆内存和栈容量来创建更多的线程。

猜你喜欢

转载自www.cnblogs.com/chengyangyang/p/10837996.html