![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java虚拟机
胃小
这个作者很懒,什么都没留下…
展开
-
深入理解java虚拟机之对象的创建
本文介绍普通java类的new 操作之后的一系列过程; 对象在new 之后会首先去方法区中找对应的类的引用,并确认该类是否已经完成加载,解析,初始化等操作,如果未执行,则执行类的加载等一系列动作; 然后是对象的内存的分配,该对象需要分配多大的空间在类加载完成后就已经确定了,实例对象的内存在堆中分配,分配内存实际上就是讲堆中的一块空间划分出来,这个划分的动作有两种实现方式,如果堆...原创 2018-03-23 12:56:51 · 145 阅读 · 0 评论 -
深入理解java虚拟机之内存模型
程序计数器: 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由于J...原创 2018-03-19 20:56:27 · 182 阅读 · 0 评论 -
深入理解java虚拟机之内存交互
在JMM内存模型中,java被分为工作内存和主内存,并规定所有的变量都保存在主内存,同时每个线程都有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量 。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成; 此处的工作内存,主内...原创 2018-03-30 16:57:17 · 298 阅读 · 0 评论 -
深入理解java虚拟机之Class文件简述
对于习虚拟机来说,Class文件是个绕不开的话题,但他内容比较复杂,尤其涉及数据结构的部分,很是难懂,本文仅对Class文件的大体结构进行总结 Class文件是以8位字节为基础单位的二进制流,其结构中只有两种数据类型,无符号和表;对于无符号,u1,u2,u4,u8分别代表一个字节,两个字节,四个字节和八个字节的无符号数,无符号数可以用来描述数字,引用类型,数量值和字符串;对于表,...原创 2018-03-25 13:56:40 · 117 阅读 · 0 评论 -
深入理解java虚拟机之类的加载
Class文件最终都要加载到虚拟机中才能被使用,本文即介绍虚拟机的类加载过程; 类加载的时机: 虚拟机明确规范,有且只有5中情况会进行类的加载:1.使用new关键字实例化对象的时候,使用到类的静态变量的时候(被final修饰的静态变量除外),以及调用类的静态方法的时候;2.使用反射操作类的时候,如果类没有初始化,则先初始化类,3.如果初始化一个类,发现其父类没有初始化,...原创 2018-02-13 12:47:09 · 145 阅读 · 0 评论 -
深入理解java虚拟机之垃圾回收机制
java的垃圾回收是自动进行的,并不需要程序员特别关心,本文对java的垃圾回收机制做简述;标记对象无用的算法: 引用计数算法: 其基本思路是:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。但其有一个致命弱点:它很难解决对象之间相互循环引用的问题。 可达性分析算法(java使...原创 2018-02-03 12:02:48 · 151 阅读 · 0 评论 -
并发编程之使用堆栈信息优化接口
最近在使用jmeter压测代码的时候发现单线程模式响应速度很快,但是多线程下总是很卡,怀疑有锁;所以打印堆栈观察了下各个线程:最终找到了这段信息:"play-thread-9" prio=10 tid=0x00007faba8003800 nid=0xc2ab runnable [0x00007facf93cd000] java.lang.Thread.State: RUNNABL...原创 2018-05-13 11:38:37 · 215 阅读 · 0 评论 -
深入学习docker之部署zookeeper与kafka
使用 wurstmeister 下的zookeeper 与kafka docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 然后使用启动两个容器 docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper docker ...原创 2018-09-09 18:44:07 · 1540 阅读 · 1 评论 -
内存泄漏排查
最近生产环境某项目突然崩溃,查看堆栈发现虚拟堆已经满了,查看配置, jmap -heap [pic] 堆内存为2G,理论上应该是够用的,所以怀疑为内存泄漏, 使用 jmap -histo:live [pid] 打印堆中的对象,发现无法打印, 使用 jmap -dump:format=b,file=filename.hprof [pid] 导出hprof 文件,之后在HeapAnal...原创 2018-10-12 13:54:52 · 322 阅读 · 0 评论