Java虚拟机的内存结构

Chapter 2. jvms14 Data Types Run-Time Data Areas The PC Register Java Virtual Mechine Stacks Native Method Stacks Heap Method Area Run-Time Constant Pool This chapter gives an overview of the Java Virtual Machine architecture. 一、Data Types Like the Java programming language, the

java synchronized原理

一 sysnchronized的作用 保证代码互斥的访问临界区(每次只允许一个线程访问的区域) 保证共享资源的修改能够及时可见 二 用法 修饰代码块 修饰普通方法 修饰静态方法 三 个人理解 同步块就相当于在方法内限定了一个小范围的--局部临界区,synchronized的对象就相当于学操作系统进程同步信号量机制的那个信号量,只不过这个信号量为1,因为jvm限定了只能有一个线程拿到(修改)这个"信号量"。 而同步方法、同步静态方法就相当于整个方法作用域都作为临界区。 javap反编译可以看到进入同步块前后由两个指令,monitorenter和monito

文件解压缩&JAVA中的文件解压缩

//压缩文件地址 ZipOutputStream out = new ZipOutputStream(new FileOutputStream("/doc/tyrell/test/z.zip")); //向压缩包里放置一个文件 out.putNextEntry(new ZipEntry("b.txt")); FileInputStream fin = new FileInputStream("/doc/tyrell/test/b.txt"); int i;

java中的Http客户端对比

...

java内存占用分析

Jprofier

Java之多线程

java多线程学习一 基础 基础知识 进程   一个进程就是一个执行中程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。 线程   线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序控制的流程,但与进程不同的是: 同类滴多个线程是 共享一块内存空间和一组系统资源。 所以系统在各个线程之间切换时,开销要比进程小得多。所以线程好似 轻量级的进程。一个进程可以包含多个线程。 主线程   Java程序至少会有一个线程,这就是主线程,程序启动后是由 JVM创建主线程,程序结束是由JVM

String、StringBuffer、StringBuilder

String permute v. 改变...的序列,排列、交换、变更 mutable adj. 可变的、会变得 String 0. private final char value[]; private int hash; // Default to 0 private static final long serialVersionUID = -6849794470754667710L; private static final ObjectStreamField[] serialPersistentFields = n

static、final的位置问题

static 可以放在 1.方法返回值类型前 2.方法返回类型后不行!! final跟static一样一样!只要在 返回类型前,他俩随便放。

JUnit

概述 所谓单元测试是测试应用程序的功能是否能够按需要正常运行,并且确保是在开发人员的水平上,单元测试生成图片。单元测试是一个对单一实体(类或方法)的测试。 单元测试是每个软件公司提高产品质量、满足客户需求的重要环节。 单元测试可以由两种方式完成 人工测试 自动测试 手动执行测试用例并不借助任何工具的测试被称为人工测试。 - 消耗时间并单调:由于测试用例是由人力资源执行,所以非常缓慢并乏味。 - 人力资源上投资巨大:由于测试用例需要人工执行,所以在人工测试上需要更多的试验员。 - 可信度较低:人工测试可信度较低是可能由于人工错误导致测试运行时不够精确。 -

MyBatis动态Sql语句

1·if标签语句 "{ "", "" }" 2·choose 3·trim 4·where 使用where标签,where知道只有在一个以上的 if条件有指的情况下,才去插入 WHERE 子句, 而且最后是 AND 或 OR 开头的 where元素也知道如何去除 5·set 6·foreach

java位操作运算

虽然应用场景不多,但是一些源码里却出现了很多次。并非没有用。 在计算机中,所有数值都是 二进制数值。 ```byte 1个字节 8位short 2个字节 16位int 4个字节long 8个字节float 4个字节double 8个字节char 1个字节boolean 1位``` ## 操作对象数值在计算机中所有数都是以补码形式存储,正数最高位 0,负数最高位 1,正数三码合一,负数原码、反码、补码 分别应:对应正数最高位变1、最高位外 所有位取反、补(加)1 ### 原码一个数字转换成二进制就是它的原码,如: ```int a=5;//0000 000

关于synchronized和Integer自增的小问题

public class IntegerSysnTest implements Runnable{ public static Integer i=0; static IntegerSysnTest tyrell=new IntegerSysnTest(); @Override public void run(){ for(int j=0;j<10000;j++){ synchronized (i){ i++; } } } public static void main(String[] args) throws Inter

责任链模式

package backgulf.patterns; public abstract class AbstractLogger { public static int INFO = 1; public static int DEBUG = 2; public static int ERROR = 3; protected int level; private AbstractLogger nextLogger; public void setNextLogger(AbstractLogger l

多线程基本之Thread和Runnable

一、 Thread类 package java.lang; public class Thread implements Runnable { /* What will be run. */ private Runnable target; @Override public void run() { if (target != null) { target.run(); } } } 可以看到Thread类并没有完全实现Runnable接口的run,所以通过继

Callable和FutureTask

# 一、Callable接口 import java.util.concurrent.Callable; Callable接口定义很简单: @FunctionalInterface public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compu

线程池

请输入...

多线程

* 进程   一个进程就是一个执行中程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。 * 线程   线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序控制的流程,但与进程不同的是: 同类的`多个线程是 共享一块内存空间和一组系统资源。` 所以系统在各个线程之间切换时,`开销要比进程小`得多。所以线程好似 轻量级的进程。一个进程可以包含多个线程。 不管进程还是线程,都是context of execution。在linux中,无论进程还是线程,根本上都是通过clone一个已经

JAVA对象创建过程初识

一、 对象的创建 1. 执行new 操作时,会先看能不能在常量池中定位到这个类的符号引用,然后检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有就要先执行相应的类加载过程。 2. 类加载过后虚拟机将给这个新的实例分配内存。对象(实例)所需要的内存大小在类加载完成后就可以确定了。 3. 内存分配完成后 虚拟机必须把分配的内存空间初始化,各字段设为0值。 4. 接下来,虚拟机还要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码(实际上对象的哈希码会延后到真正调用Object::hashCode方法时才计

JVM类加载·一 Class类文件

https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-4.html JVM不与任何语言绑定,包括JAVA,它只认class文件这种特殊的文件格式。 class文件中包含了JAVA虚拟机指令集、符号表和其他信息。 class文件格式采用类似于C结构体的结构来存储数据,数据类型只有两种,基本的无符号类型和表(Tables)类型,表类型由0个或多个无符号类型或其他表组成。 //跟rust u8代表8位不同,这里代表的是字节。Byte。 ClassFile { u4 ma

类加载机制

JAVA虚拟机 把描述类的数据 从 class文件 加载到内存,并对数据进行校验、转换解析和初始化,最后形成可以被虚拟机直接使用的指令和数据 的这个过程 叫做虚拟机的类加载机制。 JAVA类加载的 加载、连接、初始化过程整个发生在 程序运行期间。虽然比起编译型程序多了类加载过程的开销,但是增加了程序的扩展性和灵活性。 一、一个class文件从硬盘到内存的整个生命周期 加载Loading -> [验证Verification,准备Preparation,解析Resolution] -> 初始化Initialization -> 使用Using -> 卸载U

类加载器和双亲委派模型

请输入...

JAVA8至17的新特性一览

JAVA SE10之后,每6个月更新一次版本,每3年有一个LTS版本。即将发布的JAVA17即是LTS。 http://openjdk.java.net/ JAVA8-JAVA17: 1. lambda表达式--函数式接口实现类 2. 方法引用 3. 接口增加default默认实现方法和static静态默认方法 4. 重复注解 5. Optional类 6. Stream流 7. 新的时间日期类 8. 标准库中增加Base64相关类 9. 其他。 1. Jigsaw模块化 2. Jshell 2. 集合增加.of(E...values)方法,构造不可变集

JAVA文件解压缩

请输入...

Java中Integer初始化

常用的Integer初始化方式有: Integer a = 10; Integer b