java 存储结构_Java内存结构

879fc4b151103a6fe60c839508fe6872.png

JVM运行时数据区域

1.线程私有程序计数器

2. 本地方法栈

3. Java虚拟机栈

Java虚拟机栈描述的Java方法的执行模型:

每个方法执行的时候都会创建一个栈帧用于存放局部变量表,操作栈,动态链接,方法出口等信息。一个方法的执行过程,就是这个方法对于栈帧的入栈出栈过程。

属于线程隔离的

线程共享

1. 堆(heap)

堆里存放的时对象的实例

是Java虚拟机管理内存中最大的一块

GC主要工作区域,为高效GC,会把堆细分更多的子区域

线程共享

2. 方法区

存储了每个class的结构信息,包括常量池,字段描述,方法描述

GC的非主要工作区域

内存溢出代码演示

栈溢出

设置启动参数-Xss100k

packagecom.jvm.memory;/*** 栈溢出 -Xss*/

public classStackOutOfMemory {private intlength;public intgetLength(){returnlength;

}public voidtest(){this.length++;

test();

}public static voidmain(String[] args) {

StackOutOfMemory stack= newStackOutOfMemory();try{

stack.test();

}catch(Throwable ex) {

System.out.println(stack.getLength());

ex.printStackTrace();

}

}

}

99d9edf4079b15a9849f08768fd12668.png

堆溢出

堆溢出主要是元空间溢出:设置元空间大小-XX:MaxMetaspaceSize=10m

通过cglib动态循环生成类

packagecom.jvm.memory;importcom.jvm.Test3;importnet.sf.cglib.proxy.Enhancer;importnet.sf.cglib.proxy.MethodInterceptor;/*** jcmd命令

*

* 1.jcmd pid VM.flags:查看jvm的启动参数

* 2.jcmd pid help:列出当前运行的Java进程可以执行的操作

* 3.jcmd pid help JFR.dump:查看具体命令的选项

* 4.jcmd pid PerCounter.print:查看jvm性能相关的参数

* 5.jcmd pid VM.uptime:查看jvm启动时长

* 6.jcmd pid GC.class_histogram:查看系统中类的计数信息

* 7.jcmd pid Threa.print:查看线程堆栈信息

* 8.jcmd pid GC.heap_dump filename:导出heap dump文件,到处文件可以通过jvisualvm查看

* 9.jcmd pid VM.system_properties:查看jvm的属性信息

* 10.jcmd pid VM.sersion:查看目标jvm进程的版本信息

* 11.jcmd pid VM.command_line:查看jvm启动的命令行参数信息

*

* jstack:可以查看或道出Java应用程序中线程的堆栈信息

*

* jmc:java Mission Control

* jfr:java Flight Recorder

**/

public classHeapoMemoryVerflow {public static voidmain(String[] args) {for(;;){

Enhancer enhancer= newEnhancer();

enhancer.setSuperclass(Test3.class);

enhancer.setUseCache(false);

enhancer.setCallback((MethodInterceptor) (obj, method, args1, proxy)->proxy.invoke(obj, args1));

System.out.println("haha");

enhancer.create();

}

}

}

f8175a0d5224f7a74ef9fd1d3b69aba7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值