2017-06-10 UFreedom
JVM
初识 Java 虚拟机 何为虚拟机 何为虚拟机,说白了就是工作在 PC 或者移动手机操作系统之上的一款软件,有的虚拟机能完整的虚拟某个操作系统的环境比如 VMWare,Parallels Desktop,让你能在 Mac 系统上使用 Windows,Windows 系统里面使用 Linux。而有的虚拟机呢,则用来解释执行某个计算机程序,让你无关它的底层实现,你只需要关注上层如何使用它提供的编程套件就好,正所谓:一次编译,到处运行,比如 Java 虚拟机。 继续阅读 »
2016-01-04 veryyoung
前文说到了 Gradle 依靠 Groovy 语言发挥出了强大的性能。 Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。 继续阅读 »
2017-06-24 UFreedom
JVM
Java 虚拟机结构 根据 Java 虚拟机规范,Java 的基本结构可归纳为如图所示: 继续阅读 »
2017-04-06 blademainer
众所周知,当我们执行没有任何调优参数(如java -jar myapplication.jar)的 Java 应用程序时,JVM 会自动调整几个参数,以便在执行环境中具有最佳性能。但是许多开发者发现,如果让 JVM ergonomics (即JVM人体工程学,用于自动选择和行为调整)对垃圾收集器、堆大小和运行编译器使用默认设置值,运行在Linux容器(docker,rkt,runC,lxcfs 等)中的 Java 进程会与我们的预期表现严重不符。 本篇文章采用简单的方法来向开发人员展示在 Linux 容器中打包 Java 应用程序时应该知道什么。 more 存在的问题 我们往往把容器当虚拟机,让它定义一些虚拟 CPU 和虚拟内 继续阅读 »
2015-04-10 Eric Wang
volatile概述 volatile关键字是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量,在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。 要解决这个问题,需要把变量声明为volatile(不稳定的),以后用到该变量都会到主存中进行存取,一般多任务环境下各任务间共享 继续阅读 »
2014-07-21 veryyoung
(1)ClassLoader基本概念   与C或C++编写的程序不同,Java程序并不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类。 此外,这些类文件并非全部装入内存,而是根据程序需要逐渐载入。 ClassLoader是JVM实现的一部分,ClassLoader包括bootstrapclassloader(启动类加载器),ClassLoader在JVM运行的时候加载Java核心的API,以满足Java程序最基本的需求,其中就包括用户定义的ClassLoader。 这里所谓的用户定义,是指通过Java程序实现的两个ClassLoader:一个是ExtClassLoader,它的作用是用来加载Ja 继续阅读 »
2014-08-22 veryyoung
Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。 计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。 通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)。 DK1.5的原子包:java.util.concurrent.atomic 这个包里面提供了一组原子类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择 继续阅读 »
2018-07-23 LEo
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 继续阅读 »
2016-07-26 ruki
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机。 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用、能用、轻量就行,如果觉得代码架构设计的不是很好的话,也不用过于吐槽哈。。 虽然我还有写过两个比较成熟的虚拟机项目(jvm和avm),虽然架构上比这个更完善,更容易扩展,功能也更强大 但是毕竟是给公司写的,没法拿出来分享。。 背景 先说说,为什么要写这个东西。。 之前有段时间,我在用ida逆向分析某些程序的算法,并且要把它提取出来将其跨平台运行,这个时候我首先考虑到是ida的F5插件 毕竟这个可以直接反成c/c++代码,还是很强大的,基本上98%的x86汇编代码,我在通过 继续阅读 »
2015-02-05 veryyoung
利用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 继续阅读 »