(转)走进JVM,浅水也能捉鱼】的更多相关文章

这不是一篇描述jvm是什么的文章,也不介绍jvm跨平台的特性,也不是讲述jvm安全特性的文章,更不是讲解jvm指令操作,数据运算的文章,本文重点讲述类型的生命周期. 类型的生命周期涉及到:类的装载.jvm体系结构.垃圾回收机制. 为什么要讲jvm体系结构?因为类的装载和垃圾回收机制都和jvm体系结构息息相关. 那么什么是jvm体系结构呢? 当jvm运行起来的时候,它会向系统申请一片内存区(不同的jvm实现可能不同,有些可以使用虚拟内存),将这块内存分出一部分存储许多东西,例如:程序创建的对象,传…
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏或溢出的情况发生,调试起来会变得非常困难.这就要求我们对虚拟机的内存区域有深入的理解.最终能够判断内存方面的异常发生时,具体在JVM中的位置. 内存区域 JVM运行时,首先需要类加载器(ClassLoader) 加载所需类的字节码,加载完毕交由执行引擎执行,执行过程中需要一段空间来存储数据(类比CP…
想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1.  准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包:https://jdk7.java.net/source.html 系统需求 为了提高效率,尽量选择Linux 或 MacOS作为编译平台.本次使用Ubuntu12.04进行编译.仔细阅读源码包中README-builds.html文档,就可以构建编译环境了. 2.  配置编译环境 编译依赖 Op…
1.JDK:java程序设计语言.java虚拟机.javaAPI 二.自动内存管理机制 ----------------------------------------------------- 1.运行时数据区域: (1)java虚拟机在执行java程序的过程中会把所管理的内存划分为若干个不同的数据区域.这些区域有着各自的用途,以及创建和销毁的时间,有些区域随着虚拟机的启动而存在,有些区域则是依赖用户线程的启动和结束而创建和销毁. (2)java虚拟机所管理的内存会包括以下几个运行时数据区域…
4.1字节码 java文件编译成字节码后由默认解释执行,热点代码编译执行.方法调用到一定程度的时候,进行JIT编译成机器码执行,后面直接运行JIT编译结果(机器码). 4.2类加载过程 加载链接初始化加载:字节码进入内存链接:验证(cafebabe等).准备(类变量赋初始值).解析(确保类与类之间引用正确).初始化:调用类构造器<clinit>方法,如果复制运算是通过其他类静态方法来执行的,那么会马上执行另外一个类,在虚拟机栈中执行完毕后返回值进行赋值. 双亲委派机制加载字节码:    1.询…
注意!本文较长,建议先收藏再阅读.更多文章可以关注作者公众号:码上实战 你也可以 star 我的 GitHub上本文所属仓库:https://github.com/flyhero/MarkNote 说明:本文在 Java 8 Hotspot 64位操作系统下构思 小强是一个工作3年有余的开发工程师,从他的发量你就可以知道,小强资历还尚浅. 最近公司没什么事,他也开始无聊起来了.这天下午,同事们在激烈的讨论这业务,但他没有参与,于是他决定学习些什么知识,无聊的翻着各个网页,发现JVM是各位大神们推…
码云地址: https://gitee.com/forxiaoming/JavaBaseCode/tree/master/EasyCoding…
JVM 目录 走进 JVM Java 虚拟机规范(Oracle 官网) Java 虚拟机规范(Java SE 7 中文版) (周志明等译) 周志明,深入理解Java虚拟机[M],机械工业出版社,2013.) 第一篇 JVM 内存模型 1.1.1 JVM 内存模型 1.2.1 JVM 垃圾回收机制 1.3.1 JDK 调优工具 1.4.1 JVM 调优之从实际案例聊聊 Java 应用的 GC 优化(美团) 第二篇 JVM 执行引擎 2.1.1 JVM 字节码(一)字节码规范 2.1.2 JVM 字…
JVM学习笔记——类加载过程 类加载模型——双亲委派模型(Parents Delegation Model)也可称为“溯源委派加载模型” Java的类加载器是一个运行时核心基础设施模块,主要是启动之初进行类的Load.Link和Init,即加载.链接.初始化. 第一步,Load阶段读取类文件产生二进制流,并转化为特定的数据结构,初步校验cafe babe魔法数.常量池.文件长度.是否有父类等,然后创建对应类的java.lang.Class实例. 第二步,Link阶段包括验证.准备.解析三个步骤.…
JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同的时代,不同的厂商,机器指令组成的集合是不同的.但毕竟CPU是底层基础硬件,指令集通常以扩展兼容的方式向前不断演进.而机器码是离CPU指令集最近的编码,是CPU可以直接解读的指令,因此机器码肯定是与底层硬件系统耦合的. 问题:如果某个程序员因为不同的硬件平台需要编写多套代码,这是十分令人崩溃的.Ja…
本文整理了微信公众号[Java技术江湖]发表和转载过的JVM虚拟机相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. JVM原理分析,看了都说好 JVM 深入学习:Java 解析 Class 文件过程解析 深入理解JVM之类加载机制 jvm优化--监控工具 万万没想到,JVM内存结构的面试题可以问的这么难? 30道"热乎乎"的 JVM 典型题目剖析! 带你走进JVM的世界,整合高质量文章以阐述虚拟机的原理及相关技术,让开发者更好地了解Java的底层运行原理以及相应的调优…
jvm 是Java Virtual Machine(Java虚拟机)的缩写,java 虚拟机作为一种跨平台的软件是作用于操作系统之上的,那么认识并了解它的底层运行逻辑对于java开发人员来说很有必要! 让我们来看看它一次编译,到处运行的牛叉之处! 废话不多说,先看看jvm的架构图(无论何时脑子里要有这样一张图): 总概 从这副架构图可以看出jvm由类装载器.运行时数据区.执行引擎.本地方法接口还有垃圾回收器构成;其中垃圾回收器作用在整个jvm内存中(主要作用在堆和方法区),所以图中没有具体体现,…
前言 我们很多小伙伴平时都是做JAVA开发的,那么作为一名合格的工程师,你是否有仔细的思考过JVM的运行原理呢. 如果懂得了JVM的运行原理和内存模型,像是一些JVM调优.垃圾回收机制等等的问题我们才能有一个更清晰的概念. 为了走进JVM,深入了解底层,王子打算写一个JVM的专题,留下自己对JVM探索的足迹,同时也希望能帮到小伙伴们更好的理解JVM. 那我们开始吧. JAVA代码的运行流程 首先我们就来聊一聊JAVA代码是怎么运行起来的,这部分比较基础相信大家都知道,就当成是个复习吧. 我们编写…
摘要:学过Java的程序员对JVM应该并不陌生,如果你没有听过,没关系今天我带你走进JVM的世界.程序员为什么要学习JVM呢,其实不懂JVM也可以照样写出优质的代码,但是不懂JVM有可能别被面试官虐得体无完肤. § 1.JAVA内存区域与内存溢出异常 § 1.1运行时数据区域 § 1.1.1 程序计数器 当前线程所执行的字节码的行号指示器,是程序控制流的指示器,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖程序计数器.内存较小. Java 虚拟机的多线程是通过线程轮流切换,分配处理器时…
RTSP. RTMP.HTTP的共同点.区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层. 2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了. 区别: 1:HTTP: 即超文本传送协议(ftp即文件传输协议). HTTP:(Real Time Streaming Protocol),实时流传输协议. HTTP全称Routing Table Maintena…
直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看,HLS主要是延时比较大,RTMP主要优势在于延时低. 一.应用场景 低延时应用场景包括:  .  互动式直播:譬如2013年大行其道的美女主播,游戏直播等等     各种主播,流媒体分发给用户观看.用户可以文字聊天和主播互动.  .  视频会议:我们要是有同事出差在外地,就用视频会议开内部会议.     其实会议1秒延时无所谓,因为人家讲完话后,其他人需要思考,     思考的延时也会在1秒左右.当然如果用视频会议吵架就不行.  .  其…
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验.求职心得和成长感悟,以及作为程序员的思考和见解.(关注公众号后回复”资料“即可领取 3T 免费技术学习资源) ​ 时间过得很快,已经到了九月中旬,从16年读研到现在将近两年的时间里,从一个Java初学者慢慢成长为一个合格的开发者,中间也遇到了很多困难. 我不是科班出身,所以是跨专业考研,所以在算法,…
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一:Java入门学习资源 这里主要推荐的是几个技术学习网站,基本上都是视频学习资源. 1 慕课网慕课网是做得比较好的程序员学习网站了.里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的. 2 极客学院极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了…
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一:Java入门学习资源 这里主要推荐的是几个技术学习网站,基本上都是视频学习资源. 1 慕课网慕课网是做得比较好的程序员学习网站了.里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的. 2 极客学院极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了…
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验.求职心得和成长感悟,以及作为程序员的思考和见解.(关注公众号后回复”资料“即可领取 3T 免费技术学习资源) ​ 写在最前 我写过很多篇秋招总结,这篇文章应该是最后一篇总结,当然也是最完整,最详细的一篇总结.秋招是我人生中一段宝贵的经历,不仅是我研究生生涯交出的一份答卷,也是未来职业生涯的开端.仅以…
去年秋季参加了校园招聘,有幸拿到了BAT.头条.网易.滴滴.亚马逊.华为等offer,经过研究生两年的学习积累,终于达成了自己的目标,期间也经历了很多,谨以此文,聊表感叹,也会分享很多我的Java学习心得和求职经验. 不管是找工作还是学技术,在精不在多,分享一下我的一些学习经验,同时也会分享一些我觉得比较有价值的学习资料. 秋招前的积累与沉淀 研究生期间我有一件事情一直在坚持,那就是做笔记和写博客. 做笔记,就是记录学习中大大小小的事情,可能是面试问题,可能是一周的学习计划,也可能知识一个知识点…
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. Java入门学习资源 这里主要推荐的是几个技术学习网站,基本上都是视频学习资源. 1 慕课网慕课网是做得比较好的程序员学习网站了.里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的. 2 极客学院极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了一些…
题目网站:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Problem Description Heard that eom is a fishing MASTER, you want to acknowledge him as your mentor. As everybody knows, if you want to be a MASTER’s apprentice, you should pass the trial. So when yo…
目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian oy 6707 Shuffle Card 6708 Windows Of CCPC 6709 Fishing Master @ 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 CSDN 6702 & \(1 and 1\)的话,\(c\)就必须为\(1\).其他的贪心选\(0\). 注意c为…
学习Java和其他技术的资源其实非常多,但也不是都是好的有用的,我们要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单.一:Java入门学习资源这里主要推荐的是几个技术学习网站,基本上都是视频学习资源. 1 慕课网慕课网是做得比较好的程序员学习网站了.里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的. 2 极客学院极客学院是我最早用于视频学习的网站,当时主要是听…
走进java 1.java简介 1.1 java分类: 1.2 开发包JDK 1.3.一处编译,到处运行的特点 2. 配置开发环境 3. java基本语法 3.1关键字和保留字 3.2 标识符命名规则(类名,方法名,变量名等) 3.3.java文件和类的规则: 3.4 注释demo 1.java简介 1.1 java分类 javaSE(java standard edition) java标准版 适用桌面系统 javaEE(java enterprise edition) java企业版 适用服…
  JVM调优实战 文档修订记录 版本 日期 撰写人 审核人 批准人 变更摘要 & 修订位置                                                                                                                                                                                     目录 1    理论篇    1 1.1   …
第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 OpenJDK 中所带的虚拟机,最初并不是Sun开发 Sun Mobile- Embedded VM/ Meta- Circular VM BEA JRockit/ IBM J9 VM JRockit曾号称世界上最快的java虚拟机,BEA公司发布.J9属于IBM主要扶持的虚拟机 Azul VM/ BEA…
主要内容: 1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则 JAVA的平台应用 JAVA的平台应用分为3个部分: 一.JAVA SE,主要用来开发桌面应用软件. 二.JAVA ME,嵌入式开发. 三.JAVA EE,网络编程,JSP等. 核心概念:JVM,JDK,JRE 字节码文件运行在JVM中,字节码和虚拟机是实现Java一次编译,四处运行跨平台的关键. 想吃鱼---去买鱼---杀鱼的过程相当于编译器----给鱼烧熟这个过程属于解释…