JVM内存区域
JVM内存区域
在传统的C/C++开发中,我们经常通过使用申请内存的方式来创建对象或是存放某些数据,但是这样也带来了一些额外的问题,我们要在何时释放这些内存,怎么才能使得内存的使用最高效,因此,内存管理是一个非常严肃的问题。
比如我们就可以通过C语言malloc函数动态申请内存,并用于存放数据,而在Java中,这种操作实际上是不允许的,Java只支持直接使用基本数据类型和对象类型,至于内存到底如何分配,并不是由我们来处理,而是JVM帮助我们进行控制,这样就帮助我们节省很多内存上的工作,虽然带来了很大的便利,但是,一旦出现内存问题,我们就无法像C/C++那样对所管理的内存进行合理地处理,因为所有的内存操作都是由JVM在进行,只有了解了JVM的内存管理机制,我们才能够在出现内存相关问题时找到解决方案。
内存区域划分
既然要管理内存,那么肯定不会是杂乱无章的,JVM对内存的管理采用的是分区治理,不同的内存区域有着各自的职责所在,在虚拟机运行时,内存区域如下划分:
我们可以看到,内存区域一共分为5个区域,其中方法区,堆和直接内存是所有线程共享的区域,随着虚拟机的创建而创建,虚拟机的结束而销 ...
JVM启动流程(JDK8)
JVM启动流程(JDK8)
JVM的启动入口是位于jdk/src/share/bin/java.c的JLI_Launch函数,其定义如下:
12345678910111213intJLI_Launch(int argc, char ** argv, /* main argc, argc */ int jargc, const char** jargv, /* java args */ int appclassc, const char** appclassv, /* app classpath */ const char* fullversion, /* full version defined */ const char* dotversion, /* dot version defined */ const char* pname, /* program name ...
西电计科微机原理实验四
西电计科微机原理实验四
实验要求
流水灯实验:利用8255的A口、B口、C口循环点亮发光二极管。
根据输入控制灯的亮灭
在完成(1)基础上,增加通过读取开关控制流水灯的循环方向和循环方式。
跟上一次实验基本相同,换了个芯片,然后控制的范围从八颗发光二极管变为了十六颗发光二极管
基础版
简单实现了功能1和2,全1左移,全0右移
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102COM_ADD EQU 0273H PA_ADD EQU 0270H PB_ADD EQU 0271H PC_ADD EQU 0272H _STACK SEGMENT STACK DW 100 DUP(?) _STACK ENDS _DATA SEGMENT WORD ...
西电计科微机原理实验三
西电计科微机原理实验三
实验要求
开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。
当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
自主设计控制及显示模式,完成编程调试,演示实验结果。
我没做要求1,当开关Yi不是全为低电平和高电平时,发光二极管Qi按1423的顺序点亮,这里可以按照自己的需求改,可以把剩下的四个也加上去,顺序也可以改,如果你要做要求1,开关Yi为某特定值时跳转Light更好(在实验四中实现类似功能)
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283IO244 equ 230h ;244IO273 equ 230h ;273_stack segment stack dw 100 DUP( ...
Hexo Butterfly博客添加Google分析
Hexo Butterfly博客添加Google分析
进入谷歌分析官网:https://analytics.google.com/analytics/web/
如下图所示:
点击开始评估
输入账户名,随便填就行,点击下一步
输入属性名称(随便填),填上你的博客域名,点击下一步
剩下的步骤按自己的情况填就行
最后会弹出一个弹窗,上面会有一个跟踪id,一般以UA开头,将它复制下来,在_config.butterfly.yml文件中搜索google_analytics,在这个后面把你的跟踪id填进去,如下所示:
如果你小心把谷歌分析的网址关了,应该怎么找跟踪id呢?
进入后台,点击管理:
找到资源存取管理,点击:
点开查看使用者的账户详细资料就能找到:
下图我打红色码的就是跟踪id:
更改好了以后,重新部署博客,最后看到这样的页面:
就大功告成啦!
Retrofit2简明讲解
Retrofit2简明讲解
什么是Retrofit
retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。
本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数,即Header、Url等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit,Retrofit根据用户需求解析。
使用介绍
使用 Retrofit 的步骤共有7个:
步骤1:添加Retrofit库的依赖
步骤2:创建 接收服务器返回数据 的类
步骤3:创建 用于描述网络请求 的接口
步骤4:创建Retrofit实例 并 创建网络请求接口实例
步骤5:发送网络请求(异步 / 同步)
步骤1:添加Retrofit库的依赖
如图所示:
步骤2:创建 接收服务器返回数据 的类
在正式的请求网络数据中,返回的数据的外嵌套 ...