
Java虚拟机JVM
文章平均质量分 63
chenkaibsw
加油
展开
-
JVM—内存布局
1.JVM内存布局组成: 包含堆区(Heap),元数据区(Metaspace),虚拟机栈(JVM Stack),本地方法栈(Native Method Stacks),程序计数器(Program Counter Register) 2.堆(Heap): 1)概括说包含了新生代和老年代,其中新生代又包含了Eden, Survivor(from, to)。每次Minor GC,会将Eden和Survivor from中存活的对象复制到Survivor to中。 2)晋升老年代条件是age为15,大对象直原创 2022-04-10 22:59:18 · 1232 阅读 · 0 评论 -
JVM—G1笔记
1.JVM调优的两个指标:吞吐量,停顿时间 停顿时间:简单理解为STW的时间,此时用户代码不会执行。 吞吐量:运行用户代码时间/(运行用户代码时间 + 运行垃圾收集器的时间) 这两者是矛盾的,选择了停顿时间意味着要牺牲了吞吐量,选择了吞吐量意味着要牺牲停顿时间。根据具体的业务场景,选择优先停顿时间还是优先吞吐量。 2.G1的参数设置: -XX:+UseG1GC 开启G1 -Xms2G -Xmx2G 设置堆的大小,G1一半不需要手动设置eden和survivor的大小,G1自己动态调整 -Xss原创 2022-04-10 16:06:48 · 566 阅读 · 0 评论 -
JVM——OOM处理
一次OOM产生和分析演示: 1. IEDA配置 -Xmx30M -Xms30M -Xmn10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\tmp\finance-collection-heapdump.hprof 在OOM的时候dump出文件 2. 演示代码: public void createOrderList(){ List<Order> list = new ArrayList<>原创 2022-04-10 08:45:27 · 592 阅读 · 0 评论 -
深入理解Java虚拟机第三章知识点记录
1.课本62页:判断对象是不是已死: 引用计数法:每当有一个地方引用它时,计数器就加1,当引用失败时,计数器值就减1.任何时刻计数器为0的对象就不能再被引用。缺点:难以解决对象之间相互循环引用的问题。 可达性分析算法:从GC Roots对象作为起始点,向下搜索,当一个对象到GCRoot不可达时,则此对象是不可用的。 2.课本64页:可作为GC Roots的对象...原创 2018-06-30 15:25:44 · 946 阅读 · 2 评论 -
第12章内存模型和线程的知识点记录 13章线程安全与锁优化知识点记录
1.课本362页:Java虚拟机规范试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台都能达到一致的内存访问效果。2:课本363页:Java内存模型规定了所有的变量都存储在主内存中,每条线程都有自己的工作内存。线程的工作内存保存了被该线程使用到的变量的主内存副本拷贝。3.课本366页:volatile关键字的两种特征:第一:可见性:保证此...原创 2018-07-02 22:36:40 · 183 阅读 · 0 评论 -
Java第二章小结
参考博客学习https://blog.youkuaiyun.com/chenkaibsw/article/details/80812453 1.程序计数器 它是当前所执行的字节码的行号指示器,字节码解释器工作时就是通过改变计数器的值来选择下一条需要执行的字节码指令、分支、跳转、循环等基本功能都要依赖它来实现。每一个线程都有一个独立的程序计数器,各线程间的计数器互补影响。 2.Java虚拟机栈 该区域也...原创 2018-07-01 14:39:44 · 712 阅读 · 0 评论 -
Java中的几种常量池
参考https://www.zhihu.com/question/55994121 1.运行时常量池:方法区的一部分,存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池。一般来说,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也存储到运行时常量池中。运行时常量池具备动态性,也就是并非预置入Class文件的内容才能进入方法区的运行时常量池,运行...转载 2018-06-28 20:45:12 · 7943 阅读 · 3 评论 -
JDK, JRE 和JVM的区别
转自http://www.importnew.com/7021.htmlJDK, JRE 和JVM是Java编程语言的核心概念。尽管它们看起来差不多,作为程序员我们也不怎么关心这些概念,但是它们是不同的针对特定目的的产品。这是一道常见的java面试题,而本文则会一一解释这些概念并给出它们之间的区别。Java 开发工具包 (JDK)Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一...转载 2018-06-29 10:28:02 · 197 阅读 · 0 评论 -
JVM常见面试题
转自:https://blog.youkuaiyun.com/zd836614437/article/details/64126826题目: http://www.jsondream.com/2016/12/04/java-interview-question.html答案如下:1. 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序答:先静态、先父后子。 先静态:...转载 2018-06-26 14:54:14 · 281 阅读 · 0 评论 -
Java常见面试题
转自https://blog.youkuaiyun.com/hsk256/article/details/4910495511.JVM内存分哪几个区,每个区的作用是什么?java虚拟机主要分为以下一个区:方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时...转载 2018-06-26 14:36:16 · 152 阅读 · 0 评论 -
深入理解Java并发之synchronized实现原理
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据...转载 2018-06-30 09:58:13 · 338 阅读 · 0 评论 -
Java虚拟机的类加载机制知识点记录
博客:虚拟机的类加载机制:https://blog.youkuaiyun.com/ns_code/article/details/178815811.209页虚拟机将Class文件加载到内存,并对数据进行校验,转换解析和初始化,最后形成能被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。Java语言中,类型的加载,连接初始化都是在程序运行期间完成的2.209页语言上的约定:每个Class文件都有可能代...原创 2018-06-30 17:32:33 · 167 阅读 · 0 评论 -
java多态实现的JVM调用过程
多态同一个类的不同表现形态,不同的形态是通过其不同的子类体现 java通过将子类对象引用赋值给超类对象变量, 来实现动态方法调用。面向对象的三个特征与含义下面看例子:public class A{ public String name = "父类name"; public void move(){ System.out...转载 2018-05-22 10:56:06 · 1218 阅读 · 0 评论 -
深入Java虚拟机第一章小结:Java内存区域与内存溢出
本文转自http://blog.youkuaiyun.com/ns_code/article/details/17565503'内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(...转载 2018-06-26 15:04:19 · 157 阅读 · 0 评论 -
Java虚拟机之垃圾收集算法
1.对象是不是已经死亡1)引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,只要对象的引用计数器的值为0,那么对象就不可能再被使用。引用计数的缺点:很难解决对象之间相互循环引用的问题,如下图,objA指向对象A,objB指向对象B,现在将objA.instace = objB,同时将objB.instance = objA,然后将objA=n...原创 2018-04-23 10:31:35 · 234 阅读 · 0 评论