前文说到了 Gradle 依靠 Groovy 语言发挥出了强大的性能。
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。
继续阅读 »
初识 Java 虚拟机
何为虚拟机
何为虚拟机,说白了就是工作在 PC 或者移动手机操作系统之上的一款软件,有的虚拟机能完整的虚拟某个操作系统的环境比如 VMWare,Parallels Desktop,让你能在 Mac 系统上使用 Windows,Windows 系统里面使用 Linux。而有的虚拟机呢,则用来解释执行某个计算机程序,让你无关它的底层实现,你只需要关注上层如何使用它提供的编程套件就好,正所谓:一次编译,到处运行,比如 Java 虚拟机。
继续阅读 »
Java 虚拟机结构
根据 Java 虚拟机规范,Java 的基本结构可归纳为如图所示:
继续阅读 »
众所周知,当我们执行没有任何调优参数(如java -jar myapplication.jar)的 Java 应用程序时,JVM 会自动调整几个参数,以便在执行环境中具有最佳性能。但是许多开发者发现,如果让 JVM ergonomics (即JVM人体工程学,用于自动选择和行为调整)对垃圾收集器、堆大小和运行编译器使用默认设置值,运行在Linux容器(docker,rkt,runC,lxcfs 等)中的 Java 进程会与我们的预期表现严重不符。
本篇文章采用简单的方法来向开发人员展示在 Linux 容器中打包 Java 应用程序时应该知道什么。
more
存在的问题
我们往往把容器当虚拟机,让它定义一些虚拟 CPU 和虚拟内
继续阅读 »
volatile概述
volatile关键字是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量,在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。
在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。
要解决这个问题,需要把变量声明为volatile(不稳定的),以后用到该变量都会到主存中进行存取,一般多任务环境下各任务间共享
继续阅读 »
(1)ClassLoader基本概念
与C或C++编写的程序不同,Java程序并不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类。
此外,这些类文件并非全部装入内存,而是根据程序需要逐渐载入。
ClassLoader是JVM实现的一部分,ClassLoader包括bootstrapclassloader(启动类加载器),ClassLoader在JVM运行的时候加载Java核心的API,以满足Java程序最基本的需求,其中就包括用户定义的ClassLoader。
这里所谓的用户定义,是指通过Java程序实现的两个ClassLoader:一个是ExtClassLoader,它的作用是用来加载Ja
继续阅读 »
1)如果系统已经安装java,通过以下方式设置java相关环境变量:
$ ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Mar 20 14:49 /usr/bin/java -> /etc/alternatives/java
$ ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Mar 20 14:49 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre/bin/java
继续阅读 »
利用Jrebel提升工作效率
老早就听说有Jrebel这款神器了,热部署,去官网看了看,license贵的离谱啊,300RMB per licence
只有用盗版咯。
阿弥陀佛
记录下流程。
1.安装插件
本人习惯用IDEA做开发(依然是盗版,罪过),找Jrebel的插件咯。 鄙视IDE的童鞋可以直接配置JVM,下面会提到的
在IDEA Setting里的plugins可以在线安装,鄙人所处网络环境堪忧,选择离线安装,这也是本人比较推荐的一种方式。
移步https://plugins.jetbrains.com/plugin/4441?pr=idea 下载适合IDEA版本的ZIP包
还是在IDEA Setting
继续阅读 »
原理:Android是基于Java的,要编译成类似Java字节码运行在类似JVM的Dalvik虚拟机上,市面上有很多Java反编译工具,所以反编译一般的安卓程序并修改程序其实是不太难的。
下面讲一讲怎么反编译安卓程序并植入广告(以有米广告为例),仅供学习参考,如若用在商业软件上,造成的后果本人概不负责。
工具下载
本例子用到了两个工具,APKTOOL和AUTO-SIGN,前者用来对程序进行反编译和重编译,后者用来给生成的APK文件进行签名。
本人在Ubuntu 下进行的测试,windows和,mac下应该不会有太大的区别。
下载apktool https://code.google.com/p/android-apkto
继续阅读 »
1.Java与C++的异同
Java解释性语言:源代码-编译器(字节码)-JVM执行
C/C++编译型语言:编译链接成二进制代码
Java不存在全局变量,全局函数,没有指针,不支持多重继承,不支持运算符重载,没有预处理器,不提供goto语句(但保留关键字),不支持自动强制类型转换,必须显式强制类型转换。
Java为纯面向对象语言,所有代码包括函数,变量等都属于类
继续阅读 »