聊聊虚拟机【Java虚拟机专栏】
文章平均质量分 97
带你深入浅出学习虚拟机
小诚信驿站
公众号《小诚信驿站》,网名:小诚信驿站,小七,晓成。
工作经历:创业公司、京东、腾讯、目前在滴滴做一线研发。
业务经验:互联网保险、第三方支付、大促营销提报和效果分析、电商商业化、客服策略模型工程。
活动区域:CSDN-小诚信驿站,腾讯云-小诚信驿站,InfoQ-小诚信驿站,GitHub-小诚信驿站,公众号-小诚信驿站。想要找到我的话,小诚信驿站或者wolf_love666一般就可以找到啦。个人微信:lxc354555
展开
-
JVM探秘锁升级
文章目录一、预先善其事,必先利其器二、对象在内存中的布局三、锁升级3.1、问题1:为什么要进行锁升级?锁了就锁了,不就要加锁么?3.2、问题2:为什么要有偏向锁?3.3、问题3:为什么jdk8要在4s后开启偏向锁?四、锁的升级流程4.1、问题4:什么情况下轻量级锁要升级为重量级锁呢?4.2、问题5:都说syn为重量级锁,那么到底重在哪里?五、synchronized的底层实现环境说明:JDK8+,maven管理工具一、预先善其事,必先利其器maven引入包 <dependency转载 2021-07-27 20:21:16 · 494 阅读 · 0 评论 -
Java代码的执行篇
(1)代码编译为class文件(javac编译) (2)装载class(通过classLoader) (3)执行class 解释执行 编译执行 client compiler server compiler(1)代码编译为class文件(javac编译)编译器种类:前端编译器:sun的javac、Eclipse...原创 2019-06-16 12:10:43 · 1017 阅读 · 0 评论 -
JVM---高效并发与锁优化
高效并发:高效并发前提是并发的正确性,如何保证并发的正确性和如何实现线程安全?线程安全定义:当多个线程访问一个对象时候,如果不用考虑这些线程在运行时候环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。互斥同步。操作数据5大特征:不可变,绝对线程安全,相对线程安全,线程兼容和线程对立。不可...原创 2019-01-30 20:12:30 · 549 阅读 · 0 评论 -
JVM---内存模型是如何处理高并发问题
并发应用场景:TPS:衡量一个服务器性能的高低好坏,TPS(Transactions Per Second)是最重要的指标,它代表着一秒内服务端平均能响应的请求总数,而TPS与程序并发能力有关。物理计算机中的并发问题:处理器与内存交互,读取运算数据,存储运算结果。如何提高让并发执行若干个运算任务。可以先将数据缓冲到Cache中,当运算结束后再从缓存同步回内存。如何确保缓存一致性(Cach...原创 2019-01-30 19:24:43 · 1515 阅读 · 0 评论 -
JVM---数据存储和访问(字节码)
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。引申------操作数栈还是寄存器的架构区别。操作码的长度为一个字节(0~255)如果要将一个16位长度的无符号整数使用两个无符号字节存储起来(将它们命名为byte1和byte2),对应的值(byte1 <<...原创 2019-01-23 17:54:46 · 496 阅读 · 0 评论 -
JVM---JIT编译优化技术
课前提问:解释器与编译器的区别和联系解释器先执行,省去编译的时间,立即执行。程序运行后,编译器将代码编译成本地代码。如果内存限制较大,可以使用解释执行节约内存,反之可以使用编译执行来提升效率。C1和C2编译器的全称是什么?Client Compiler和Server Compiler。用户可以指定通过-client或者-server参数。默认的情况下,HotSpot虚拟机会根据自身...原创 2019-01-29 12:57:20 · 854 阅读 · 0 评论 -
JVM---编译器原理
一、具有代表性的常见编译器前端编译器:sun的javac、Eclipse JDT中的增量式编译器ECJJIT编译器:HotSpotVM的C1/C2编译器AOT编译器:GNU Compiler for the Java(GCJ)/Excelsior JET。二、编译过程可点击这里查看具体的...原创 2019-01-28 17:31:29 · 490 阅读 · 0 评论 -
JVM---数据存储和访问(类文件结构)
一、类文件结构先看下整体结构图(常量池和内容信息也在字节码文件信息中由于特殊内容比较多,所以单独拉出来)计算机只识0和1代码编译的结果从本地机器码到字节码是一个很重大意义的转变。文件的数据项主次版本号常量池:包含两大类常量:字面量(Literal)和符号引用(Symbolic References)字面量包括:文本字符串,声明为final的常量值等符号引用(编译原理方面概念...原创 2019-01-22 17:51:07 · 690 阅读 · 1 评论 -
JVM---问题集
1-高性能硬件上的部署策略(实战链接)2-集群间同步导致的内存溢出应用场景:部分数据在不同节点之间共享。读写频繁并且竞争激烈。可以多读,但是不能多写,多写就会导致集群各个节点之间网络交互非常频繁,当网络情况不能满足传输要求,重发数据在内存中不断堆积,很快产生内存溢出。3-堆外内存导致的溢出错误Direct Memory,当内存固定,比如8g,而堆内存分配过高7.6g,剩余0.4g分配给栈和...原创 2019-01-21 21:23:31 · 204 阅读 · 0 评论 -
JVM---小白都能看懂的内存管理(有趣的图文教程)
1、内存如何划分、内存溢出的原因创建对象new对象在内存中分布存储的数据结构对象访问方式(1、句柄池,2、直接指针)2、实战内存溢出这里可以参考之前的排查内存使用率高的时候的真实生产环境的一个案例场景现在我们可以打开jdk自带的Jvisualvm(安装jdk目录bin下)dump堆转储文件,项目目录路径下。当然了你可以设置路径在刚才的第一步的时候参数添加(dump...原创 2019-01-09 17:01:08 · 1836 阅读 · 0 评论 -
JVM---10分钟入门代码执行过程(字节码执行引擎剖析)
1、物理机与虚拟机的区别虚拟机是一个相对于物理机的概念。两种机器都有代码执行能力,区别是物理机的执行引擎是直接建立在处理器,硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。2、运行时栈帧结构运行的每一个方法调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈里从入栈到出栈的过程。栈帧是...原创 2019-01-24 19:59:40 · 750 阅读 · 0 评论 -
JVM---工具篇
jps主要用来输出JVM中运行的进程状态信息,使用场景同时启动了多个虚拟机进程,无法根据进程名称定位时候。jstack主要用来查看某个Java进程内的线程堆栈信息jmapjmap用来查看堆内存使用状况,一般结合jhat使用jhatJhat用于对JAVA heap进行离线分析的工具,它可以对不同虚拟机中导出的heap信息文件进行分析jstatJstat用于监控基于...原创 2019-01-18 19:09:32 · 310 阅读 · 0 评论 -
JVM---数据存储和访问
一、公有设计与私有实现在满足Java虚拟机规范的前提下,可以进行具体实现的修改和优化,虚拟机也是认可的。进而获得更高的性能、更低的内存消耗或者更好的可移植性。虚拟机实现的方式有两种:二、Class文件结构的发展虚拟机规范访问标志在原有基础上增加:ACC_SYNTHETIC、ACC_ANNOTATION、ACC_ENUM 、 ACC_BRIDGE、 ACC_VARARGSjdk1.6的...原创 2019-01-23 18:35:51 · 452 阅读 · 0 评论 -
JVM---小白能看懂的内存分配和垃圾回收(有趣的图文教程)
插播一条:为什么要了解这个,其实我之前也觉得是不是大公司故意提高门槛,故意找事。不就是一个ctrl+c,和一个ctrl+v么?实在不行百度和谷歌呗。事实上,今年到现在写这个东西的时候我发现越想往高处走,你的基础越得扎实。练武不练功到头一场空。而每个人都是会在3年为一个楷,会达到瓶颈。那么如何突破?是因为你的定位不一样了,你需要成为一名架构设计的人或者一个专家,当然 你需要更多的 money,这...原创 2019-01-11 12:53:38 · 1311 阅读 · 0 评论 -
【JVM研习】目录大纲
书中内容来自于深入理解java虚拟机,作者周志明。会融合自己的知识和理解来记录下来,为了赚钱而奋斗!Day Day Up !!!(一)内存管理内存如何划分、内存溢出的原因内存分配和垃圾回收(二)虚拟机如何执行数据存储和访问类加载过程的5个阶段以及工作原理代码执行和执行的内存管理(三)程序编译的过程,以及代码如何优化编译器原理JIT编译优化技术(四)高效并发内...原创 2019-01-03 19:06:49 · 5950 阅读 · 3 评论