Java程序员:不识Jvm真面目,只缘身在增删查改中
前言
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。
java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
这里就给大家讲一下JVM。
技术大咖带你垂直打击JVM
什么是运行时数据区? 我们一起来分享。
了解JVM底层原理,让你的代码撸得飞起。
搞定内存溢出,涨薪升职。
涨见识,字节码执行过程分析。
直击真相,原理和代码全都有。
测试、效果演示及总结。
JVM是什么?
JDK: java development kit (Java开发工具包) 编译、反编译、调试等。
JRE: java runtime enviroment (Java运行环境)
JVM: java Virtual Mechinal (Java虚拟机) 一次编写,到处运行!
学jvm的目就是:
提升代码质量、解决项目问题。
面试!面试!还是面试!
JVM是怎么玩的
类加载器:Class字节码文件加载到内存
执行引擎:解析字节码指令,得到执行结果
运行时数据区
JVM运行时数据区
线程私有
程序计数器
虚拟机栈
本地方法栈
线程共享
堆
方法区
BAT的JVM面试题
JVM什么情况下会发生栈内存溢出?
JVM中一次完整的GC流程是怎样的?
GC——垃圾回收
完整意味着有多种情况
程序计数器
指向当前线程正在执行的字节码指令的地址(行号)
栈是什么?
栈(Stack)
入口和出口只有一个
入栈
出栈
FILO
先进后出
虚拟机栈
虚拟机栈
创建一个线程就为线程分配一个虚拟机栈,它又会包含多个栈帧,因为每运行一个方法就创建一个栈帧。
运行时才有数据
栈帧
运行一个线程中的一个方法
局部变量表
操作数栈
动态连接
返回地址
深入理解虚拟机栈
演示一段代码的方法的执行过程
代码:
public int calc(){
int a=100;
int b=200;
int c=300;
return(a+b)*c;
}
虚拟机栈的异常
StackOverFlowError异常
原因:执行的虚拟机栈深度大于虚拟机栈允许的最大深度(方法的递归调用)。
解决办法:增加默认栈的容量。
栈容量 -Xss 默认1M
OutOfMemeoryError异常
原因:多线程环境下虚拟机在扩展栈时无法申请到足够的内存空间。
解决办法:减少默认栈的容量来换取更多的线程支持。
JVM中线程共有的内存区域
Java堆
Java堆是被所有线程共享的一块内存区域
所有的对象实例以及数组要在堆上分配
元数据区
老版本名称:方法区(永久代)
类信息、常量、编译后的代码信息
直接内存
以上源于一个视频讲解的概述总结,后续将分享后半部分的内容:
可达性分析算法——GC Roots
JVM中的堆
新生代为什么分三个区?
新生代对象的分配和回收
老年代对象的分配和回收
JVM中一次完整的GC流程是怎样的?
如果有兴趣想了解视频具体内容的可以关注我,加一下我的合作群:805685193 可获取原视频。
还有一些Java架构视频讲解,需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深入理解Presto(1) : Presto的架构
简介 Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点: 清晰的架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。 简单的数据结构,列式存储,逻辑行,大部分数据都可以轻易的转化成presto所需要的这种数据结构。 丰富的插件接口,完美对接外部存储系统,或者添加自定义的函数。 本文从外到内,依次来介绍presto。 架构 Presto采用典型的master-slave模型: coordinator(master)负责meta管理,worker管理,query的解析和调度 worker则负责计算和读写
- 下一篇
Dubbo Ecosystem - 从微服务框架到微服务生态
从微服务框架到微服务生态,这是微服务发展的必然趋势,也是Dubbo社区满足开发者更高效的构建微服务体系期望的使命和担当。 近期,Apache Dubbo PPMC 望陶(社区昵称:ralf0131)做了主题为《首次直播揭秘 Apache Dubbo Ecosystem:从微服务框架到微服务生态》的直播分享。本文整理自此次分享,通过该内容,您将了解到Apache Dubbo Ecosystem的: 产生背景 生态定位和组件选择原则 体系总览和层次结构 和Spring Cloud之间的联系 直播问答精选 产生背景 微服务的流行,使得越来越多的用户选择从单体应用向分布式应用进行转型。在这个过程中,有许多企业选择了Dubbo作为分布式应用开发的基础组件。但是随着微服务化的逐渐深入,我们也发现,Dubbo目前提供的能力逐渐的无法满足开发者构建完整微服务的需
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS6,CentOS7官方镜像安装Oracle11G
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作