Thursday Jun 18, 2009

New java verifier class file ver 50 onwards

While searching for something else, I chanced upon this article on the new class verifier. This gives more information on why version 50 is different and what are the improvement on it.


 Of course for the more keen here is a pointer to JSR-202.


Tuesday Jan 27, 2009

Elliptical Gradient Button in JavaFX

In JavaFX, we can make our own fancy buttons. Here in this blog, I tried to write an elliptical button. Have a look.



Here is the code :


package ellipticalbutton;

import javafx.scene.effect.\*;
import javafx.scene.Group;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.\*;
import javafx.scene.Scene;
import javafx.scene.shape.\*;
import javafx.scene.text.\*;
import javafx.stage.\*;

var x=70;
var y=40;

var el:Ellipse = Ellipse {
    centerX: 120
    centerY: 100
    radiusX: bind x
    radiusY: bind y

    effect: DropShadow {
        offsetY: 3
        color: Color.color(0.3, 0.3, 0.3)
        spread:0.4
    }//end effect

    effect:GaussianBlur{
    }
    fill:RadialGradient{
        centerX:0
        centerY:0
        radius:25
        proportional:false
        cycleMethod:CycleMethod.REPEAT
        stops:[
            Stop {
                offset: 0.0
                color: Color.ANTIQUEWHITE },
            Stop {
                offset: 0.3
                color: Color.GREEN },
            Stop {
                offset: 0.8
                color: Color.ANTIQUEWHITE }
        ]

    }//end fill

    onMousePressed: function( e: MouseEvent ):Void {
        x = x - 2;
        y = y - 2;
    }

    onMouseReleased: function( e: MouseEvent ):Void {
        x = x + 2;
        y = y + 2;
    }

}//end ellipse


var t = Text {
    font: Font {
        size: 20
        name:"Verdana"
    }

    x: 90
    y: 100
    content: "Press"
    fill:Color.DARKGREEN
    effect:DropShadow{
        offsetX:10
        offsetY:10
        color:Color.DARKGRAY
    }

}//end Text

Stage {
    title: "Elliptical Button"
    //style:StageStyle.UNDECORATED
    width: 240
    height: 320
    scene: Scene {

            fill:Color.LIGHTGREY
            content: [Group{
                    content:[
                        el,
                        t
                    ]

                }
            ]
        }
}

Tuesday Jan 20, 2009

Sun Tech Days 2008:An insider review.

SUN tech days 08 in hyderabad was fantastic.
A lot of engineers attended and this I guess was one of the largest gathering of Developers in India in 2008.


This was a great platform for Sun to showcase its technology in India which has a large IT base.
Although the center point of focus was java and netbeans, there were also another interesting sessions.
Sessions on the new sun studio, presenters from Intel and AMD were a hit.

The demo booths were always crowded and attractive sessions were buzzing with people.
Around this time SUN had acquired MySQl and that keynote by David Axmark was fanstastic involving a lot of passion.


But there were certain things that were striking otherwise as well.
A lot of in-session advertisement hurts and takes the focus out of technology to Sun marketing.
I am not saying this was not required, but overdoing it or bringing it into the very dynamics of technology is not welcome.
And as for the other keynotes, they were too long and doing overtime.


Another thing was that Sun kept focus on software side, while it's and irony of sorts that Sun makes money more from Systems than from Software alone.

Hardware demonstrations and session need to be added as well. A simple sun machine power needs to be brought out especially in a country like India, where the market is highly price sensitive but huge.
Technology like Sun ray and desktops like the Ultra 24 boxes should also be added to the set of demonstrations.


As for my own liking, the food was best. It is heartning to see that Sun does excellent managing a conference of this stature.
Kudos to those who made the last year a success. Keep the good work going.

Writing Java Script in Java.

A small code that can call JS code from within Java.
This feature is part of the jdk6 version.









01 import javax.script.\*;
02 import java.util.\*;
03
04 class Sample
05 {
06 public static void main(String[] args)
07 {
08
09 ScriptEngineManager manager= new ScriptEngineManager();
10 List<ScriptEngineFactory> factories= manager.getEngineFactories();
11
12 for (ScriptEngineFactory factory: factories) {
13
14 String name = factory.getEngineName();
15 String version = factory.getEngineVersion();
16 String language = factory.getLanguageName();
17
18 System.out.println(name+"("+version+"): "+language);
19
20 for(String n: factory.getNames())
21 System.out.println(n);
22 }
23
24 // JavaScript code in a String
25 String script = "function hello(name) { print('Hello, ' + name); }";
26
27
28 ScriptEngine engine = manager.getEngineByName("JavaScript");
29
30 try
31 {
32 // evaluate JavaScript code from String
33 engine.eval("print('Hello, World')");
34 engine.eval(script);
35 Invocable inv = (Invocableengine;
36 inv.invokeFunction("hello""THE");
37
38 }
39 catch (ScriptException e)
40 {
41 e.printStackTrace();
42 }
43 catch (NoSuchMethodException ee){
44 ee.printStackTrace();
45 }
46
47
48 }
49 }

Friday Jan 16, 2009

SUN tech days 2009 is here

Sun tech days 2009 is happening and registrations are open.


Sun Tech Days 2009 Flier

Thursday Jan 08, 2009

Garbage First: 3 Differences between CMS and G1

Garbage first is a new experimental collector introduced in the hotspot VM.
It is experimental since,it is not yet fully supported and still had some bugs which are being fixed.

CMS has been the defacto garbage collector for many for quite some time now.
Here's 3 main reasons why G1 is a bit better than CMS

1. Compacting
CMS in old generation does not undergo any compaction. During a full GC, CMS marks and sweeps (deletes) the objects that are not alive in the old generation. However, it does not collect all the objects towards one end of the heap. This results in fragmentation over time, following which the vm falls back to the serial gc to do a compaction. this is definitely a time consuming and long pause activity.
In G1, since the heap is organized into regions, there is no fragmentation and even if there is for a short period of time, it is limited to particular set of regions. The entire old generation is not affected.

2. Ease of use.
G1 has a lot less number of switches as compared to CMS, tuning your applications VM is simpler.
G1 is already present in jdk7 as of now and one can try it.
to use G1, these 2 switched need to be passed.
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

3. Predictable.
An inherent problem with CMS is that, it has a quite long pauses when it goes for a full GC.
The primary reason for this is that it has to scan the entire heap searching for live objects.
With the regions in G1, this scanning can be limited to a particular set of regions and hence the pause times can be made more predictable.

Friday Dec 19, 2008

Getting Java program info on Solaris 10

If you have a Java application running and want to get the program arguments in a simplest possible way on Solaris 10.

for example if your java process id is 18346

bash-3.00$ jps
56286 Jps
18346 Test
bash-3.00$ pargs 18346
18346: ./java -XX:+UseSerialGC Test
argv[0]: ./java
argv[1]: -XX:+UseSerialGC
argv[2]: Test

to get heap usage
Use ptools with egrep.


bash-3.00$ pmap 18346 | egrep "heap|total"
00032000 56K rwx-- [ heap ]
00040000 3840K rwx-- [ heap ]
00400000 86016K rwx-- [ heap ]
total 178056K

Friday Dec 12, 2008

Mixing of heavyweight and lightweight components

A new feature that will be part of jdk 6u12, will be heavyweight components and lightweight components will be allowed to mix in applications.
Until now, this was completely discouraged and not at all supported.
There is a lot of testing that is happening on this right now and not many P1's are being found.

Follow the bug, 4811096

Using jstat to get GC information

With Jdk 6, there is are a bunch of utilities that are useful in debugging and analyzing the application.
I will try to use jstat and try to gather some useful data about the application.

I am using Solaris 10 as my desktop platform, but this will work on any platform as is expected with Java.
A couple of uname gives me the following info.
SunOS 5.10 Generic_127111-07 sun4v sparc SUNW,Sun-Fire-T200


bash-3.00$ ./java -fullversion
java full version "1.6.0_05-b13"

A quick jps shows me this (For those who are not aware jps shows the java processes information running on your machine)


bash-3.00$ jps -l

56850 com.sun.javaws.Main
60209
50540 sun.tools.jconsole.JConsole
50854 sun.tools.jps.Jps

You could also do a jps -v to get detailed screens full of information if you need.


Let's try to monitor jconsole, for fun. This can be done on Java process.


bash-3.00$ ./jstat -gcutil 50540 1000 6
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 16.00 0.00 78.15 0 0.000 0 0.000 0.000
0.00 0.00 16.00 0.00 78.15 0 0.000 0 0.000 0.000
0.00 0.00 16.00 0.00 78.15 0 0.000 0 0.000 0.000
0.00 0.00 16.00 0.00 78.15 0 0.000 0 0.000 0.000
0.00 0.00 16.00 0.00 78.20 0 0.000 0 0.000 0.000
0.00 0.00 18.00 0.00 78.28 0 0.000 0 0.000 0.000

As there is no activity on jconsole when I ran it, GC did not run at all.
Here is a list of acronyms used in the above output.
S0 Survivor space 0
S1 Survivor space 1
E Eden Generation
O Old Generation
P Permanent Generation
YGC Young GC Count
YGCT Young GC time
FGC Full GC Count
FGCT Full GC time
GCT Any GC time

Now, lets try to see some more.


bash-3.00$ jps -l
54327 org.netbeans.Main
56850 com.sun.javaws.Main
60209
55847 sun.tools.jps.Jps
54434 memory.MemoryConsumer
50540 sun.tools.jconsole.JConsole

I will try to monitor application 54434
This application generates new Java objects and also has an explicit call to GC in the code to run GC.


bash-3.00$ ./jstat -gcutil 54434 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 67.80 0.00 45.58 0 0.000 0 0.000 0.000
0.00 0.00 71.80 0.00 45.60 0 0.000 0 0.000 0.000
0.00 0.00 71.80 0.00 45.66 0 0.000 0 0.000 0.000
0.00 0.00 71.80 0.00 45.66 0 0.000 0 0.000 0.000
0.00 0.00 71.80 0.00 45.66 0 0.000 0 0.000 0.000
0.00 0.00 73.80 0.00 45.66 0 0.000 0 0.000 0.000
....
0.00 0.00 0.00 72.86 45.73 1 0.020 1 0.153 0.174
0.00 0.00 69.83 72.86 45.76 1 0.020 1 0.153 0.174
0.00 0.00 69.83 72.86 45.76 1 0.020 1 0.153 0.174
0.00 0.00 71.49 72.86 45.77 1 0.020 1 0.153 0.174
0.00 0.00 71.49 72.86 45.77 1 0.020 1 0.153 0.174
0.00 0.00 72.80 72.86 45.77 1 0.020 1 0.153 0.174
....
0.00 0.00 78.38 91.17 45.80 1 0.020 1 0.153 0.174
0.00 0.00 79.48 91.17 45.80 1 0.020 1 0.153 0.174
0.00 0.00 80.97 91.17 45.81 1 0.020 1 0.153 0.174
0.00 6.25 64.78 89.41 45.81 4 0.035 4 0.429 0.465
0.00 9.38 65.56 89.40 45.49 10 0.173 10 1.274 1.448
0.00 0.00 69.84 89.38 45.52 11 0.203 11 1.595 1.798


We can observe that over some time, the Eden gets filled up.
A GC call is done(in this case, explicitly for demonstration purposes) and the YGC count increases. Also, at some point of time Full gc gets called and the Full GC aslo happens.
It is evident that Young GC happens at a lesser interval than Full GC which is a reason generation GC is used in any virtual machine today.
G1 developers tried to do a new GC algorithm that didn't use generational heap, but soon realized it that it was not very useful.

Another small test, using -XX:+SerialGC gives me this statistics.


bash-3.00$ ./jstat -gcutil 61817 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.02 0.00 71.92 43.10 45.69 2 0.067 0 0.000 0.067
0.02 0.00 71.92 43.10 45.69 2 0.067 0 0.000 0.067
0.00 0.00 57.99 59.97 45.69 4 0.092 1 0.128 0.219
0.00 0.00 42.57 59.98 45.69 6 0.107 2 0.250 0.357
0.00 0.00 43.03 59.98 45.69 6 0.107 2 0.250 0.357
....
0.00 0.17 44.95 94.10 45.70 7 0.126 2 0.250 0.375
0.00 0.17 45.57 94.10 45.70 7 0.126 2 0.250 0.375
0.00 0.17 46.06 94.10 45.70 7 0.126 2 0.250 0.375
0.00 0.17 46.44 94.10 45.70 7 0.126 2 0.250 0.375
0.00 0.17 47.06 94.10 45.70 7 0.126 2 0.250 0.375
0.00 0.17 48.24 94.10 45.70 7 0.126 2 0.250 0.375
....
0.00 0.17 59.66 94.10 45.75 7 0.126 2 0.250 0.375
0.00 0.17 65.32 94.10 45.76 7 0.126 2 0.250 0.375
0.00 0.17 67.29 94.10 45.81 7 0.126 2 0.250 0.375

Wednesday Dec 10, 2008

Applet test

Now it works on Sun blog. Finally got it working.

Tuesday Feb 26, 2008

Forthcoming attractions

I am leaving for Sun tech days tonight. Should be there in time for it tomorrow.

I am not presenting anything :-(
Would like to list out somethings that I am interested about in attending in the next 3 days.

Rich Green's address tomorrow morning should be definitely worth it.
Recent acquisition and Sun's focus towards the same should definitely get a mention.
There's a lot happening tomorrow about Java EE and Ruby that should catch attention.

On thursday David Axmark's address will have an importance.
ZFS JSF sessions are interesting on that day.
Also, AMD optimisation is something which I will definitely be attending.
But SUN SPOT session should be fun as well.

Friday morning, I cannot miss Ian Murdock for anything.
I have been very very interested to meet this person and hear him speak.
And then that day I will be in Netbeans day.

Return journey follows

Friday Feb 22, 2008

Students - The techno geeks.

For students.

If you are student then this is something you cannot miss.
Here they are Resources

Required: Students who are interested :-)

Thursday Feb 14, 2008

Sun tech days 2008

Sun tech days 2008 is about to happen.

Go and register yourself before it is overbooked.

Tuesday Dec 04, 2007

Day 1 at FOSS

Today was the first day at FOSS.

Open Solaris Day.
Meagre crowds and Solaris ruled the day.

Glynn Foster's talk was the main attraction.
Pics from 4 December 2007

Friday Nov 30, 2007

FOSS.IN 2007 is round the corner.

FOSS.IN 2007 is around the corner.
Next week it's going to be a lot of hustle and bustle around in Bangalore.

For the uninitiated, http://foss.in/2007/info/Home

Anyway if you are in Bangalore, do catch up on that.

And meanwhile if you are interested in what SUN is doing.
SUN FOSS BLOG

Also, if you are interested in what I am doing.(Most likely not..).

Vaibhav & I are presenting.

About

I am Vikram Aroskar working in the Java team based out of India.

Search

Categories
Archives
« July 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
Today