JVM(Java Virtual Machine)

目录

一、前言

什么是JVM?

定义:Java程序得运行环境(二进制字节码运行环境)

优点:

比较:JVM屏蔽Java代码与底层操作系统之间得差异

二、常见的JVM

 三、JVM内存结构​

1.程序计数器(Program Counter Register)

1.1作用

1.2特点

2.Java虚拟机栈(Java Virtual Machine Stacks)

2.1定义

2.2问题辨析

2.3栈内存溢出


一、前言

什么是JVM?

  • 定义:Java程序得运行环境(二进制字节码运行环境)

  • 优点:

  1.         一次编写,到处运行;
  2.         自动内存管理,垃圾回收功能;
  3.         数组下标越界检查;
  4.         多态。
  • 比较:JVM屏蔽Java代码与底层操作系统之间得差异

二、常见的JVM

 三、JVM内存结构

  •  类从Java源代码编译为Java二进制字节码;
  • 然后通过类加载器(ClassLoader)才能被加载到JVM里运行,类放在方法区,类创建的实例对象放在堆里,对象调用方法时会用到虚拟机栈、程序计数器和本地方法栈;
  • 方法执行时每行代码是由执行引擎中的解释器逐行进行执行,热点代码被即时编译器编译(优化后的执行),垃圾回收会对堆里不再引用的对象进行回收;
  • Java代码不方便实现的功能必须调用底层操作系统的功能,所以需要借用本地方法接口类调用操作系统提供的功能

1.程序计数器(Program Counter Register)

1.1作用

记住下一条jvm指令的执行地址

1.2特点

  • 是线程私有的
  • 不会存在内存溢出

2.Java虚拟机栈(Java Virtual Machine Stacks)

2.1定义

栈——线程运行需要的内存空间

栈帧——每个方法运行时需要的内存

  • 一个栈由多个栈帧组成
  • 一个栈帧对应着一次方法的调用
  • 每个线程只能有一个活动栈帧,对应着正在执行的那个方法

2.2问题辨析

1).垃圾回收是否涉及栈内存?

        不涉及。     栈内存是一次次方法调用产生的栈帧内存,栈帧内存在每次方法调用结束后都会被弹出栈,自动的会被回收掉。

2).栈内存分配越大越好么?

栈内存越大,线程数越少

3).方法内的局部变量是否线程安全?

        首先看变量是共享的还是私有的,共享的需考虑线程安全。其次是局部变量有没有逃离方法的作用访问,没有逃离方法作用访问,则是安全的;如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全。

2.3栈内存溢出

  • 栈帧过多导致内存溢出
  • 栈帧过大导致栈内存溢出
  • 设置栈内存大小:-Xss

2.3线程运行诊断

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值