JVM内存模型系列(堆、方法区以及对象和GC) 编程技术

JVM内存模型系列(堆、方法区以及对象和GC)

上文已经介绍了JVM内存模型中线程私有的部分(虚拟机栈、本地方发栈、程序计数器),那么本篇文章就来探讨下JVM中线程共享的区域:堆、方法区 方法区 方法区是JVM规范中定义的一个逻辑内存,在JDK1.8以前对方法区的实现叫做“永久代”,然而在JDK1.8以后讲“永久代”废弃,改为“元空间”对其方法区进行实现,并且存储位置是本地内存,但是它依旧是JVM的逻辑区域。方法区存储了每一个类的结构信...
阅读全文
Unsafe介绍及CAS原理解析 编程技术

Unsafe介绍及CAS原理解析

0.Unsafe介绍 JavaDoc说, Unsafe提供了一组用于执行底层的,不安全操作的方法。那么具体有哪些方法呢,我画了一张图。 可以看到Unsafe中提供了CAS,内存操作,线程调度,本机信息,Class相关方法,查看和设置某个对象或字段,内存分配和释放相关操作,内存地址获取相关方法。我自己抽空对上述方法进行了注释, 你可以在 这里看到 。 那么如何使用Uns...
阅读全文
SpringBoot 原理深入及源码剖析 编程技术

SpringBoot 原理深入及源码剖析

SpringBoot 项目间接继承 spring-boot-dependencies,该文件对常用技术框架进行了统一版本管理,所以在SpringBoot 项目 pom.xml 引入spring-boot-dependencies管理的依赖文件不需要标注依赖文件版本号。引入 starter 就可以实现对应场景开发,而不需要额外导入相关依赖文件。 自动配置(启动流程) SpringBoot ...
阅读全文
Java中的动态代理 Java

Java中的动态代理

Java中的动态代理 说起动态代理,首先想到的就是 Spring ,在 Spring 中有两种动态代理方式: JDK 动态代理和 Cglib 动态代理。 JDK动态代理 JDK 动态代理是 Java 本来就有的一种代理方式,关键类是 java.lang.reflect.InvocationHandler 。 我们先创建一个简单的 SpringBoo...
阅读全文
JVM-运行时数据区—方法区 Java

JVM-运行时数据区—方法区

在jdk7及以前,习惯上把方法区称为永久代。jdk8开始,使用元空间取代了永久代。 本质上,方法区和永久代并不等价。仅是对hotSpot而言的。《java虚拟机规范》对如何实现方法区,不做统一要求。例如:BEA JRockit/IBM J9中不存在永久代的概念。 现在看来,当年使用永久代,不是好的idea。导致Java程序更容易OOM(超过-XX:MaxPermSize上限)。 ...
阅读全文
史上最全的Android面试题集锦(十) Java

史上最全的Android面试题集锦(十)

原文链接: https://blog.csdn.net/xiangzh... 5、类加载器 程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以ClassLoader就是用来动态加载clas...
阅读全文
Spring葵花宝典 Spring

Spring葵花宝典

一 Spring简介 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 为了解决企业应用开发的复杂性而创建 二 Spring功能 1. 方便解耦 简化开发 Spring就是一个大工厂 专门负责生成Bean 可以将所有对象创建和依赖关系维护交给Spring管理 2. AOP编程的支持 Spring提供面向切面编程 可以方便的实现对程序进行权限拦截...
阅读全文
SpringIOC容器设计 Spring

SpringIOC容器设计

在Spring IoC容器的设计中,作者设计了两个接口来表示容器 BeanFactory BeanFactory简单粗暴,可以理解为HashMap,key是BeanName,value是Bean实例,通常只提供put和get。这系列容器只实现了容器的最基本功能,可看做为简单容器。 ApplicationContext ApplicationContext应用上下文,它作为容...
阅读全文
Mybatis源码(四)---SqlSession完成动态代理 Java

Mybatis源码(四)---SqlSession完成动态代理

在使用Mybatis时一般都会写个Dao接口,然后调用方法时,总结通过dao.方法完成sql查询,使用时代码如下: public interface UserMapper { //根据id查找 User selectById(int id); //一对多根据id查找 UserAndStudent selectInfo(int id); //一对多查找 ...
阅读全文
Loading...