JVM系列-06-1、内存与垃圾回收篇---本地方法接口
本地方法接口 什么是本地方法? 简单地讲,一个 Native Method 是一个 Java 调用非 Java 代码的接囗。一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机制,比如在 C++ 中,你可以用 extern "c" 告知 C++ 编译器去调用一个 C 的函数。 "A native method is a Java method whose implementation is provided by non-java code."(本地方法是一个非 Java 的方法,它的具体实现是非 Java 代码的实现) 在定义一个 Native Method 时,并不提供实现体(有些像定义一个 Java interface),因为其实现体是由非 Java 语言在外面实现的。 本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++ 程序。 代码举例说明 Native 方法是如何编写的。 123456public class IhaveNati ...
JVM系列-05-1、内存与垃圾回收篇---虚拟机栈(重点)
虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少 Java 开发人员一提到 Java 内存结构,就会非常粗粒度地将 JVM 中的内存区理解为仅有 Java 堆(heap)和 Java 栈(stack)?为什么? 首先栈是运行时的单位,而堆是存储的单位 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。 堆解决的是数据存储的问题,即数据怎么放,放哪里。 Java 虚拟机栈是什么? Java 虚拟机栈(Java Virtual Machine Stack),早期也叫 Java 栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。 是线程私有的 生命周期 生命周期和线程一致,也就是线程结束了,该虚拟机栈也销毁了 作用 主管 Java 程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调 ...
JVM系列-04-1、内存与垃圾回收篇---程序计数器
程序计数器 PC Register 介绍 JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为 PC 计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。 JVM 中的 PC 寄存器是对物理 PC 寄存器的一种抽象模拟。 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行 native 方法,则是未指定值(undefined)。 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条 ...
JVM系列-03-1、内存与垃圾回收篇---运行时数据区概述及线程
运行时数据区概述及线程 概述 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品。 内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。结合 JVM 虚拟机规范,来探讨一下经典的 JVM 内存布局。 我们通过磁盘或者网络 IO 得到的数据,都需要先加载到内存中,然后 CPU 从内存中获取数据进行读取,也就是说内存充当了 CPU 和磁盘之间的桥梁 运行时数据区的完整图 Java 虚拟机定义了若干种程序运行期间会使用到的 ...
Python数据结构模板总结
总结使用Python语言刷题时碰到的模板
Java数据结构模板总结
总结使用Java语言刷题时碰到的模板
Java常用类及其方法总结
Java常用数据结构及其方法
Python-01-基础篇
Python 基础篇(一) 学习视频地址 Python中的输出函数 print()函数 我里面有一个你可以直接使用的函数叫print(),可以将你想展示的东东在IDLE或标准的控制台上显示 print()的函数的使用 print()函数可以输出那些内容? print()函数输出的内容可以是数字 print()函数输出的内容可以是字符串 print()函数输出的内容可以是含有运算符的表达式 print()函数可以将内容输出的目的地 显示器 文件 print()函数的输出形式 换行 不换行 1234567891011121314151617181920##可以输出数字print(520)print(666.666)##可以输出字符串print('HelloWorld')print("HelloWorld")##含有运算符的表达式print(3+1) #3和1是操作数 +是运算符#将数据输出文件中,注意点:##1.所指定的盘存在##2.使用file=XXfp=open('E:/test.txt','a ...
JavaSE_18_Java8新特性(Lambda表达式、函数式接口、Stream流、Optional类)
01、Java8其他新特性 上述讲过的Java8新特性: Java常用类中的日期API LocalDateTime等; 注解 类型注解等; 集合 底层的变化,比如底层数组的延迟创建,红黑树的出现; Java 8 (又称为jdk 1.8) 是Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。 02、Java8新特性的好处 速度更快 代码更少(增加了新的语法: Lambda 表达式) 强大的Stream API 便于并行 最大化减少空指针异常:Optional Nashorn引擎,允许在JVM上运行JS应用 03、并行流与串行流 并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。 Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过parallel() 与sequential() ...
JavaSE_17_反射与动态代理
01、Java反射机制概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。 1、动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。 2、静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。 Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似动态语言的特性。Java的动态性让编 ...