精华内容
下载资源
问答
  • 获得java对象的内存地址

    千次阅读 2018-10-24 12:17:31
    Unsafe类提供了硬件级别的原子操作,在java中内存中的对象地址是可变的,所以获得的内存地址有可能会变化。要获得内存地址也只能通过Unsafe的方法来获得,下面类提供了获取java对象内存地址的方法 package ...

        Java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,在java中内存中的对象地址是可变的,所以获得的内存地址有可能会变化。要获得内存地址也只能通过Unsafe的方法来获得,下面类提供了获取java对象内存地址的方法

    package com.example.demo.othertest;
    import java.lang.reflect.Field;
    import sun.misc.Unsafe;
    
    public class Addresser {
        private static Unsafe unsafe;
    
        static {
            try {
                Field field = Unsafe.class.getDeclaredField("theUnsafe");
                field.setAccessible(true);
                unsafe = (Unsafe) field.get(null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static long addressOf(Object o) throws Exception {
    
            Object[] array = new Object[] { o };
    
            long baseOffset = unsafe.arrayBaseOffset(Object[].class);
            //arrayBaseOffset方法是一个本地方法,可以获取数组第一个元素的偏移地址
            int addressSize = unsafe.addressSize();
            long objectAddress;
            switch (addressSize) {
                case 4:
                    objectAddress = unsafe.getInt(array, baseOffset);
                    //getInt方法获取对象中offset偏移地址对应的int型field的值
                    break;
                case 8:
                    objectAddress = unsafe.getLong(array, baseOffset);
                    //getLong方法获取对象中offset偏移地址对应的long型field的值
                    break;
                default:
                    throw new Error("unsupported address size: " + addressSize);
            }
            return (objectAddress);
        }
    
        public static void main(String... args) throws Exception {
            Object mine = "Hello world".toCharArray(); //先把字符串转化为数组对象
            long address = addressOf(mine);
            System.out.println("Addess: " + address);
    
            // Verify address works - should see the characters in the array in the output
            printBytes(address, 27);
        }
    
        public static void printBytes(long objectAddress, int num) {
            for (long i = 0; i < num; i++) {
                int cur = unsafe.getByte(objectAddress + i);
                System.out.print((char) cur);
            }
            System.out.println();
        }
    }
    

     

    展开全文
  • 如何获得java对象的内存地址

    万次阅读 2018-03-18 12:59:00
    java中内存中的对象地址是可变的,所以获得的内存地址有可能会变化。要获得内存地址也只能通过Unsafe的方法来获得,如下代码片段:Java代码 package com.bijian.study; import java.lang.reflect.Field; ...

     在java中内存中的对象地址是可变的,所以获得的内存地址有可能会变化。要获得内存地址也只能通过Unsafe的方法来获得,如下代码片段:

    Java代码   收藏代码
    1. package com.bijian.study;  
    2.   
    3. import java.lang.reflect.Field;  
    4. import sun.misc.Unsafe;  
    5.   
    6. public class Addresser {  
    7.       
    8.     private static Unsafe unsafe;  
    9.   
    10.     static {  
    11.         try {  
    12.             Field field = Unsafe.class.getDeclaredField("theUnsafe");  
    13.             field.setAccessible(true);  
    14.             unsafe = (Unsafe) field.get(null);  
    15.         } catch (Exception e) {  
    16.             e.printStackTrace();  
    17.         }  
    18.     }  
    19.   
    20.     public static long addressOf(Object o) throws Exception {  
    21.           
    22.         Object[] array = new Object[] { o };  
    23.   
    24.         long baseOffset = unsafe.arrayBaseOffset(Object[].class);  
    25.         int addressSize = unsafe.addressSize();  
    26.         long objectAddress;  
    27.         switch (addressSize) {  
    28.         case 4:  
    29.             objectAddress = unsafe.getInt(array, baseOffset);  
    30.             break;  
    31.         case 8:  
    32.             objectAddress = unsafe.getLong(array, baseOffset);  
    33.             break;  
    34.         default:  
    35.             throw new Error("unsupported address size: " + addressSize);  
    36.         }  
    37.         return (objectAddress);  
    38.     }  
    39.   
    40.     public static void main(String... args) throws Exception {  
    41.         Object mine = "Hi there".toCharArray();  
    42.         long address = addressOf(mine);  
    43.         System.out.println("Addess: " + address);  
    44.   
    45.         // Verify address works - should see the characters in the array in the output  
    46.         printBytes(address, 27);  
    47.     }  
    48.   
    49.     public static void printBytes(long objectAddress, int num) {  
    50.         for (long i = 0; i < num; i++) {  
    51.             int cur = unsafe.getByte(objectAddress + i);  
    52.             System.out.print((char) cur);  
    53.         }  
    54.         System.out.println();  
    55.     }  
    56. }  

    运行结果:



    另一篇java对象内存地址的文章:Java直接内存读写


    展开全文
  • Android Apk反编译得到Java源代码  大家做Android开发,看到别人应用里一些好的功能,是不是很想得到源码,借鉴一下?既然Android是用JAVA开发的,那么我们就能很容易的通过反编译的到应用的源代码。下面我简单...

    Android Apk反编译得到Java源代码

          大家做Android开发,看到别人应用里一些好的功能,是不是很想得到源码,借鉴一下?既然Android是用JAVA开发的,那么我们就能很容易的通过反编译的到应用的源代码。下面我简单介绍下应该怎么操作。

    具体步骤:

    1.首先将apk文件后缀改为RAR并解压。

     

    2.解压rar文件,得到其中的classes.dex文件

     

    3.我们需要用到dex2jar 把dex文件转为jar文件。

    3.1把解压得到的classes.dex文件放入dex2jar.bat 所在目录 )

     

    3.2打开DOS命令行,进入dex2jar所在目录,运行 dex2jar.bat    classes.dex 生成 classes_dex2jar.jar

     

     4.最后用jd-gui.exe打开生成的classes_dex2jar.jar我们就能开到应用的源代码了。

     

     5.用的的工具下载地址

    dex2jar:  https://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=

    Jd-gui:

    http://code.google.com/p/innlab/downloads/list

    展开全文
  • 如何得到JavaVM,JNIEnv接口

    千次阅读 2017-10-19 15:05:53
    在系列(1)中讲到,Java与native code的操作有两种方式:(1)在Java中加载动态链接库(2)使用JNI Invocation inteface,在native code中创建JVM JavaVM接口 第一种方式,在加载动态链接库的时候,JVM会调用JNI_...

    在系列(1)中讲到,Java与native code的操作有两种方式:(1)在Java中加载动态链接库(2)使用JNI Invocation inteface,在native code中创建JVM

    JavaVM接口

    第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。

    第二种方式,在native code中调用JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)可以得到JavaVM指针。

    两种情况下,都可以用全局变量,比如JavaVM* g_jvm来保存获得的指针以便在任意上下文中使用。

    Android系统是利用第二种方式Invocation interface来创建JVM的。

    JNIEnv接口

    JNI开发最常见的错误就是滥用了JNIEnv接口。需要强调的是JNIEnv是跟线程相关的。

    在native method中,JNIEnv作为第一个参数传入。那么在JNIEnv不作为参数传入的时候,该如何获得它?JNI提供了两个函数:(*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL)和(*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_2)。两个函数都利用JavaVM接口获得JNIEnv接口,上面已经讲到如何获得JavaVM接口。

    JNI规范也说明,可以将获得JNIEnv封装成一个函数。

    1
    2
    3
    4
    5
    6
    JNIEnv* JNU_GetEnv()
    {
         JNIEnv* env;
         (*g_jvm)->GetEnv(g_jvm, ( void **)&env, JNI_VERSION_1_2);
         return  env;
    }
    展开全文
  • Java方法返回一个数组,在jsp页面用方式获得。js文件中的方法要用到这个数组,要怎么做才能传过去。
  • 获得java.lang.Throwable错误堆栈信息

    千次阅读 2014-09-30 17:44:22
    java语言中java.lang.Throwable是所有error、exceptiond
  • 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它 这是我在校外访问学校网遇到的问题 我们学校访问内网的方式就是...
  • 得到Java程序的WIN32窗口句柄(转)

    万次阅读 2013-04-25 10:40:27
    我们知道C++的每个窗体都对应着一个句柄HWND,通过这个句柄我们可以对这个...如果存在的话我们怎么来在Java程序中得到它并利用它来操作这个窗口呢?   用spy++查看一下,Frame或者JFrame的对象或者子类对象确实都
  • 遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet&lt;String&gt; argNameSet, HashSet&lt;String&gt; classNameSet, ArrayList&lt;Integer&gt; record) { if(dir....
  • 之前写了一篇如何校外登校园网登不上的博客,点此跳转,但不保证重置IE、重启电脑后一定能生效 ...安装Array SSL VPN 下载界面 以Windows 64位为例 下载解压后 / 或者直接压缩包在压缩软件中打开,运行SSLVPNSetup_x...
  • JAVA_API1.6文档(中文)

    万次下载 热门讨论 2010-04-12 13:31:34
    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
  • 2020年支持java8的Java反编译工具汇总

    万次阅读 多人点赞 2018-06-29 10:58:53
    luyten是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
  • 推荐10个堪称神器的 Java 学习网站

    万次阅读 多人点赞 2019-10-28 15:11:28
    Java学习网站,有了这些,成为大牛不在话下
  • JavaJava双端队列Deque使用详解

    万次阅读 多人点赞 2018-09-15 18:14:05
    Deque是一个双端队列接口,继承自Queue接口,它们共同的实现类是LinkedList。 Deque的功能很强大: ... 注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。 jdk文档中关于Deque的使用介...
  • java复习快速导航

    万次阅读 多人点赞 2019-06-11 09:20:23
    1. java基础 java基础必背知识点 java基础加强知识点 javaweb1 (mysql、HTML、js、xml) javaweb2 (tomcat、cookie、el、filter) javaweb3 (jquery、ajax、json、redis) maven 2. java提高 redis dubbo 并发JUC ...
  • java 纯字符串运算

    万次阅读 2021-09-03 14:50:36
    调用下面的方法就能得到结果 import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import java.math.BigDecimal; //JAVA和JS交互运算,字符串运算...
  • java两个对象比较属性值

    万次阅读 2021-09-10 11:25:45
    import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util....
  • Java基础之—反射(非常重要)

    万次阅读 多人点赞 2017-05-13 13:29:02
    (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都...
  • JDK 安装 Java环境变量配置 详细教程

    万次阅读 多人点赞 2018-01-23 12:48:57
    所有平台:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 “Accept License Agreement” 根据系统选择对应的安装文件,64位系统安装64位JDK ...
  • Java入门

    千次阅读 多人点赞 2019-04-06 18:54:50
    Java入门 Java 入门 主要内容 Java的地位 Java诞生 Java的特点 安装JDK 简单的Java应用程序 重点与难点: 重点:Java平台无关性、Java程序的结构。 难点:Java程序的开发过程。 Java之父与Java的诞生 Java是1995年6...
  • Java获得UTC时间

    万次阅读 2013-09-16 01:04:31
    package com.feima.afei.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; /** * * @author wang zhenfei * */ public
  • JAVA名人

    万次阅读 2019-05-28 19:37:38
    詹姆斯·高斯林(James Gosling,1955年5月19日-,出生于加拿大),软件专家,Java编程语言的共同创始人之一,一般公认他为“Java之父”。 Joshua Bloch Java 集合框架创办人,Joshua Bloch 领导了很多 Java 平台...
  • java从控制台获得输入

    万次阅读 2018-03-01 22:27:53
    java从控制获得输入采用的是Scanner方法,代码如下:import java.util.Scanner; Scanner scanner = new Scanner(System.in); int num = scanner.nextInt();
  • Java 获得时区,获得UTC时间

    万次阅读 2018-08-28 17:10:05
    Java 获得时区相关的类,主要是ZoneId,还有TimeZone(这个信息详细一点) ZoneId 主要是通过列表选定了一些规定位置,然后通过这些位置代表的时区,来划分时区,例如 中国就是Asia/Shanghai 然后根据时区,我们可以根据 ...
  • 请问java怎么获得浏览器语言,弄了好久都没弄出来,求大神帮忙
  • Java.Utils:Date 时间工具类

    万次阅读 2020-02-13 18:30:06
    package ... import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @description:...
  • Java获得泛型类型

    万次阅读 2011-01-19 13:30:00
    最近要想获得泛型类型,总结多方意见,再通过实践,最终获得了结果。 当然也被许多文章给误导过…… 下面我们看一个例子,这个例子是我自己写的 package org.javazone.jroi.test.reflect; import java.lang.reflect....
  • Java -D 属性获得

    千次阅读 2017-10-12 14:44:53
    此文纯属个人理解,并未深入了解,看官...使用System.getProperty()方法获得,直接放一个例子,直观点:Test.java :public class Test { public static void main(String[] args) { System.out.println("Hell

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,362,157
精华内容 944,862
关键字:

如何获得java

java 订阅