new关键字发生了什么
关于new关键字在jvm虚拟机中发生了什么
「已注销」
这个作者很懒,什么都没留下…
展开
-
new关键字发生了什么系列(概述)
new关键字发生了什么系列(概述)前言本系列是在阅读完《深入理解java虚拟机》后的整理。其中跳过了字节码相关的内容。整理的内容多数为书中内容。整理的思路是想把这些理论知识整合到平时的代码中。如有错误,请指正。正文JDK、JRE、JVM对比JDK(Java Development Kit)是Java语言开发工具包,包含Java程序设计语言,Java虚拟机,Java API类库JRE(...原创 2019-03-04 15:25:12 · 526 阅读 · 0 评论 -
new关键字发生了什么系列(一)类加载
new关键字发生了什么系列(一)类加载0x01 类加载过程加载目的:class文件无论是通过文件、网络的形式获取都将转换成二进制流加载到内存中。通过类的全限定名获取类的二进制流将字节流代表的静态存储结构转换为方法区的运行时数据结构(此处的方法区涉及到java内存结构)在内存中生成一个代表该类的Class对象,作为方法区这个类的各种数据访问入口在这里我们可以知道class文件被加载...原创 2019-03-04 15:25:48 · 457 阅读 · 0 评论 -
new关键字发生了什么系列(二)对象分配
前言当new关键字找到了需要实例化对象的类信息,那么就可以开始在内存中分配对象实例了。(此处就开始涉及Java内存结构了)0x01 内存分配通过new关键字每次我们都创建了该类的一个新对象实例,既然要创建对象实例,就要有个存放对象实例的地方。所以需要在内存中分配一块空间给这个对象实例问题:分配在内存的哪里?分配在Java内存结构中的堆区问题:如何分配?分配方式根据内存是否规整决定,...原创 2019-03-04 17:25:12 · 210 阅读 · 0 评论 -
new关键字发生了什么系列补充(Java内存结构)
前言这篇文章对应系列(二)而诞生,什么不会学什么。当初在学习的时候其实只是想有个线性的学习过程,但是书籍是做了系统的分模块介绍,并没有给我循序渐进的感觉。而且有时候与实际并没有太多的联系,很多环节不去想就不会对应了(但是还挺有趣)根据Java虚拟机规范,定义了内存区域0x01 程序计数器线程私有(所以生命周期随线程而生死)作用:线程从中获取所需要执行的字节码的行号指示器,如果执行的是本地...原创 2019-03-04 18:21:56 · 145 阅读 · 0 评论 -
new关键字发生了什么系列(三)垃圾回收
前言对象分配之后,那么在对象不再被需要的时候就需要被回收了0x01 垃圾判断引用计数法:每次引用,都对对象实例的引用计数+1,如果取消引用则-1,为0则是垃圾。但是存在循环引用的bug可达性分析:gc roots分析,就是如果还有变量引用那么就不是垃圾,没有变量引用则是垃圾。可达性分析会造成gc停顿(分析过程中引用不应该变化,所以停顿系统)0x02 垃圾收集流程第一步:判断是否垃圾并标...原创 2019-03-08 14:44:59 · 301 阅读 · 0 评论 -
new关键字发生了什么系列补充(HotSpot如何实现垃圾收集)
前言这篇文章是为了补充系列(三)中的垃圾收集算法在HotSpot中是实现枚举根节点枚举根节点就是根据可达性分析从gc roots中分析垃圾,但是gc roots节点有很多(常量、静态属性、栈帧中的本地变量表),如果逐个检查会很消耗性能。问题:gc root太多不能逐个检查,怎么办?HotSpot在类加载完成之后,就把对象内的什么偏移量上是什么类型的数据计算出来,在JIT编译过程中,也会在...原创 2019-03-08 14:46:03 · 188 阅读 · 0 评论 -
new关键字发生了什么系列补充(Tomcat类加载机制)
前言理解Tomcat的类加载机制有助于我们更好的理解容器是如何加载我们的web应用0x01 类加载机制帮助容器解决了什么问题问题1:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离问题2:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以共享问题3:服务器需要尽可能保证自身安全不受部署的Web应用程序影响服务器本身依赖的类库应该与应用程序依赖类...原创 2019-03-09 14:26:09 · 270 阅读 · 0 评论 -
new关键字发生了什么系列补充(OSGi类加载机制)
前言OSGi是基于Java语言的动态模块化规范特点:模块划分、可见性控制更精确模块级热插拔0x01 基础知识Bundle:OSGi中的每个模块称为Bundle,与普通java类库区别不大,都通过jar格式封装,内存存储java package和class。一个Bundle可以生命它所依赖的java package(Import-Package),也可以声明它允许导出发布的java ...原创 2019-03-09 15:29:58 · 160 阅读 · 0 评论 -
new关键字发生了什么系列补充(Java内存结构与垃圾回收问题)
前言学习了之前的一些知识之后,为了给自己学习之前的问题做简单的解答0x01 如何判断垃圾首先通过可达性分析算法分析(没有gc roots),然后在jvm中进行标记,finalize方法中可以取消标记(重新获取gc roots)。判断垃圾这个阶段是在发生gc的时候,垃圾收集器需要根据该方式确定垃圾并回收。0x02 对象在堆内存中如何分配1、是否在TLAB上分配2、jvm参数检查,内存需...原创 2019-03-09 16:56:20 · 164 阅读 · 0 评论