![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
馥钰
好人一生平安!道阻且长,行则将至!
选择一条自己喜欢的路,向前走,莫回头!
天道酬勤!
学海无涯,温故而知新!
线下不努力,线上出问题!线上出问题,努力全白费!
分布式系统、高并发、大流量,分布式计算、分布式存储!
展开
-
JAVA虚拟机体系结构
JAVA虚拟机的生命周期一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序转载 2017-08-11 17:06:54 · 254 阅读 · 0 评论 -
深入理解JVM之一:Java内存区域
前言Java虚拟机运行时数据区分为以下几个部分:方法区、虚拟机栈、本地方法栈、堆、程序计数器。如下图所示:程序计数器程序计数器可以理解为当前线程执行的字节码的行号指示器,字节码解释器就是通过改变这个值来获取需要执行的下一条需要执行的字节码指令。对于多线程来说,每条线程都有自己的程序计数器,这样各线程之间的计数器互不影响,这类内存区域也叫作“私有内存”(可以看到其实并不是私有的),之所以这么设计,是...转载 2017-07-25 17:46:46 · 214 阅读 · 0 评论 -
深入理解JVM之四:详解垃圾收集器
前言前面已经对垃圾收集算法有了较为详细的介绍,这里我们将对JVM中具体的垃圾回收器进行介绍,在虚拟机规范中并没有对垃圾回收器如何实现具体介绍,因此每个厂商的垃圾回收器可能会完全不同,但是我们介绍的是基于JDK1.7之后的Hotspot虚拟机(包括前面对Java虚拟机的介绍也是基于jdk1.7版本的)。在Hotspot中,虚拟机的收集器主要有下:可以看到垃圾收集器是按对象的分代来划分的,可以用线条连...转载 2017-07-27 17:37:00 · 252 阅读 · 0 评论 -
JVM调优过程
1、确定堆内存大小:-Xmx、-Xms2、合理分配新生代和老年代:-XX:NewRatio、-Xmn、-XX:SurvivorRatio3、确定永久区大小:-XX:Permsize、-XX:MaxPermSize4、选择垃圾收集器5、对垃圾收集器进行合理的设置6、禁用显示GC:-XX:+DisableExplicitGC7、禁用类元数据回收:-Xnoclassgc8、禁用类验证:-Xverify:...原创 2018-03-21 11:09:20 · 228 阅读 · 0 评论 -
Java常见的几种内存溢出及解决方法
https://jingyan.baidu.com/article/f3ad7d0f19d07709c3345b9a.htmlJava常见的几种内存溢出及解决方法【情况一】:java.lang.OutOfMemoryError:Java heap space:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整...转载 2018-03-21 12:02:37 · 254 阅读 · 0 评论 -
java内存溢出优化
本文转自:http://www.importnew.com/11336.html另外付JVM参数介绍:http://www.cnblogs.com/langtianya/p/3898760.html高性能应用构成了现代网络的支柱。LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求。要优化用户体验,低延迟地响应这些请求非常重要。比如说,用户经常用到的一个功能是了解动态信息——不...转载 2018-03-21 14:02:48 · 1167 阅读 · 0 评论 -
jvm 内存溢出的多种原因及优化方法
http://blog.csdn.net/zyc88888/article/details/64905716让我们看一下我们日常在开发过程中接触内存溢出的异常: Exception in thread "main" [Full GCjava.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown...转载 2018-03-21 14:04:24 · 750 阅读 · 0 评论 -
JVM参数调优、内存溢出问题的解决办法
https://www.2cto.com/kf/201802/723664.htmlJVM参数调优、内存溢出问题的解决办法设置堆内存大小错误原因:java.lang.OutOfMemoryError: Java heap space 堆内存溢出解决办法:设置堆内存大小:?1-Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError代...转载 2018-03-21 14:06:51 · 879 阅读 · 0 评论 -
java面试题:如何解决内存溢出
https://zhidao.baidu.com/question/109897431.html第一对所有的代码包括页面中的java代码都进行一遍彻底的回顾检查,1.对那些静态(static)的对象要特别留神,特别是类型为Map,List,Set的,静态的变量会一直驻存在内存中,生命周期比较长,不会被垃圾器回收。2.对于代码,要审查是否生成了大量的冗余的对象,还有一些逻辑业务处理的类,算...转载 2018-03-21 14:08:22 · 1997 阅读 · 0 评论 -
JVM为什么分线程共享和非线程共享
http://blog.csdn.net/zcl1359205840/article/details/51019382大多数 JVM将内存区域划分为 线程共享:Method Area(Non-Heap)(方法区) ,Heap(堆) ,非线程共享 Program Counter Register(程序计数器) , VM Stack(虚拟机栈转载 2018-01-22 23:30:21 · 962 阅读 · 0 评论 -
深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构
运行时栈帧结构栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素。每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程。每一个栈帧在编译程序代码的时候所需要多大的局部变量表,多深的操作数栈都已经决定了,并且写入到方发表的 Code 属性之中,一次一个栈帧需要多少内存,不会受到程序运行期变量数据的影响,仅仅取决于具体的虚拟机实现。转载 2017-08-15 15:55:17 · 235 阅读 · 0 评论 -
栈和栈帧
栈的概念:每个任务(进程)有一个栈(stack),在这个进程中每个函数被调用时分别从这个栈占用一段区域,称为帧(frame)。寄存器esp指向当前整个栈的栈顶,寄存器 ebp指向当前帧的帧底。这里务必要区分清楚,栈相对于整个系统而言,调用栈(call stack)相对于某个进程而言,帧(stack frame)则是相对于某个函数而言。具体来说,call stack就是指存放某个程序的正转载 2017-07-27 17:53:43 · 960 阅读 · 0 评论 -
深入理解JVM之一:Java内存区域
前言Java虚拟机运行时数据区分为以下几个部分: 方法区、虚拟机栈、本地方法栈、堆、程序计数器。如下图所示:程序计数器程序计数器可以理解为当前线程执行的字节码的行号指示器,字节码解释器就是通哟改变这个值来获取需要执行的下一条需要执行的字节码指令。对于多线程来说,每条线程都有自己的程序计数器,这样各线程之间的计数器互不影响,这类内存区域也叫作“私有内存”(可以看到其实并不是私转载 2017-07-27 16:12:20 · 236 阅读 · 0 评论 -
深入理解JVM之二:垃圾收集器概述
前言我们知道Java的内存区域分为程序计数器、虚拟机栈、本地方法栈、Java堆和方法区,而且其中的程序计数器、虚拟机栈和本地方法栈都是线程独立的,也就是说这三块内存区域的生命周期与线程是同生共死的。栈中帧栈在类结构确定的时候就已经知道该分配多少内存了,所以当线程结束的时候,内存也跟着一起回收了,从这个角度看,这三块的内存区域的内存分配和垃圾收集就比较固定了。反观Java堆和方法区,比如我们定义一个...转载 2017-07-27 16:58:19 · 211 阅读 · 0 评论 -
深入理解JVM之三:垃圾回收算法
前言垃圾收集算法是JVM中垃圾收集器的方法论,所以了解算法是必要的,在算法领域只做最简单的介绍,力求文章的简单易懂。垃圾收集算法主要有以下几种:标记-清除算法(mark-sweep)、复制算法(copying)和标记-整理算法(mark-compact)。随着jdk版本的升级,垃圾收集器也在不断的升级,现在最新的垃圾收集器已经能够对Java堆中一部分进行回收,也能够对Java堆中另一部分进行回收,...转载 2017-07-27 17:33:36 · 262 阅读 · 0 评论 -
深入理解JVM之五:类文件结构
前言我们平时在DOS界面中往往需要运行先运行javac命令,这个命令的直接结果就是产生相应的class文件,然后基于这个class文件才可以真正运行程序得到结果。自然。这是Java虚拟机的功劳,那么是不是Java虚拟机只能编译.java的源文件呢?答案是否定的。时至今日,Java虚拟机已经实现了语言无关性的特点。而实现语言无关性的基础是虚拟机和字节码的存储格式,Java虚拟机已经不和包括Java语...转载 2017-07-27 17:45:45 · 203 阅读 · 0 评论 -
深入理解JVM之六:类加载机制
前言虚拟机的类加载机制可以简单描述如下:Java虚拟机把描述类的数据从Class文件中加载到内存中,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型。虚拟机加载进行类加载的过程是在程序运行期间完成的,在程序运行期间加载的好处是可以动态扩展,说白了就是在编译期间虚拟机是不知道要加载哪些类或者接口的,只有在程序运行的时候才知道需要加载的类。举个例子,我们在一个包下面写了很多类...转载 2017-07-27 17:47:01 · 275 阅读 · 0 评论 -
深入理解JVM之七:静态分派与动态分派
前言这里所谓的分派指的是在Java中对方法的调用。Java中有三大特性:封装、继承和多态。分派是多态性的体现,Java虚拟机底层提供了我们开发中“重写”和“重载”的底层实现。其中重载属于静态分派,而重写则是动态分派的过程。除了使用分派的方式对方法进行调用之外,还可以使用解析调用,解析调用是在编译期间就已经确定了,在类装载的解析阶段就会把符号引用转化为直接引用,不会延迟到运行期间再去完成。而分派调用...转载 2017-07-27 17:47:53 · 250 阅读 · 0 评论 -
对象的访问定位:句柄与直接指针
对象的访问定位:句柄与直接指针Java程序通过栈中的reference数据来操作堆上的具体对象,而对象的访问方式取决于虚拟机的实现。主流访问方式有句柄和直接指针两种句柄方式Java堆中将会划出一块内存来作为句柄池,reference对象存储的就是对象的句柄地址。句柄中包含了对象实例数据和类型数据的具体地址:直接指针方式reference对象直接存储对象地址:转载 2017-07-27 17:51:39 · 310 阅读 · 0 评论 -
浅谈栈帧
一、 什么是栈帧?什么是栈帧,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面,很明显栈上保持了N个栈帧的实体转载 2017-07-27 17:52:52 · 284 阅读 · 0 评论 -
Java常见内存溢出异常分析
http://www.importnew.com/14604.htmlJava虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。栈溢出(StackOverflowError)栈溢出抛出...转载 2018-03-21 14:29:43 · 228 阅读 · 0 评论