JVM
挖坑埋你
这个作者很懒,什么都没留下…
展开
-
Java VisualVM无法检测到本地java程序的解决办法
win10系统下启动jvisualvm应用,报“VisualVM无法检测到本地java程序”的错误!在网上查了一些方法,大概原因有2种:操作系统的临时文件目录所在的磁盘格式不是NTFS(可以通过echo %TMP%命令查看)操作系统用户名含有下划线(可以通过echo %username%查看)解决办法如下:第一种原因:点击系统盘属性,可以查看:第二种原因:其实是权限不原创 2018-01-12 22:44:15 · 11898 阅读 · 0 评论 -
JVM(十)Class类文件结构
文章内容来自《深入理解JVM》和网络资料整理一、Class文件组成内容class文件是一组以8位字节为基础单位的二进制流,其与Java虚拟机指令集和符号表以及若干其他辅助信息相对应。该设计有如下优点:平台无关性,class文件可以运行在任意平台,无需考虑各个平台机器指令集不同的问题;语言无关性,不论何种语言,只要生成的class文件格式符合JVM虚拟机规范即可。原创 2018-01-28 22:50:06 · 399 阅读 · 0 评论 -
JVM(八)JVM 垃圾收集器介绍
前面介绍了垃圾回收算法,但是 JVM 如何根据这些算法进行内存回收呢?因为内存回收如何进行是由虚拟机所采用的GC收集器决定的,而通常虚拟机中往往不止有一种GC收集器。下面继续来看HotSpot中有哪些GC收集器。如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。HotSpot虚拟机包含的所有收集器如下:上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在原创 2018-01-21 23:02:07 · 746 阅读 · 0 评论 -
JVM(七)JVM 中常见垃圾收集算法介绍
JVM 中常见的垃圾收集算法有四种:标记-清除算法(Mark-Sweep);复制算法(Copying);标记-整理(Mark-Compact);分代收集。下面我们来一一介绍:一、标记-清除算法(Mark-Sweep)这是最基础的垃圾收集算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。它的主要缺点有两个:一原创 2018-01-21 18:51:07 · 551 阅读 · 0 评论 -
JVM(六)JVM 判断对象是否存活过程分析
文章根据《深入理解 JVM》和网上其他资料整理而成。如有错误,欢迎大家指正!前面介绍了Java内存运行时区域的各个部分,其中:程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进人和退出而有条不紊地执行着出栈和人栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑原创 2018-01-21 17:21:30 · 500 阅读 · 0 评论 -
JVM(五)实战:OutOfMemoryError 异常
本篇内容整理自《深入理解JVM》第二章 第四节本节内容的目的有两个:第一,通过代码验证Java虚拟机规范中描述的长个运行时区域存储的内容;第二,希望读者在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。 下文的代码都是基于Sun公司的HotSpot虚拟机运行的。原创 2018-01-20 14:13:21 · 770 阅读 · 0 评论 -
JVM(四)JVM中对象的访问定位方式
Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于在Java虚拟机规范里面只规定了reference类型是一个指向对象的引用,并没有定义这个引用应该通过什么种方式去定位、访问到堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。主流的访问方式有使用句柄和直接指针两种。 使用句柄使用句柄访问的话,Java堆中将会划分出一块内存来作为句柄池,refe原创 2018-01-19 23:36:38 · 1568 阅读 · 0 评论 -
JVM(三)JVM中对象的内存布局详解
在前面我们了解了Java对象在JVM中的创建过程,接下来我们再来分析一下对象在JVM中的内存布局。在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据( Instance Data)和对齐填充(Padding)。如下图所示(原谅我盗用了两张图。两张图是一样的,只是表达方式不一样,大家看看哪个好记吧!): 接下来我们分析其中的每一部分。原创 2018-01-19 23:21:47 · 2924 阅读 · 0 评论 -
JVM(二)JVM 创建对象过程分析
在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?首先来看一下JVM创建对象时的流程图:Created with Raphaël 2.1.2开始JVM 执行 new 指令类已加载?为新生对象分配内存内存规整?指针碰撞并发处理:同步或TLAB将分配到的内存空间初始化为零值JVM原创 2018-01-19 11:15:11 · 1695 阅读 · 0 评论 -
JVM(一)JAVA 运行时数据区域
先说点题外话,最近看了不少技术书籍,每次看的时候都是一边看一边忘,忘得比看的还快呢 ~_~!。其实关于 JVM 的书也看了两遍了,但是现在好像又都忘干净了(真实哭笑不得),所以总是感觉徒劳无功。鉴于自己的忘性比较大,所以开始了这一个系列的专栏。本专栏的文章全部来自于网上各种资料的整理,主要是便于自己忘记之后在查看。欢迎大家一起学习,也欢迎大家批评指正!!!Java 虚拟机在执行 Java 程原创 2018-01-18 23:27:41 · 578 阅读 · 0 评论 -
JVM(九)内存分配策略
文章内容来自《深入理解JVM》和网络资料的整理Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存;回收分配给对象的内存。对象的内存分配,往大方向上讲就是在堆上的分配,对象主要分配在新生代的Eden区上。少数也可能分配在老年代,取决于哪一种垃圾收集器组合,还有虚拟机中的相关内存的参数设置。下面先简单介绍一下JVM中的年代划分:新生代、老年代、原创 2018-01-27 22:15:20 · 3685 阅读 · 0 评论 -
jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“
Visual GC提示”不受此JVM支持“,可以使用此方法解决。一、添加配置文件 jstatd.all.policy[root@localhost /]# cd /usr/local/src/jdk1.8.0_131/bin/[root@localhost bin]# vim jstatd.all.policygrant codebase "file:${java.hom原创 2018-01-07 22:07:16 · 12424 阅读 · 0 评论 -
JDK安装(bin)
一、下载[root@manager-server /]# mkdir /usr/local/jdk6[root@manager-server /]# cd /usr/local/jdk6/[root@manager-server jdk6]# wget http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64原创 2018-01-05 21:22:59 · 5193 阅读 · 0 评论 -
JDK安装(tar.gz)
1、下载并解压源码包[root@localhost src]# wget http://mirrors.theltfire.com/jdk-8u131-linux-x64.tar.gz[root@localhost src]# tar xvf jdk-8u131-linux-x64.tar.gz2、配置环境变量[root@localhost jdk1.8.0_131]# vi...原创 2018-01-05 21:16:43 · 8067 阅读 · 0 评论 -
JVM(十一)Java 内存模型
Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问却经常出错,因此在某些...转载 2018-06-11 12:24:26 · 1997 阅读 · 0 评论