java
爱因斯彬
临渊羡鱼,不如退而结网。
展开
-
JVM运行时栈帧结构-局部变量表
下面将对运行时栈帧内部各个部分的作用和数据结构进行讲解,以及代码进行验证。局部变量表(Local Variable Table)局部变量表是一组变量值存储空间,用于存储方法参数和方法内的局部变量。在Java程序编译为Class字节码文件时,就在方法的Code属性(字节码文件)的max_locals数据项中定义了该方法所需要分配的局部变量表的最大容量。食堂打饭窗口就好比一个局部变量表,每到早中晚,调用不同的函数,生成不同的饭菜,但是每天摆出来的饭菜就那么多,因为食堂窗口就那么大。(这里篡改字节码文件原创 2020-05-30 15:56:44 · 633 阅读 · 0 评论 -
JVM运行时栈帧内部结构
栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。简而言之,类似于弹夹,填弹为入栈,开枪为出栈,先进后出,后进先出。运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行原创 2020-05-30 15:47:52 · 527 阅读 · 0 评论 -
JDK中的动态代理
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IOC控制反转,另一个就是AOP面向切面编程,AOP的原理就是java的动态代理机制。在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的。InvocationHandler(Interface)大概意思就是说每一个.原创 2020-05-23 23:35:37 · 356 阅读 · 0 评论 -
java中的四中引用
在JDK1.2之前,Java中引用的定义很传统:如果引用类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过于狭隘,一个对象只有被引用或者没被引用两种状态。我们希望描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用4种,这4种引用强度依次减弱。1、强引.原创 2020-05-23 19:56:07 · 415 阅读 · 0 评论 -
leetcode算法题-链表操作(两数相加)
leetcode 算法题: 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble...原创 2020-05-07 16:10:40 · 383 阅读 · 0 评论 -
SpringBoot搭建demo
1、Spring官网下载Demo 地址:https://spring.io/projects/spring-bootQuick start跳转到配置页面根据实际需要选择语言、版本、依赖等配置(这里勾选了Spring Web Starter 集成Tomcat用于启动web服务)点击下载解压下载后的demo.zip2、intellij idea导入工程并启动选择刚才解压的目录...原创 2019-09-05 09:27:17 · 1116 阅读 · 0 评论 -
两种方式实现线程通信:三个线程交替打印AABBCC
class Resource { String firstPrint = "AA"; public synchronized void printAA(String next) throws InterruptedException { while (!Objects.equals(firstPrint, "AA")) { wait();...原创 2019-09-17 15:54:29 · 3722 阅读 · 2 评论 -
线程通信:三个线程交替打印1~99
三个线程交替打印1~99如 t1,t2,t3线程打印如下t1: 1t2: 2t3: 3t1: 4t2: …具体实现思路: 线程共享资源类,保证操作共享资源时加锁,每个线程执行一次打印之后唤醒下一个线程,并且保证结束打印后线程不能处于阻塞状态public class PrintHundred { public static void main(String[] args)...原创 2019-09-19 19:04:47 · 4892 阅读 · 3 评论